Как реализовать эффективное параллельное сравнение SIMD и выбрать в Cg? - PullRequest
1 голос
/ 12 сентября 2011

Как вы делаете параллельный выбор эффективно?

Например, с учетом этого скалярного кода, есть ли способ написать его, чтобы компилятор Cg заставлял код выполняться параллельно / SIMD (и, возможно, используявыбор без веток).

            Out.x = ( A.x <= threshold) ? B.x : C.x ;
            Out.y = ( A.y <= threshold) ? B.y : C.y ;
            Out.z = ( A.z <= threshold) ? B.z : C.z ;
            Out.w = ( A.w <= threshold) ? B.w : C.w ;

1 Ответ

0 голосов
/ 13 сентября 2011

По-видимому, я пропустил эти строки в руководстве по Cg:

The ?:, ||, &&, &, and comparison operators can
be used with bool vectors to perform multiple
conditional operations simultaneously.

Итак, я попробовал это, и похоже, что это работает:

Out.xyzw = ( A.xyzw <= threshold) ? B.xyzw : C.xyzw ;

Я думаю, я не ожидалсамое простое решение - просто работать!

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

...