GLSL - Действительно ли скалярное произведение стоит только один цикл?

Я сталкивался с несколькими ситуациями, когда утверждалось, что выполнение скалярного произведения в GLSL в конечном итоге будет выполняться за один цикл. Например:

Процессоры вершин и фрагментов работают с четырьмя векторами, выполняя четырехкомпонентные инструкции, такие как сложение, умножение, умножение с накоплением или скалярное произведение за один цикл.

http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter35.html

Я также где-то видел в комментариях заявление о том, что

    dot(value, vec4(.25))

будет более эффективным способом усреднения четырех значений по сравнению с to:

    (x + y + z + w) / 4.0

Опять же, утверждалось, что dot(vec4, vec4) будет выполняться за один цикл.

Я вижу, что ARB говорит, что скалярное произведение (DP3 и DP4) и перекрестное произведение (XPD) являются отдельными инструкциями, но означает ли это, что они так же затратны в вычислительном отношении, как и выполнение сложения vec4? в основном какая-то аппаратная реализация, в духе умножения-накопления на стероидах, в игре здесь? Я вижу, как что-то подобное полезно в компьютерной графике, но выполнение за один цикл того, что может состоять из нескольких инструкций, звучит как лот

9
задан Nicol Bolas 25 May 2012 в 23:26
поделиться