GPU上的整数和按位运算的性能

Rav*_*ven 16 opengl performance gpu bit-manipulation glsl

虽然GPU应该用于浮点数据类型,但我对GPU处理按位运算的速度有多快感兴趣.这些是CPU上最快的,但是GPU模拟按位运算还是在硬件上完全计算?我打算在用GLSL编写的着色器程序中使用它们.另外我认为如果按位运算具有完全性能,整数数据类型也应该有,但我需要确认.

更准确地说,目标版本是OpenGL 3.2和GLSL 1.5.应该运行的硬件是任何Radeon HD显卡和GeForce系列8及更新..如果新版本的OpenGL和GLSL与按位操作/整数的处理速度有一些重大变化,我会很高兴,如果你'将它们指出来.

Lou*_*cci 9

这个问题部分回答 了GPU上的整数计算

简而言之,现代GPU具有与32位数据相当的INT和FP性能.因此,您的逻辑操作将以相同的速度运行.

从编程角度来看,如果处理SCALAR整数数据,则会失去性能.GPU使用PARALLEL和PACKED操作.

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

如果你做的事......

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

...对同一向量的元素执行许多不同的操作,您将遇到性能问题.

  • "GPU使用PARALLEL和PACKED操作." 最新的NVidia和AMD GPU是标量架构.因此,纯粹标量操作的性能实际上高于矢量操作. (5认同)
  • GPU 不是标量 - 它们在*所有可能执行的操作*上进行了矢量化。除了极少数不包含一般浮点运算的指令外,您不会从使用向量中获得任何额外的向量化收益;因为 GPU 上的每个“线程”实际上都是一个 SIMD 通道。 (2认同)