我是CUDA和OpenCL的新手。
我已将程序的内核从CUDA内核翻译成OpenCL内核。我在两个版本中使用相同的种子生成随机数。
虽然OpenCL版本在每次运行时获得完全相同的结果,但CUDA版本在每次运行时都会产生略微不同的结果。
我正在编译没有-use_fast_math
的CUDA版本。
我的设备是1.1功能。
关于可能是什么原因的任何想法?
提前致谢
答案 0 :(得分:1)
计算能力1.1的设备不支持double
操作。因此,如果您使用的是double
,则会降级为float
。这可能会影响您的结果,尽管计算能力1.1设备也不能支持OpenCL中的double
,AFAIK。
我的问题实际上是有任何可能影响CUDA结果准确性的CUDA编译选项。
是的,有多种选项会影响CUDA的使用of floating point math
我不知道为什么这会导致从一次运行到另一次运行的变化。您的代码中可能存在错误。
答案 1 :(得分:1)
我发现了问题。在原始代码中,某些值是异步更新的,尚未完全更新。谢谢大家的帮助。抱歉,这是一个麻烦。