atomicAdd函数的一个问题

atomicAdd(float*,float)形式可以支持吗?难道atomicAdd函数只能支持这种atomicAdd(int*,int)?

浮点数的支持需要计算能力2.0以上并在编译时指定参数为2.0及以上设备!

LZ您好,如2#所言,浮点版本的atomicAdd()需要计算能力至少为2.x的硬件。
具体细节,请参阅 CUDA C programming guide 的B.11章节。

需要指出的是,如果 您必须在更早的硬件上实现浮点版本的atomicAdd(),那么可以手工实现一个非原生的版本。实现方法依然请您参考上面提到的章节,以及本版之前的讨论帖。

祝您编码愉快~

那编译时的指令也是类似加上nvcc -arch=sm_20吗?

yes~~

LZ您好,简单地说可以这样。以及,如果您知道您的显卡具体的计算能力,也可以具体设置为sm_20,sm_21,sm_30,sm_35。

如果您使用VS且是CUDA/nsight模板建立的runtime 项目,可以右键单击项目名称——属性——CUDA Runtime API——GPU——GPU Architecture这里选择,将sm_1.x的全部清除掉,按需保留sm_2.0及以上的。

楼主依然可以在老卡上实现任何原子操作的。

例如你说的atomicAdd的int版本就可以用来实现float的,只是不能直接支持。

手册还有atomicCAS实现任何操作的具体例子,可以参考。

区别在于不是“硬件”实现的,效率上可能有影响。

版主你说的 CUDA C programming guide这个文件在哪可以下载到啊?给个网站呗!在此谢过!

在您的cuda toolkit的安装目录下的doc文件夹里有,

此外,您可以点击此处:(感谢must版主提供链接)
http://cudazone.nvidia.cn/forum/forum.php?mod=viewthread&tid=5597&extra=page%3D1

谢版主的回答,我找到了安装目录

没有在其中找到班主所说的B.11章节呢?

LZ您好,B.11是附录章节,请往后翻翻看,或者使用搜索工具。

祝您编码顺利~

非常感谢