Aus Sicht des Supercomputers ist es besser, nicht an die prozentuale CPU- / GPU-Auslastung zu denken, sondern zu bestimmen, wie viele Vorgänge Ihr Problem benötigt, und diese dann mit der Spitzenleistung des Systems zu vergleichen.
Wenn Sie eine 100% ige CPU-Auslastung erzielen, bedeutet dies nicht unbedingt, dass Sie die gesamte Leistung aus dem System herausholen. CPUs können oft mehrere verschiedene Dinge gleichzeitig erledigen, z. B. eine Unterteilung und eine Hinzufügung. Wenn Sie die Aufteilung frühzeitig beginnen können, kann sie sich möglicherweise mit dem Zusatz überschneiden. Ihre Desktop-CPU hat höchstwahrscheinlich eine Einheit für nicht ordnungsgemäße Ausführung , die die Anweisungen neu anordnet, um von solchen Überschneidungen zu profitieren. Oder wenn Sie folgendes Programm haben:
if (expr1)
expr2;
else
expr3;
Eine umordnende CPU wird versuchen, die drei Ausdrücke gleichzeitig zu berechnen und dann das Ergebnis eines von ihnen wegzuwerfen. Dies macht es insgesamt schneller. Wenn Sie einen Blocker in Ihrem Programm haben und die Reihenfolge nicht ändern können, verwenden Sie weniger Spuren in der CPU, aber es werden wahrscheinlich immer noch 100% angezeigt.
Dann haben Sie SIMD-Funktionen in den CPUs, die Vektoroperationen sind. Es ist wie GPGPU-light in dem Sinne, dass Sie normalerweise nur vier oder acht Operationen gleichzeitig haben, GPUs wie 32 oder 64. Dennoch müssen Sie das verwenden, um die FLOPS auszulösen.
Sachen wie falsches Teilen können so zu hohen Synchronisationskosten führen, die sich normalerweise als Kernellast unter Linux zeigen. Die CPU ist voll ausgelastet, aber Sie haben nicht viel nützlichen Durchsatz.
Ich habe auf einer IBM Blue Gene / Q-Maschine etwas programmiert. Es hat viele Hierarchieebenen ( Schema von veraltetem Blue Gene / L ) und ist daher schwer effizient zu programmieren. Sie müssen die gesamte Hierarchie bis hinunter zu SIMD und SMT (Intel nennt dies HyperThreading) verwenden, um die Leistung zu optimieren.
Und dann schränkt Sie das Netzwerk oft ein. Daher stellt sich heraus, dass es in der (Wanduhr-) Zeit schneller ist, Dinge auf mehreren CPUs gleichzeitig zu berechnen, anstatt sie über das Netzwerk zu kommunizieren. Dadurch werden die CPUs stärker belastet und das Programm schneller ausgeführt. Der tatsächliche Programmdurchsatz ist jedoch nicht so gut, wie es aus den Rohdaten hervorgeht.
Wenn Sie dem Mix GPUs hinzufügen, wird es noch schwieriger, das Ganze zu orchestrieren, um Leistung zu erzielen. Das wird eines der Dinge sein, die ich in ein paar Monaten in meiner Lattice QCD Master Thesis anfangen werde.
NO-OP
s ausführen , was zu einer Auslastung von 100% führt.