Was ist der Rechenaufwand von

26

Eines der Hauptprobleme, mit denen wir uns in molekularen Simulationen befassen müssen, ist die Berechnung von entfernungsabhängigen Kräften. Wenn wir die Kraft- und Abstandsfunktionen einschränken können, um gerade Potenzen des Abstandes , können wir einfach das Quadrat des Abstandes r 2 = r r berechnen und müssen uns nicht um r kümmern . Wenn es jedoch ungerade Potenzen gibt, müssen wir uns mit r = befassenrr2=rrr .r=r2

Meine Frage ist: Wie teuer ist das Rechnen wie in den Bibliotheken gängiger Sprachen (C / C ++, Fortran, Python) usw. implementiert? Gibt es wirklich viele Leistungsverbesserungen, wenn der Code für bestimmte Architekturen von Hand optimiert wird?x

aeismail
quelle

Antworten:

39

Als Erweiterung zu Moyners Antwort ist der On-Chip sqrtnormalerweise eine rsqrt, dh eine reziproke Quadratwurzel, die ein 1 / berechnet . Wenn Sie also in Ihrem Code nur1/r verwenden(wenn Sie Molekulardynamik betreiben), können Siedirektrechnenund sich die Teilung sparen. Der Grundfür die Berechnungist, dass die Newton-Iteration keine Divisionen, sondern nur Additionen und Multiplikationen enthält.a1/a1/rr = rsqrt(r2)rsqrtsqrt

Nebenbei bemerkt, Divisionen werden auch iterativ berechnet und sind fast genauso langsam wie rsqrtin Hardware. Wenn Sie nach Effizienz streben, sollten Sie versuchen, überflüssige Trennlinien zu entfernen.

Einige modernere Architekturen, wie die POWER-Architekturen von IBM, bieten nicht rsqrtper se, sondern eine auf wenige Bits genaue Schätzung, z . B. FRSQRTE . Wenn ein Benutzer aufruft rsqrt, generiert dies eine Schätzung und dann eine oder zwei (beliebig viele) Iterationen des Newton- oder Goldschmidt-Algorithmus unter Verwendung regelmäßiger Multiplikationen und Additionen. Der Vorteil dieses Ansatzes besteht darin, dass die Iterationsschritte ohne Blockierung der FPU in Pipelines angeordnet und mit anderen Anweisungen verschachtelt werden können (für einen sehr guten Überblick über dieses Konzept, wenn auch auf älteren Architekturen, siehe Rolf Strebels Doktorarbeit ).

Bei Interaktionspotentialen kann die sqrtOperation vollständig vermieden werden, indem ein Polynominterpolant der Potentialfunktion verwendet wird. Meine ( mdcorein diesem Bereich implementierte ) Arbeit zeigt jedoch, dass der sqrtBefehl zumindest auf x86-Architekturen schnell genug ist.

Aktualisieren

Da diese Antwort anscheinend einiges an Aufmerksamkeit erhält, möchte ich auch auf den zweiten Teil Ihrer Frage eingehen, dh, lohnt es sich wirklich, zu versuchen, grundlegende Vorgänge zu verbessern / zu beseitigen, wie z sqrt.

Im Zusammenhang mit Molekulardynamik-Simulationen oder partikelbasierten Simulationen mit Cutoff-begrenzten Wechselwirkungen können bessere Algorithmen für die Nachbarbestimmung viel bewirken. Wenn Sie mit Zellenlisten , oder etwas ähnliches, Nachbarn zu finden oder eine erstellen Verlet Liste finden Sie eine große Anzahl von falschen paarweise Abstände werden zu berechnen. Im naiven Fall befinden sich nur 16% der untersuchten Partikelpaare tatsächlich im Grenzabstand voneinander. Obwohl für solche Paare keine Wechselwirkung berechnet wird, ist der Zugriff auf die Partikeldaten und die Berechnung des störenden paarweisen Abstands mit hohen Kosten verbunden.

Meine eigenen Arbeiten in diesem Bereich ( hier , hier und hier ) sowie die anderer (z. B. hier ) zeigen, wie diese falschen Berechnungen vermieden werden können. Diese Nachbarsuchalgorithmen übertreffen sogar Verlet-Listen, wie hier beschrieben .

Der Punkt, den ich hervorheben möchte, ist, dass, obwohl es einige Verbesserungen geben kann, wenn man die zugrunde liegende Hardwarearchitektur besser kennt / ausnutzt, es auch potenziell größere Gewinne gibt, wenn man die Algorithmen der höheren Ebene neu überdenkt.

Pedro
quelle
6
Bei SSE rsqrtpsund AVX handelt vrsqrtpses sich ebenfalls um Schätzungen. Sie erhalten die ersten 11 bis 12 Bit korrekt und Sie sollten mit ein oder zwei Newton-Iterationen verfeinern, wenn Sie mehr Genauigkeit wünschen. Dies sind 5/1 und 7/1 (Latenz / inversen Durchsatz) Anweisungen auf Sandy Bridge (siehe Intel docs oder Agner Fog Instruktionstabellen , die der Multiplikation vergleichbar ist. Im Gegensatz dazu die volle Genauigkeit (v)sqrtps(double precision (v)sqrtpd) nehmen 10-43 / 10-43 (Einzelheiten finden Sie in den Anweisungstabellen.)
Jed Brown
@JedBrown: Danke für den Hinweis! Ich hatte vergessen, dass SSE und seine Erweiterungen dies auch bieten.
Pedro
16

Die Quadratwurzel ist auf den meisten Prozessoren in Hardware implementiert, das heißt, es gibt spezifische Montageanweisungen, und die Leistung sollte in den meisten Sprachen vergleichbar sein, da es sehr schwierig ist, die Implementierung zu verbessern. Sie werden den FSQRT-Befehl wahrscheinlich nie schlagen können, da er von einem intelligenten Hardware-Designer entworfen wurde.

Wie es in Hardware implementiert ist, kann variieren, aber es ist wahrscheinlich eine Art Festkomma-Iteration, zum Beispiel die Newton-Raphson-Methode, die eine bestimmte Anzahl von Iterationen durchführt, bis die Anzahl der erforderlichen Ziffern berechnet ist. Iterative Methoden in der Hardware sind im Allgemeinen viel langsamer als andere Operationen, da mehrere Zyklen abgeschlossen sein müssen, bevor das Ergebnis fertig ist.

Es gibt auch einige Streaming-SIMD-Befehle , die in den XMM-Registern für schnelle Vektorberechnungen verwendet werden können . Diese Register sind ziemlich klein, aber wenn Sie eine bekannte Anzahl von Koordinaten haben (z. B. ein dreidimensionales kartesisches Koordinatensystem), können sie ziemlich viel schneller sein.

Wenn Ihre Sprache niedrig genug ist, können Sie immer mit einer niedrigeren Genauigkeit tippen oder eine niedrigere Genauigkeit für Ihre Koordinaten verwenden. Einzelne Genauigkeit ist oft mehr als gut genug und wird, wie ich mich erinnere, beim Berechnen von Quadratwurzeln schneller sein, da die Iterationen früher beendet werden können.

Es sollte einfach genug sein, verschiedene Sprachen zu vergleichen: Schreiben Sie einfach eine lange Reihe von Zufallszahlen in eine Datei, laden Sie sie in verschiedenen Sprachen und messen Sie die Quadratwurzeln.

Moyner
quelle
0

Es kann Leistungsverbesserungen geben, aber zuerst sollte man wissen, dass das Berechnen des Kehrwerts des sqrt der Flaschenhals ist (und nicht etwa das Laden der Positionen und das Speichern der Kräfte).

Das GROMACS MD-Projekt entstand aus der Idee, die Details des IEEE-Gleitkommaformats zu nutzen, um ein Newton-Raphson-Iterationsschema für die Berechnung einer akzeptablen Annäherung an den Kehrwert der Quadratwurzel zu erstellen (siehe Anhang B.3 von http: / /www.gromacs.org/Documentation/Manual ), aber es werden keine HPC-CPUs verwendet, bei denen GROMACS diese Idee noch verwendet.

Abraham
quelle