Maximale Single-Thread Performance

LordV

Cadet 3rd Year
Registriert
Juli 2010
Beiträge
37
Das gesuchte System muss mit Fortran erstellte Simulationen berechnen. Da ein Rechenschritt immer auf dem Ergebnis des vorhergehenden basiert, ist eine Parallelisierung nicht möglich.

Laut diesem Benchmark liegt der Xeon E5-2690 ziemlich deutlich an der Spitze, was Single-Thread-Gleitkommaberechnungen angeht. Wäre zu erwarten, dass der Unterschied zu z.B. dem i7-3960X wirklich über 30% beträgt? Wenn ja wäre mir das den Preisunterschied durchaus wert, da das bei über 24h dauernden Berechnungen einen relevanten Zeitvorteil ergibt.

Außerdem würde mich interessieren, ob die CAS Latency beim RAM einen über 1-2% Geschwindigkeitsvorteil hinausgehenden Einfluss hat. Ich gehe nicht davon aus, aber falls jemand Gegenteilige Erfahrungen hat wäre das natürlich gut zu wissen.


Gruß LordV
 
Selbst nicht parallelisierbare Simulationen profitieren in der Regel von mehreren Kernen, weil man üblicherweise eine Simulation mehrmals mit unterschiedlichen Parametern ausführen möchte. Dies kann dann wiederum parallel verarbeitet werden.

Um was für Simulationen handelt es sich?
 
Dass zwei Berechnungen gleichzeitig laufen kommt eher selten vor. Selbst wenn, bieten sowohl der i7 als auch der Xeon mit 6 bzw. 8 Kernen genug Reserven.

Im Moment wird mit einem i7-975 XE gearbeitet und man sieht recht deutlich, dass die CPU Auslastung bei den Rechenvorgängen bei nahezu genau 25% liegt (laut Anzeige meist ein Kern zu 75% und ein zweiter zu 25%, ich nehme mal an dadurch soll die Wärme besser verteilt werden).

Berechnet werden bspw. Modelle zur Schadstoffausbreitung im Grundwasser.
 
Je nach Betriebsystem wird die Last unterschiedlich auf die Kerne verteilt. Windows XP z.B. verteilt sie gleichmäßig auf alle logischen Kerne. Windows 7 unterscheidet zwischen echten und durch Hyperthreading simulierten Kernen und versucht, zuerst die echten voll auszulasten. Soweit ich weiß, das das nichts mit der Temperaturverteilung zu tun.

Eventuell würde es sich für dich lohnen, einen schnellen Dualcore zu kaufen und ihn mit entsprechender Kühlung zu übertakten. Wenn deine Simulationen von viel Cache profitieren, sollte der Xeon aber die bessere Wahl sein.

Schadstoffausbreitung im Wasser hört sich nach CFD an. Das kann doch bestens parallelisiert werden. Oder wie genau sieht das numerische Problem aus? Zeitintegration von Bewegungsgleichungen?
 
Wobei ich stark davon ausgehe, dass der von Dir verlinkte Benchmark von einem Multithread Benchmark hervor geht, weil der Xeon E5-2690 8Core 2,9Ghz einen I7-3960X 6Core 3,3Ghz deutlich schlägt.

Du sucht nach möglichst hoher Frequenz, also mehr Ghz. Dein i7-975 XE hat 3,33 GHz und den kann man ja übertakten. Also würde der mit 4Ghz deutlich schneller rechnen und in einem Single Core Bench wie Super Pi deutlich dem Xeon E5-2690 davon rennen.

Lese Dir einmal diesen englischen Thread durch, wo auch jemand Simulationen laufen lassen muss.
 
Zuletzt bearbeitet:
Das sind tatsächlich korrekte SPECfp2006 Werte für singlethreaded, welche sich aber nur schwer erklären lassen. Der E5-2590 hat einen Singlecore Turbo von 3.8GHz wogegen der i7-3690X sogar 3.9GHz anlegt, somit sollte sich der gewaltige unterschied sehr wahrscheinlich durch die unterschiedliche Cachegrößen von 20MB vs 15MB ergeben, was die Werte nicht sonderlich repräsentativ macht.
Falls die Dependencies in deinem Code wirklich so extrem sein sollten, wird dir der Sprung auf Sandy sowieso nicht allzuviel bringen, da du dann nicht von Vektorisierung mittels AVX profitieren kannst, was den FP Throughput von Sandy gegenüber Nehalem mal locker verdoppelt hat. Bei eventuell tagelangen Simulationen und wichtigen Ergebnissen wäre auch ein Gedanke an ECC RAM sicher nicht verkehrt. Abschließend wäre vielleicht auch Ivy eine Überlegung wert, falls dein Code einen relevanten Anteil an Divisionen aufweist, da eine der wenigen Änderungen gegenüber Sandy in einer verbesserten Division besteht.
 
Um konkreter zu werden: Es werden lineare Gleichungssystemen mit Millionen von Unbekannten (also im Prinzip sehr dünn besetzte Matrizen) iterativ gelöst. Mit unterschiedlichen Parametern mehrere Berechnungen gleichzeitig laufen zu lassen macht keinen Sinn, da das reines Glücksspiel wäre. Zum sinnvollen Anpassen müssen die Ergebnisse eines Laufs immer erst ausgewertet werden.

Wie stark das von einem großen Cache profitiert weiß ich leider nicht, wäre für die Entscheidungsfindung natürlich gut zu wissen, da dann der E5 seine Stärken ausspielen könnte. Könnte ich das vielleicht beim jetzigen i7-975 XE überprüfen, indem ich schaue, wie oft während der Berechnung auf den RAM zugegriffen wird? Wenn ja, wie kann ich das messen und sinnvoll auswerten?
 
Könnte ich das vielleicht beim jetzigen i7-975 XE überprüfen, indem ich schaue, wie oft während der Berechnung auf den RAM zugegriffen wird? Wenn ja, wie kann ich das messen und sinnvoll auswerten?
Das Stichwort dazu heißt Performance Counter. Ich empfehle dir mal den Intel Compiler sowie die Tools dazu und speziell VTune anzuschauen, welche es zur non-commercial Anwedung unter Linux kostenlos und für alles andere als 30 Tage Testversion zum Download gibt. Letztendlich solltest du durch Prefetching, Pipelining und andere Tricks soweit optimieren, dass in deinem hot Loop keine (L3-) Cache Misses mehr auftreten.
 
Um konkreter zu werden: Es werden lineare Gleichungssystemen mit Millionen von Unbekannten (also im Prinzip sehr dünn besetzte Matrizen) iterativ gelöst.
Wenn die einzelnen Berechnungen (d.h. das Resultat einer Matrixzelle) relativ einfach sind, dann wird die meiste Arbeit aus Lesen und Schreiben von Daten bestehen (bzw. aus der Wartezeit hierfür). In solchen fällen ist ein großer Cache von vorteil und möglichst schnelle Speicheranbindung.

PS: Ich weiche zwar vom eigentlichen Thema ab, aber wenn die Simulation zusätzlich viele Matrizenoperationen wie Addition oder Multiplikation enthält, könnte sich eine Grafikkarte zu deren Beschleunigung lohnen. Je größer die Martizen, desto eher.
 
Zuletzt bearbeitet:
Danke für die Info, dann spricht bisher fast alles für den E5-2690 (neben großem Cache hat er im Turbo ja immerhin 3,8 GHz, also nicht weit hinter der Konkurrenz) + CL7 1600 MHz RAM.
ECC ist nicht so entscheidend, da sehr viele ähnliche Läufe ausgeführt werden. Wenn da einer wegen möglicher Speicherfehler aus der Reihe fällt, fällt das ensprechend auf.
 
Du hast uns bisher noch nichts genaues über deinen Algorithmus erzählt, aber es klingt so, als ob du sowas wie eine Gauß-Seidel Relaxion auf einer großen Matrix ausführst. Derartiges lässt sich oft stark beschleunigen, indem man eine Art Interleaving der Iterationen verwendet und dabei unter Ausnutzung von Datenlokalität im Cache einen 2. Core die n+1. Iteration auf Zeile n-1 (oder 2) ausführen lässt, während der 1. Core die n. Iteration auf Zeile n ausführt und so weiter.
Btw, was spricht abgesehen von der 15W höheren TDP gegen den E5-2687W, der gegenüber dem E5-2690 noch 200Mhz mehr Baseclock bietet und etwas günstiger ist?
 
Zurück
Oben