请问cuda 双精度计算怎么配置?

用的是是Linux 64位,CUDA4.2环境

在编译的时候,arch=compute_20,code='compute_20,sm_20',然后代码中就可以用double类型计算了,当然20也可以换成更高的30

楼主和tianyuan08你们好,看到你们的帖子了。

编译的时候,需要compute_13,sm_13以上(包含1.3的)更高的能力。

举个例子给您:
楼主如果您的卡是fermi, 建议使用:
虚拟架构:compute_13(或compute_20)
真实架构:sm_20(如果您的卡是2.0), sm_21(如果您的卡是2.1)

欢迎楼主其他问题继续发帖,欢迎tianyuan08继续回帖。

嗯,不过在compute_13和sm_13的GT200核心上,double算出来时错的…

GT200 double算出来是错的,这似乎不太可能。

[

我在1060上算过,和fermi结果是不同的,而且我问过王鹏博士了,200确实存在这个问题。

结果不对,不代表"GT200核心算double是错误的”。

那代表什么?

只代表结果不一样。

那只能说明两者精度不同,fermi作为新的硬件,精度好是应该的。具体不同硬件有什么差异,手册上我记得有。如果算法不是非常依赖于些微的精度差异,或者没有积累误差的话,结果还是可供使用的。

比如说我们经常用3.14来近似pi,也经常用3.1415926来近似pi,能说前者就是错的,后者就是对的么?

恩,说法有误,不过1060的误差太大,导致结果偏差很厉害。

没搞懂这段命令应该加在那里,我放在编译命令nvcc后面报错
C:\SuWork\Work\cuda>nvcc arch=compute_20,code='compute_20,sm_20' nvSpline.cu
nvcc fatal : Don’t know what to do with ‘arch=compute_20,code=/‘compute_20,sm_
20/’’

你少了横杠于arch前(-arch)。楼主。

果然是。。。 我又小白了。
但是我加了之后又出现新问题了,提示说我的显卡没有不支持2.0的构架。我有两块显卡,一块是q400一块是c2075 ,我设置的是q400为wddm模式,c2075为tcc模式(其实不是我设的,它自动就这样了。。。),为什么还会出现这种情况?

额,完整版:
nvcc x.cu -gencode arch=compute_20,code='compute_20,sm_20'

我用版主你给的这个命令,报错说sm_20 is not in ‘keyword=value’ format,然后我改成
-gencode arch=compute_20,code=sm_20成功了,不知道这样行不行

不太明白q400,你看一下c2075的index是多少(用deviceQuery),然后使用cudaSetDevice启用它,C2075支持2.0的计算能力

我c2075的index是0的,应该是默认用它吧,我按我后来说的命令方式编译成功了,现在在调程序bug。。。发现程序能够跑,不报错,但是有个kernel函数调用了,却没有执行。。。不知道是怎么回事

在kernel调用后加printf(“%s\n”, cudaGetErrorString(cudaDeviceSynchronize()));看输出什么

输出no error,应该没问题吧。

程序自己运行不会报错,虽然结果还不太对。但是我用visual profiler跑的时候就会弹出附件里面的窗口,不知道是怎么回事。

这是因为你nvvp在多次启动你的exe的时候,发现你调用的kernel的形状,次序,配置不同。而无法将多次运行搜集到的数据合并而导致的。

解决方案:使用nsight里的小型profiler. 虽然数据少点,但可用。

另外,我建议你先修改正确程序,而不是先做profiling.
程序先对做,然后再考虑优化。当然,这个意见你可以无视。只是建议。