Выполнение целочисленных и побитовых операций на GPU - PullRequest
16 голосов
/ 31 декабря 2011

Хотя графические процессоры предназначены для использования с типами данных с плавающей запятой, мне было бы интересно узнать, насколько быстро графический процессор может обрабатывать побитовые операции. Это самые быстрые на ЦП, но GPU эмулирует побитовые операции или они полностью рассчитаны на оборудовании? Я планирую использовать их в шейдерных программах, написанных на GLSL. Также я бы предположил, что если побитовые операции имеют полное предварительное выполнение, целочисленные типы данных также должны иметься, но мне нужно подтверждение на это.

Точнее, целевыми версиями являются OpenGL 3.2 и GLSL 1.5. Аппаратным обеспечением, которое должно работать на этом, является любая видеокарта Radeon HD и GeForce серии 8 и новее. Если в более новых версиях OpenGL и GLSL произошли серьезные изменения, связанные со скоростью обработки побитовых операций / целых чисел, я был бы рад, если вы Я укажу на них.

1 Ответ

9 голосов
/ 03 января 2012

На этот вопрос дан частичный ответ Целочисленные вычисления на графическом процессоре

Короче говоря, современные графические процессоры имеют эквивалентную производительность INT и FP для 32-битных данных.Таким образом, ваши логические операции будут выполняться с той же скоростью.

С точки зрения программирования вы потеряете производительность, если будете работать с целочисленными данными SCALAR.Графические процессоры любят работать с ПАРАЛЛЕЛЬНЫМИ и ПАКЕТНЫМИ операциями.

for(int i=0; i<LEN_VEC4; i++)
    VEC4[i] = VEC4[i] * VEC4[i]; // (x,y,z,w) * (x,y,z,w)

Если вы делаете что-то вроде ...

for(int i=0; i<LEN_VEC4; i++)
    VEC4[i].w = (VEC4[i].x & 0xF0F0F0F0) | (VEC4[i].z ^ 0x0F0F0F0F) ^ VEC4[i].w;

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

...