Die Frage kann nicht definitiv beantwortet werden. Wie lange ein Vorgang in Hardware dauert, ist nicht nur hardwarespezifisch, sondern auch code-spezifisch. Das heißt, der Umgebungscode kann die Leistung einer Operation vollständig maskieren oder länger dauern.
Im Allgemeinen sollten Sie nicht davon ausgehen, dass ein Skalarprodukt ein Zyklus ist.
Allerdings gibt es bestimmte Aspekte, die sicherlich beantwortet werden können:
Ich habe auch einen Anspruch in den Kommentaren, dass irgendwo gesehen:
eine effizientere Art und Weise zu durchschnittlich vier Werte wären, verglichen zu:
würde ich erwarten, dass dies irgendwie wahr zu sein, so lange wie x
, y
, z
und w
in der Tat unterschiedliche float-Werte sind eher als Mitglieder derselben vec4
(das heißt, sie sind nicht value.x
, value.y
, usw.). Wenn sie Elemente desselben Vektors sind, würde ich sagen, dass jeder ordentliche optimierende Compiler beide zu den gleichen Anweisungen kompilieren sollte. Ein gutes peephole optimizer sollte Muster wie dieses fangen.
Ich sage, dass es "irgendwie wahr" ist, weil es von der Hardware abhängt. Die Dot-Produkt-Version sollte zumindest nicht langsamer sein. Und wiederum, wenn sie Elemente desselben Vektors sind, sollte der Optimierer damit umgehen.
einzelne Anweisungen, aber bedeutet das, dass diese genauso rechenintensiv sind wie eine vec4 add?
Sie sollten nicht davon ausgehen, dass ARB Montag hat jeden Bezug auf den Befehlscode tatsächlichen Hardware-Maschine.
Gibt es im Grunde eine Hardwareimplementierung, die sich an Multiple-Accumulate auf Steroiden anlehnt?
Wenn Sie über Hardware sprechen wollen, ist es sehr Hardware-spezifisch. Es war einmal eine spezialisierte Dot-Produkt-Hardware. Dies war in den Tagen des sogenannten "DOT3 Bumpmapping" und der frühen DX8-Ära der Shader.
Um jedoch die allgemeinen Operationen zu beschleunigen, mussten sie solche Dinge aus dem Weg räumen. Also, für die meisten modernen Hardware (alias: alles Radeon HD-Klasse oder NVIDIA 8xxx oder besser. Sogenannte DX10 oder 11 Hardware), tun Dot-Produkte so ziemlich, was sie sagen, dass sie tun. Jede Multiplikation/Addition nimmt einen Zyklus auf.
Allerdings ermöglicht diese Hardware auch eine Menge Parallelität, so dass Sie 4 separate vec4
Punkt Produkte gleichzeitig passieren können. Jeder würde 4 Zyklen dauern. Aber solange die Ergebnisse dieser Operationen in den anderen nicht verwendet werden, können sie alle parallel ausgeführt werden. Und daher würden die vier von ihnen insgesamt 4 Zyklen benötigen.
Also wieder, es ist sehr kompliziert. Und Hardware-abhängig.
Ihre beste Wette ist, mit etwas zu beginnen, das vernünftig ist. Dann lerne etwas über die Hardware, die du programmieren willst, und arbeite von dort aus.
Ok, danke. "Sie sollten nicht davon ausgehen, dass ARB-Assembly irgendeine Beziehung zu dem tatsächlichen Hardware-Maschinenbefehlscode hat." ist im Grunde die knappe Antwort, auf die ich gehofft hatte. Es scheint einfach so, als wäre ARB eine Nische und es ist schwer, eine Menge Google-fähiges Material zu finden. Dies war eines dieser "Stammeswissen" -Typen, die ich nicht zu überprüfen schien, und die Tatsache, dass es für eine gewisse Zeit wahr war, macht Sinn. Cooles Zeug. – ultramiraculous