Cuda atomicInc()不工作
我使用atomicInc()尝试了以下程序 我不明白为什么它不是递增的。有人能帮忙吗?参考,Cuda atomicInc()不工作,cuda,gpu-atomics,Cuda,Gpu Atomics,我使用atomicInc()尝试了以下程序 我不明白为什么它不是递增的。有人能帮忙吗?参考,atomicInc这样做: 有关下列事项: atomicInc ((unsigned int *)&count[0],n); 计算: ((count[0] >= n) ? 0 : (count[0]+1)) 并将结果存储回count[0] (如果您不确定?操作员的工作,请查看) 由于您传递了n=1,并且count[0]从1开始,因此atomicInc从未实际将变量count[0]增加到1
atomicInc
这样做:
有关下列事项:
atomicInc ((unsigned int *)&count[0],n);
计算:
((count[0] >= n) ? 0 : (count[0]+1))
并将结果存储回count[0]
(如果您不确定?
操作员的工作,请查看)
由于您传递了n
=1,并且count[0]
从1开始,因此atomicInc
从未实际将变量count[0]
增加到1之外
如果希望看到其增量超过1,请为n
传递一个较大的值
变量n
实际上充当递增过程的“滚动值”。当要递增的变量实际达到n
的值时,下一个atomicInc
将其重置为零
虽然您还没有问过这个问题,但您可能会问,“如果我达到了翻滚值,为什么我从来没有看到零的值?”
要回答这个问题,您必须记住所有4个线程都是在lockstep中执行的。在执行后续的print语句之前,所有4个语句都执行atomicInc
指令
因此,我们有一个变量count[0]
,它从1开始
ker<<<1,5>>>(hitCount_d);
您将得到您可能期望的结果。参考,atomicInc
可以:
有关下列事项:
atomicInc ((unsigned int *)&count[0],n);
计算:
((count[0] >= n) ? 0 : (count[0]+1))
并将结果存储回count[0]
(如果您不确定?
操作员的工作,请查看)
由于您传递了n
=1,并且count[0]
从1开始,因此atomicInc
从未实际将变量count[0]
增加到1之外
如果希望看到其增量超过1,请为n
传递一个较大的值
变量n
实际上充当递增过程的“滚动值”。当要递增的变量实际达到n
的值时,下一个atomicInc
将其重置为零
虽然您还没有问过这个问题,但您可能会问,“如果我达到了翻滚值,为什么我从来没有看到零的值?”
要回答这个问题,您必须记住所有4个线程都是在lockstep中执行的。在执行后续的print语句之前,所有4个语句都执行atomicInc
指令
因此,我们有一个变量count[0]
,它从1开始
ker<<<1,5>>>(hitCount_d);
您将得到您可能期望的结果。看起来您确实想使用atomicAdd,而不是atomicInc.@talonmies Thnak。我使用了atomicAdd(),然后它就开始工作了。但我怀疑在哪种情况下我们可以使用atomicInc()?看起来你真的想使用atomicAdd,而不是atomicInc。@talonmies Thnak。我使用了atomicAdd(),然后它就开始工作了。但我怀疑在哪种情况下我们可以使用atomicInc()。?