同一个CUDA程序结果不一样

编好了一个CUDA程序,编译好后不改动程序,连续执行几次,有几次结果不一样?为什么会有这种情况?具体要用什么步骤去找问题和修改程序啊??望请赐教啊!!

有几种可能,一种是一些需要同步的地方忘记同步了,另一种是写入冲突(这时应该使用原子操作避免),然后还有就是使用了某些与高级代码看似等价的汇编指令(这就属于理解上的错误了),其它或许还有,但不清楚你的程序的具体情况不好断言

有几种可能,一种是一些需要同步的地方忘记同步了,另一种是写入冲突(这时应该使用原子操作避免),然后还有就是使用了某些与高级代码看似等价的内联汇编指令(这就属于理解上的错误了),最后还可能是想当然的认为数据在当前的不变性(这时应使用volatile关键字)。其它或许还有,但不清楚你的程序的具体情况不好断言

有几种可能,一种是一些需要同步的地方忘记同步了,另一种是写入冲突(这时应该使用原子操作避免),然后还有就是使用了某些与高级代码看似等价的内联汇编指令(这就属于理解上的错误了),最后还可能是想当然的认为数据在当前的不变性(这时应使用volatile关键字)。其它或许还有,但不清楚你的程序的具体情况不好断言

用nsight或者printf对可能有问题的地方输出数据,然后定位吧

一般来说,并行程序中这种现象叫”race condition”. 起因是程序的同步不正确。

另一个原因是如果kernel中使用了atomic函数,因为浮点运算不可结合,也会出现这个现象。这种情况可以用该并行化方案避免使用atomic函数来解决(如排序等)。