我在考虑将一些数学运算卸载到GPU上。由于我已经在使用D3D11,我会使用计算着色器来完成工作。但问题是我需要相同输入的结果相同,无论用户可能拥有什么GPU。 (只要求它支持计算着色器4.0)。
GPU上的浮点数学确定性是什么?
如果没有,GPU是否支持整数数学?
答案 0 :(得分:1)
我没有使用过DirectCompute,只有OpenCL。
GPU肯定支持整数数学,包括32位和64位整数。有几个问题已经讨论过了:
基本上,在现代GPU上,32位浮点和整数运算在性能上是等效的。
至于确定性结果,它取决于您的代码。例如,如果您依赖多个线程在同一内存上执行原子操作,然后从其他线程读取该内存并根据该值执行操作,则每次结果可能不完全相同。
从个人经验来看,我需要生成随机数,但也需要一致的结果。所以基本上我有一个较大的种子阵列,每个线程一个,每个都是完全独立的。其他依赖原子操作和障碍的随机数发生器也不会。
具有确定性结果的另一半在给定不同硬件的情况下具有相同的结果。使用整数运算,您应该相当安全。通过OpenCL中的浮点运算,避免快速宽松的数学选项和函数的原生变体将增加在不同硬件上获得相同结果的机会。