Wie können Jeff Deans „Latenzzahlen, die jeder Programmierer kennen sollte“ im Kontext unterschiedlicher Hardware-Implementierungen genau sein?

10

Ich beziehe mich auf diese Tabelle mit Latenzzahlen , die Jeff Dean bei Google zugeschrieben wird.

Was ich nicht verstehe ist, variieren diese Zahlen nicht von einem Hardwaresatz zum nächsten? Wie können diese für alle Arten von RAM, CPU, Motherboard, Festplatte usw. genau sein?

temporärer_Benutzername
quelle
Unter people.eecs.berkeley.edu/~rcs/research/interactive_latency.html wird gezeigt, wie sich die Zahlen je nach (repräsentativer Hardware pro) Jahr ändern.
ShreevatsaR

Antworten:

14

Diese Zahlen (auch in Norvigs Teach yourself-Programmierung in 10 Jahren aufgeführt ) sind ungefähre Angaben und nur als Größenordnung nützlich.

Tatsächlich variiert die heutige Hardware (zumindest für Desktops oder Laptops) nicht so stark, selbst zwischen einem billigen 300-Euro-Laptop und einer High-End-10.000-Euro-Workstation. Die Geschwindigkeit variiert um einen Faktor von höchstens ungefähr 2 oder 4. Eine solche Workstation kann eine größere Festplatte, mehr Kerne, Cache und RAM haben. Dies hat jedoch keinen großen Einfluss auf die Leistung von Single-Threads.

Schauen Sie sich einige Zahlen auf http://openbenchmarking.org/ oder einige CPU-Komparatoren an.

Das so genannte Moores Gesetz wird sterben . Mein über 3 Jahre alter Desktop zu Hause (ein i3770K) könnte (heute, im März 2016) durch einen i6700 ersetzt werden, der nur 20% schneller ist.

Basile Starynkevitch
quelle
7

Die Zahlen sollen nicht genau sein. Entscheidend sind die Verhältnisse zwischen den Größenordnungen zwischen den Ebenen .

Wenn jedoch eine disruptive Technologie auftritt (z. B. Cloud Computing, 10 GB / 100 GB Ethernet, neues Netzwerkkernmodul, SSD-Speichernetzwerke, Virtualisierung und Containerisierung), können diese Nummern ungültig werden, da neue Ebenen angezeigt, ausgeblendet oder gemischt werden.

Wenn Sie auf einer sehr hohen Ebene programmieren - bei der alle Berechnungen, Netzwerke, Analysen usw. mit Bibliotheken ausgeführt werden, die nicht von Ihnen selbst geschrieben wurden, hilft es möglicherweise nicht viel, die Leistungsdaten von Operationen auf niedriger Ebene zu kennen, da Sie die Möglichkeit haben, die einzelnen zu verbessern Die Leistung der Bibliothek ist eher begrenzt oder völlig unmöglich.

Lesen Sie stattdessen die leistungsbezogene Dokumentation jeder Bibliothek sorgfältig durch. Wenn eine Bibliothek nicht mit diesen geliefert wird, fragen Sie sie - machen Sie es zu einem Problem. Oder lernen Sie, wie Sie Software richtig bewerten.

Ein grundlegendes Verständnis der Latenzzahlen ist wichtig, wenn Sie von einem Unternehmen eingestellt werden, das Softwarekomponenten entwirft und herstellt . Vergleichen Sie das mit einem Unternehmen, das Autos und alle darin enthaltenen Komponenten entwirft und herstellt - das sprichwörtliche "Erfinden des Rades" (Gummi, Reifendruck, Laufflächen usw.)

Die meisten Softwareunternehmen arbeiten nicht auf Komponentenebene - ganze funktionale Softwaresysteme können aus dem Zusammenfügen von Komponenten aufgebaut werden. Diese Softwareunternehmen müssen sich nicht darauf konzentrieren, wie Komponenten in Bezug auf Latenzen konstruiert werden. Stattdessen müssen sie die Qualität der von ihnen ausgewählten Komponenten bewerten.

Zusammenfassend ist (1) es sehr wahrscheinlich, dass Sie die Latenzzahlen nicht kennen müssen; (2) es sei denn, Sie möchten von einem Unternehmen eingestellt werden, das Softwarekomponenten (Bibliotheken) herstellt, sei es zum Verkauf oder für den internen Gebrauch (wie in einigen der größten Softwareunternehmen der Welt), (3) wenn Sie diese Nummern benötigen, Es ist Ihre Aufgabe, die Benchmarks auf wissenschaftlich korrekte Weise selbst durchzuführen, oder Sie sollten nicht an Softwarekomponenten arbeiten.

rwong
quelle
3

Niemand hat behauptet, dass diese Zahlen für jede Hardware korrekt sind.

Sie sind jedoch viel, viel genauer als blinde Vermutungen. Darauf basieren leider viele Leute ihren Code.

gnasher729
quelle
2

Sie sind nicht ganz genau und sollen es auch nicht sein.

Sie sind (besonders bei den kleineren Zahlen) etwas besser als nur eine Größenordnung. Ein weiterer Punkt ist, dass es hilfreich sein kann, zu verstehen, welche Dinge nahe beieinander liegen, dass Menschen manchmal falsch interpretieren, dass sie viel weiter voneinander entfernt sind als sie wirklich sind. Zum Beispiel gehen einige Leute davon aus, dass eine falsche Vorhersage der Branche häufig eine große Sache ist. Es kann eine große Sache sein , wenn es eine Menge wiederholt wird , aber es ist nicht unbedingt wert , eine riesige Menge überall zu opfern und überall sonst nur besser Verzweigungsvorhersage (zB zu bekommen, wenn Sie aus dem Hauptspeicher gelesen oder sogar L2 - Cache - Verzweigungsvorhersage zu verbessern, Es ist wahrscheinlich ein Nettoverlust.

Gleichzeitig können Größenordnungen die nützlichsten Teile sein. Beispielsweise dauert der Zugriff auf Daten aus dem Hauptspeicher etwa 100-mal länger als aus einem Register. Ja, auf einem Computer ist es möglicherweise etwa 97-mal länger und auf einem anderen Computer ist es möglicherweise fast 127-mal länger. Es wird mit ziemlicher Sicherheit näher an 100 liegen als an 10 oder 1000.

Persönlich würde ich die meisten davon eher als Inseln im Pazifik betrachten. Festplattengeschwindigkeiten (zum Beispiel) könnten die hawaiianischen Inseln sein. SSD-Geschwindigkeiten sind die philippinischen Inseln. Dies zeigt die Karte in einem Maßstab, der klein genug ist, damit jeder von ihnen wie ein einzelner Punkt aussieht. Wenn wir hineinzoomen, stimmt das eindeutig nicht - aber der Abstand zwischen den beiden Ketten ist um ein Vielfaches größer als der Abstand zwischen den Inseln in beiden Ketten.

Jerry Sarg
quelle
0

Natürlich können die Zahlen nicht für jede Maschine genau sein. Und ich denke, sie sollten es nie tun. Sie zeigen jedoch Unterschiede in der Größenordnung zwischen verschiedenen Arten von Operationen.

Weitere nützliche Links und Daten finden Sie in den Kommentaren Ihrer verknüpften Daten.

Eiko
quelle