1

我是 CUDA 和 OpenCL 的新手。

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

提前致谢

4

2 回答 2

1

计算能力 1.1 的设备不支持double操作。因此,如果您正在使用double它们,它们将被降级为float. 这可能会影响您的结果,尽管计算能力 1.1 设备double在 OpenCL 中也无法支持,AFAIK。

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

是的,有多种选项会影响 CUDA对浮点数学的使用

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

于 2013-07-10T15:20:33.477 回答
1

我发现了问题。在原始代码中,一些值是异步更新的,还没有完全更新。谢谢大家的帮助。并为给您带来的麻烦感到抱歉。

于 2013-07-11T15:16:32.137 回答