Was ist die zugrunde liegende Struktur der Leistung von wissenschaftlichem Code?


11

Betrachten Sie zwei Computer mit unterschiedlichen Hardware- und Softwarekonfigurationen. Wenn auf jeder Plattform genau derselbe serielle Navier-Stokes-Code ausgeführt wird, dauert es x- und y-Zeit, um eine Iteration für Computer 1 bzw. 2 auszuführen. In diesem Fall ist die Iterationszeitdifferenz zwischen Computer 1 und Computer 2.Δ=xy

Was könnte die Größe von ? Ein offensichtlicher Kandidat ist die CPU. Meine Hauptfrage ist, ob es andere Faktoren gibt, die Δ in derselben Reihenfolge wie der Hardwareunterschied zwischen CPUs beeinflussen könnten .ΔΔ


4
Natürlich ist Ihr nur eine einzelne Probe. Sie sollten auch untersuchen, wie Δ von der Problemgröße und -struktur abhängt. Zweitens würde ich vorschlagen, den Code zu profilieren, x und y in die Summe verschiedener Beiträge aufzuteilen und die Leistung verschiedener Teile des Codes in Bezug auf die hw- und sw-Konfigurationen zu analysieren. ΔΔxy
Stefano M

4
CACHE LINE MISSES . Das ist das erste, was zu berücksichtigen ist. Speicher ist der Engpassfaktor für viele Algorithmen.
Deer Hunter

Antworten:


13

Diese Liste ist bei weitem nicht vollständig, aber hoffentlich gibt ihre Größe einen Hinweis auf das Ausmaß möglicher Faktoren. Ich gehe davon aus, dass Sie den Code aus dem Quellcode auf der Plattform Ihrer Wahl kompilieren.

Software

  • Standardbibliotheksleistung
  • Lin. Alg. Bibliotheksleistung (wenn die Software mit externen Bibliotheken verknüpft ist)
  • Compiler-Auswahl
  • Compiler-Optimierung
  • Compiler-Flags
  • Hintergrundprozesse (Kann erheblich variieren, wenn die Betriebssysteme unterschiedlich sind)

Hardware

Zentralprozessor

  • Taktfrequenz
  • Architektur (dieselbe Anweisung kann auf verschiedenen Architekturen unterschiedlich viele Zyklen dauern)
  • Cache-Größen
  • Cache-Latenz
  • SIMD-Fähigkeit (Single Instruction, Multiple Data)

Erinnerung

  • Anzahl der Kanäle
  • Geschwindigkeit

Festplatte

  • Lese- / Schreibgeschwindigkeit (meistens nur wichtig für das Schreiben von Ergebnissen, dies hängt also davon ab, wie oft Sie die Ausgabe für einen NS-Solver in eine Datei schreiben, kann aber für andere Programme wichtig sein, die beispielsweise Bildverarbeitung ausführen).

Dies alles ignoriert die kleinen Tricks und Funktionen, die verschiedene Hersteller einschließen, um ihren Chips einen Vorsprung auf dem Markt zu verschaffen. Das große Problem ist jedoch, dass viele spärliche lineare Algebra-Bibliotheken speichergebunden sind. Bei einer Multiplikation mit einer spärlichen Matrix werden viele Daten ohne viele tatsächliche Flops verschoben.


Ich würde der CPU sowohl die Anzahl der Kerne als auch die SIMD-Funktionen hinzufügen.
Pedro

@Pedro Ich habe Kerne weggelassen, da die Frage "Serial Solver" lautete, aber ich werde SIMD hinzufügen. Vielen Dank.
Godric Seer

1
@GodricSeer Ich habe auf einem Computer kompiliert und es dann ausgeführt. Dann habe ich es mit derselben kompilierten ausführbaren Datei auf dem zweiten Computer ausgeführt. Aus Ihrer Erklärung geht hervor, dass es besser wäre, auf dem zweiten Computer von der Quelle neu zu kompilieren. Ist das der Fall?
Isopycnal Oscillation

1
@IsopycnalOscillation Beim Kompilieren auf / für einen bestimmten Computer können Sie die Option gcc / gfortran -march=nativeoder die Option icc / ifort verwenden, mit -xHOSTder Optimierungen angewendet werden, die für die zugrunde liegende Architektur spezifisch sind.
Pedro

1
Ein wichtiger Punkt hierbei ist, dass die Computerleistung keine eindimensionale Größe ist. Das relative Gleichgewicht aller oben aufgeführten Faktoren von Godric kann sehr unterschiedlich sein, selbst bei Computern mit Prozessorchips desselben Herstellers (z. B. Intel). Infolgedessen können unterschiedliche Benchmarks für zwei Prozessoren sehr unterschiedliche Leistungsverhältnisse aufweisen. In der Praxis fehlt den meisten modernen Maschinen ernsthaft die Speicherbandbreite, um die Arbeitslast wissenschaftlicher Computer zu unterstützen, und dies ist häufig der Engpass.
Brian Borchers

2

x/yxy

Zweitens schließt Ihre Frage Unterschiede in der Software ausdrücklich aus. Nach meiner Erfahrung können die Leistungsprämien für eine sorgfältige Optimierung große Faktoren sein. Vergessen Sie also nicht, Softwareprobleme zu berücksichtigen, während Sie Hardwareprobleme in Betracht ziehen. Schließlich kann die Hardware nur die Anweisungen ausführen, die Sie ihr geben, und wenn Sie weniger geben, wird sie früher beendet.

Um dies nicht zu sehr zu erweitern, gibt es für jedes Problem eine zählbare Unendlichkeit von Programmen, die es lösen. Unter diesen brauchen einige weniger Zeit als alle anderen, und das ist eine Untergrenze. Gehen Sie nicht davon aus, dass sich ein Programm an oder sogar in der Nähe dieser Untergrenze befindet, wenn es nicht sorgfältig abgestimmt wurde.

Dieser Link erklärt ausführlich die unorthodoxe Methode, die ich verwende.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.