Piktogramm
Admiral
- Registriert
- Okt. 2008
- Beiträge
- 9.297
@lanse
Ich schrieb ja extra, dass breite, superskalare Designs von ähnlichen Bedingungen profitieren, die auch für SIMD dankbare Ziele sind. Die "Spezialfälle" betreffen also tendenziell beide Ansätze und sind gar nicht so selten. Genauso wie beide Ansätze bei Code der häufig verzweigt tendenziell nicht funktionieren. Lustigerweise sind Probleme, die sich derart abbilden lassen auch recht gut geeignet um sie aufzuteilen und auf verschiedene CPU Cores zu verteilen bzw. auf GPUs[2].
Das AVX relativ selten genutzt wird, es macht Arbeit! Zum einen braucht es Leute die Code schreiben der sich automatisch vektorisieren[1] lässt oder aber direkt Assembler. Zudem muss man verschiedene Codepfade vorsehen, da die CPUs in freier Wildbahn ja zig Abstufungen bei den Featuresets hat. Der Aufwand lohnt oft nicht. Da muss ich zugeben haben superskalare Designs im Zweifelsfall einen Vorteil, da braucht es nur einen Codepfad und die CPU muss sich über große Reorderbuffer und eskalierendes Registerrenaming die Optimierungen vornehmen.[3]
Nicht zuletzt, reale Software hat oft eine erschreckend schlechte Qualität. Beim Wechsel vom OpenSource liebenden Studenten in die kommerzielle Welt hat es mir die Schuhe ausgezogen was für Müll für viel Geld verkauft wird. Da können Compiler und dicke Reorderfenster auch nichts mehr ausrichten..
Linus' Rants sollte man mit Vorsicht genießen![Lächeln :) :)](/forum/styles/smilies/smile.gif)
Im Linux Kernel selbst ist Kompression, Verschlüsselung, Prüfsummen- und Paritätsberechnung mit von Hand geklöppelten SIMD Befehlen enthalten. Es wären so Einige wahrscheinlich leicht "verschnupft" wenn das fehlen würde. Wobei er auch Recht hat. Intels Bugs waren nervig und es wird allerhand Schindluder getrieben.
[1] Das wäre dann auch Code, der sich gut aus viele Pipelines verteilen lässt und/oder aber genauso von ARM Neon/SVE profitieren kann.
[2] Wobei gerade GPUs so ein Ding sind. OpenCL ist ja nach Plattform und Implementierung ein Abenteuer, CUDA von Nvidia abhängig. Zudem kostet das Offloading zur GPU Zeit und in vielen Fällen hätte es die CPU in der Zeit auch selbst geschafft :/
[3] Jeder der mal kollisionsfreie Abhängigkeitsbäume implementieren musste weiß, dass das nicht ganz simpel ist. Da wird Apple auch allerhand Transistoren benötigen damit das so gut klappt wie mit dem M1.
Ich schrieb ja extra, dass breite, superskalare Designs von ähnlichen Bedingungen profitieren, die auch für SIMD dankbare Ziele sind. Die "Spezialfälle" betreffen also tendenziell beide Ansätze und sind gar nicht so selten. Genauso wie beide Ansätze bei Code der häufig verzweigt tendenziell nicht funktionieren. Lustigerweise sind Probleme, die sich derart abbilden lassen auch recht gut geeignet um sie aufzuteilen und auf verschiedene CPU Cores zu verteilen bzw. auf GPUs[2].
Das AVX relativ selten genutzt wird, es macht Arbeit! Zum einen braucht es Leute die Code schreiben der sich automatisch vektorisieren[1] lässt oder aber direkt Assembler. Zudem muss man verschiedene Codepfade vorsehen, da die CPUs in freier Wildbahn ja zig Abstufungen bei den Featuresets hat. Der Aufwand lohnt oft nicht. Da muss ich zugeben haben superskalare Designs im Zweifelsfall einen Vorteil, da braucht es nur einen Codepfad und die CPU muss sich über große Reorderbuffer und eskalierendes Registerrenaming die Optimierungen vornehmen.[3]
Nicht zuletzt, reale Software hat oft eine erschreckend schlechte Qualität. Beim Wechsel vom OpenSource liebenden Studenten in die kommerzielle Welt hat es mir die Schuhe ausgezogen was für Müll für viel Geld verkauft wird. Da können Compiler und dicke Reorderfenster auch nichts mehr ausrichten..
Linus' Rants sollte man mit Vorsicht genießen
![Lächeln :) :)](/forum/styles/smilies/smile.gif)
Im Linux Kernel selbst ist Kompression, Verschlüsselung, Prüfsummen- und Paritätsberechnung mit von Hand geklöppelten SIMD Befehlen enthalten. Es wären so Einige wahrscheinlich leicht "verschnupft" wenn das fehlen würde. Wobei er auch Recht hat. Intels Bugs waren nervig und es wird allerhand Schindluder getrieben.
[1] Das wäre dann auch Code, der sich gut aus viele Pipelines verteilen lässt und/oder aber genauso von ARM Neon/SVE profitieren kann.
[2] Wobei gerade GPUs so ein Ding sind. OpenCL ist ja nach Plattform und Implementierung ein Abenteuer, CUDA von Nvidia abhängig. Zudem kostet das Offloading zur GPU Zeit und in vielen Fällen hätte es die CPU in der Zeit auch selbst geschafft :/
[3] Jeder der mal kollisionsfreie Abhängigkeitsbäume implementieren musste weiß, dass das nicht ganz simpel ist. Da wird Apple auch allerhand Transistoren benötigen damit das so gut klappt wie mit dem M1.