CUDA 5.0
用了 thrust::device_vector,结果编译的时候出警告:warning: Double is not supported. Demoting to float
是需要特殊的编译参数还是怎么的……
stackoverflow 上有个帖子,但是看不太懂啊,好像是说计算兼容性 1.3 以上的设备支持 double ?
网上写的 GT 440 的兼容性是 2.1 啊……
[attach]3089[/attach]
求大神解答。科学计算,没 double 不行的……
LZ您好,您的硬件是支持计算double的,但是您的项目设置可能有问题,您需要指定编译参数,让编译器按照您的GPU的计算能力版本编译。
如果您使用的是VS 2008,可以在项目上右键选择属性——配置属性——CUDA Runtime API——GPU——GPU Architecture 选为sm_21,并只保留一个GPU Architecture项,重新编译即可。
如果您使用的VS 2010或者其他方法编译您的代码,请使用相应的方法指定编译的目标GPU架构的信息。
祝您好运~
谢谢!
我用的VS2010,在项目属性-CUDA C/C+±Device里找到了 Code Generation 选项,默认设置是 comput_10,sm_10
改为comput_10,sm_21,编译成功,仍有关于double的警告
改为comput_21,sm_21,编译错误
改为comput_31,sm_21,编译成功,木有警告,目前为止看不出有什么问题,成功!
呃,我能看出来这里是在设置GPU芯片的架构……可是为什么有两个参数呢?平时好像只讨论“计算兼容性”的概念啊,另外一个参数是什么呢……
=============2013年4月29日22:06:52 补充========================
这一楼开始的时候我写错了……
最后一个是compute_13 sm_21
各位看帖的时候注意
[
联系您试下compute20 sm21。手机党打字不易,细节回头再说。
祝您节日愉快!
建议使用compute_13或者compute_20,以及sm_21编译。
例如:compute_13,sm_21
例如: compute_20,sm_21(推荐这个)
你也可以同时指定更多,例如如果你想在1.3,2.0,2.1,3.0,3.5上都能运行的话且尽量发挥显卡效力的话,可以如下设置:
compute_13,sm_13;compute_20,sm_20;compute_20,sm_21;compute_30,sm_30;compute_35,sm_35
(其中每对之间用;分隔。以及,不推荐compute_13,sm_21这种组合。这种组合在3.x+上可能会导致无法100%发挥显卡效力)
这一楼我写错了……
最后一个是compute13 sm21
没关系的,知道你错了。上文就是按compute_13,sm_21回答的,并在上文指出了这样在3.x上会导致可能的性能下降。
system
10
嗯嗯,等这个折腾好顺溜了就去申请经费买个3x的卡:lol