CUDA程序每次运行都会有轻微不同的结果

时间:2013-07-10 14:49:36

标签: cuda neural-network opencl

我是CUDA和OpenCL的新手。

我已将程序的内核从CUDA内核翻译成OpenCL内核。我在两个版本中使用相同的种子生成随机数。 虽然OpenCL版本在每次运行时获得完全相同的结果,但CUDA版本在每次运行时都会产生略微不同的结果。 我正在编译没有-use_fast_math的CUDA版本。 我的设备是1.1功能。 关于可能是什么原因的任何想法?

提前致谢

2 个答案:

答案 0 :(得分:1)

计算能力1.1的设备不支持double操作。因此,如果您使用的是double,则会降级为float。这可能会影响您的结果,尽管计算能力1.1设备也不能支持OpenCL中的double,AFAIK。

  

我的问题实际上是有任何可能影响CUDA结果准确性的CUDA编译选项。

是的,有多种选项会影响CUDA的使用of floating point math

我不知道为什么这会导致从一次运行到另一次运行的变化。您的代码中可能存在错误。

答案 1 :(得分:1)

我发现了问题。在原始代码中,某些值是异步更新的,尚未完全更新。谢谢大家的帮助。抱歉,这是一个麻烦。