关于cuda数学库函数的问题

以前装的cuda4.2版本,编程时在核函数里同时使用sin()和cos()函数能正常运行,结果也正确,昨天换了cuda5.0版本,发现同一个程序,跑出来的结果都为0,单独使用sin()函数和单独使用cos()函数时就能运算正确,或者用sincos()函数运算结果也是正确的,请问cuda5.0版本的核函数不支持同时使用sin()和cos()函数吗,还是我编译环境哪个地方没设置对导致的?还有就是cuda里面的数学函数库和标准c函数库里的数学函数的区别大吗,使用时和C函数库相比要注意些什么?谢谢!

LZ您好,应该是可以支持的,尚不清楚您的问题出在什么地方。

CUDA自带的数学函数的信息,您可以看一下CUDA C Programming Guide 的Appendix C,您可以留意一下,fast math的精度差别,函数的单精度版本,双精度版本等。

暂无其他建议了,留待其他版主/网友补充。

祝您编码顺利~

谢谢,我今天下午把原来的vs2008卸了,装了vs2010,还是原来的问题,我发现我把项目—>属性—>CUDA C/C++—>device里code generation 里的compute_10,sm_10改为compute_20,sm_20后不管怎么计算,输出结果全为零了,但是改为compute_12,sm_12以下的数据后可以计算,但是按照float型在计算,我这个程序要求精度为double型,float型精度不够,我的计算机显卡是2.1版本的,应该可以支持double型计算,而且以前cuda4.2算来也对,而且我的变量也全定义为了double型,感觉是哪里设置没对,不知你是否知道其中原因?谢谢

LZ您好,我尚不清楚是何原因造成,甚是诡异。

祝您好运~

那我在找找原因吧,Thanks any way!!!:handshake

100%是你自己的原因。亲。以及,您后续楼层的说法也多少验证了这点。

CUDA是经过验证的平台,请不要怀疑它存在100%出错的概率。

问题已经解决了,我把项目—>属性—>CUDA C/C++—>device里Max used Register 设置的原来的0改为1,运算结果就正确了,但是还是不知道这样设置的原理是什么,但现在已经能调试,还是谢谢了。另外在vs2010的界面里threadIdx这些变量会被打上红色下滑线,并会说是未定义标示符,但是却不会影响编译和运行,开始还以为是这里出问题了,这是VS编译器原因照成的,还是我的设置没设置好呢

(1)
maxrregcount作为0,实际上是等于不设置。
改成1实际上是无效果的,在fermi上将被强制修改为最低的值16。
所以为何修改这个可以成功我不知道。

(2)
请参考本论坛前日的如何处理IDE的智能感知不识别threadIdx之类的问题。(简单的说,
(1)你必须 #include贵机上的"cuda_runtime.h"
(2)你必须将cuda toolkit的include directory加入贵项目的addtion include directories.
(3)你必须在完成1和2步骤后等待5秒左右才能让红线消失。

感谢来访。

代为修改了一个笔误错别字。

好的,谢谢了