Вопрос не может быть отвечен каким-либо окончательным образом в целом. Как долго любая операция в аппаратных средствах не только зависит от оборудования, но также и от с кодом. То есть окружающий код может полностью замаскировать производительность, которую требуется выполнить, или это может занять больше времени.
В общем, вы не должны предполагать, что точечный продукт является одноцилиндровым.
Однако, есть некоторые аспекты, которые, конечно, можно ответить:
Я также видел требование в комментариях где-то, что:
бы более эффективный способ для средних четырех значений, по сравнению чтобы:
Я бы ожидать, что это будет своего рода правда, до тех пор, как x
, y
, z
и w
фактически являются различными значениями с плавающей точкой а не члены того же vec4
(то есть они не value.x
, value.y
и т. д.). Если они являются элементами одного и того же вектора, я бы сказал, что любой достойный оптимизирующий компилятор должен скомпилировать оба из них с одним и тем же набором инструкций. Хороший peephole optimizer должен ловить подобные узоры.
Я говорю, что это «доброта», потому что это зависит от аппаратного обеспечения. Точечная версия продукта должна по крайней мере не быть медленнее. И снова, если они являются элементами одного и того же вектора, оптимизатор должен его обработать.
отдельные инструкции, но означает ли это, что это так же дорого, как и для vec4?
Вы не должны считать, что ARB сборка имеет любое отношения к реальному коду инструкции аппаратной машины.
Есть ли в основном какая-то аппаратная реализация по линиям многократного накопления на стероидах в игре здесь?
Если вы хотите поговорить об оборудовании, это очень специфично для оборудования. Когда-то было специализированное аппаратное обеспечение точечного продукта. Это было во времена так называемых «DOT3 bumpmapping» и ранней DX8-эры шейдеров.
Однако, чтобы ускорить общие операции, им пришлось принять такие вещи. Итак, для большинства современных аппаратных средств (ака: что-то Radeon HD-класса или NVIDIA 8xxx или лучше. Так называемое аппаратное обеспечение DX10 или 11), точечные продукты делают в значительной степени то, что они говорят. Каждое умножение/добавление занимает цикл.
Однако это аппаратное обеспечение также допускает много параллелизма, поэтому у вас может быть 4 отдельных vec4
продуктов для точек, которые происходят одновременно . Каждый из них займет 4 цикла. Но, пока результаты этих операций не используются в других, все они могут выполняться параллельно. И, следовательно, четыре из них будут принимать 4 цикла.
Так что, опять же, это очень сложно. И аппаратно-зависимый.
Ваш лучший выбор - начать с чего-то, что разумно. Затем узнайте о аппаратном обеспечении, которое вы пытаетесь координировать, и работайте оттуда.
Хорошо, спасибо. «Вы не должны предполагать, что сборка ARB имеет какое-либо отношение к фактическому коду команды аппаратного компьютера». это в основном сжатый ответ, на который я надеялся. Просто кажется, что ARB - это своего рода ниша и трудно найти много материалов, доступных для Google. Это было одним из тех вещей типа «племенного знания», которые я, казалось, не мог проверить, и тот факт, что это правда в течение определенного периода времени, имеет смысл. Классная вещь. – ultramiraculous