我是 CUDA 和 OpenCL 的新手。
我已经将程序的内核从 CUDA 内核翻译成 OpenCL 内核。我在两个版本中都使用相同的种子来生成随机数。虽然 OpenCL 版本每次运行都得到完全相同的结果,但 CUDA 版本每次运行时给出的结果略有不同。我正在编译没有-use_fast_math
. 我的设备是 1.1 功能。关于可能是什么原因的任何想法?
提前致谢
我是 CUDA 和 OpenCL 的新手。
我已经将程序的内核从 CUDA 内核翻译成 OpenCL 内核。我在两个版本中都使用相同的种子来生成随机数。虽然 OpenCL 版本每次运行都得到完全相同的结果,但 CUDA 版本每次运行时给出的结果略有不同。我正在编译没有-use_fast_math
. 我的设备是 1.1 功能。关于可能是什么原因的任何想法?
提前致谢
计算能力 1.1 的设备不支持double
操作。因此,如果您正在使用double
它们,它们将被降级为float
. 这可能会影响您的结果,尽管计算能力 1.1 设备double
在 OpenCL 中也无法支持,AFAIK。
我的问题实际上是是否有任何可能影响 CUDA 结果准确性的 CUDA 编译选项。
是的,有多种选项会影响 CUDA对浮点数学的使用
但是,我不知道为什么这会导致从一次运行到下一次运行的变化。您的代码中可能存在错误。
我发现了问题。在原始代码中,一些值是异步更新的,还没有完全更新。谢谢大家的帮助。并为给您带来的麻烦感到抱歉。