就像C语言的函数,在某个.cu里面实现了一个函数。
现在想在另外一个.CU文件里面引用该函数。
声明了一个extern device test();
但编译却不能通过,怎么办啊?
我在之前发过文。你可以参考。
引用:
“楼主您好!
调用另外一个文件里面的__device__是可以的。我将在下一个段落中为您讲述如何操作。
操作步骤:
首先,您需要使用cuda toolkit 5.0, 之前的任何版本的toolkit只能整体编译。
其次,您使用您的鼠标邮件点击您的solution, 选择属性。然后在弹出的窗口中,选择cuda c/c++ → comm。
然后,您需要找到Generate Relocatable Device Code的选项(-rdc=true)。选择它。
编码步骤:
在文件a.cu里定义您的__device__函数。例如__device__ int r(int i) {return i * i;}
在文件b.cu里声明该函数,extern device int r(int);
然后您可以在您的b.cu里面的__global__里直接使用r函数。
在完成上述2个段落后。您需要以至少2.0(以及以上的)计算能力配置,重新编译您的项目。
然后您会看到,b.cu可以成功使用来自a.cu里面的device functions.
再次重申,这是cuda 5.0的新特性,以及,您需要至少一张2.0的卡。
感谢您莅临CUDAZone China,
祝您祝您操作成功!”
OK,多谢!
版主你好! 我在vs2010里面没有找到Generate Relocatable Device Code选项,麻烦你具体说明下。非常感谢。
版主你好,我按照您说的设置好属性之后,生成解决方案时,出现了以下的错误:
1>nvcc : fatal error : nvcc supports ‘–relocatable-device-code=true (-rdc=true)’, ‘–device-c (-dc)’, and ‘–device-link (-dlink)’ only when targeting sm_20 or higher
这句话的意思是我的显卡计算能力在2.0以下吗?
版主你好,我按照您说的设置好属性之后,生成解决方案时,出现了以下的错误:
1>nvcc : fatal error : nvcc supports ‘–relocatable-device-code=true (-rdc=true)’, ‘–device-c (-dc)’, and ‘–device-link (-dlink)’ only when targeting sm_20 or higher
这句话的意思是我的显卡计算能力在2.0以下吗?
LZ您好:
我核实了2#的描述,是无误的,请稍加细心地寻找下。
祝您好运~
LZ您好:
“在完成上述2个段落后。您需要以至少2.0(以及以上的)计算能力配置,重新编译您的项目。”——摘抄自2#。
祝您好运~
您好,版主。我看了以下我的显卡查询函数返回的参数是3.0的啊!
LZ您好:
8#指出的是您编译您的工程的时候需要给出的参数,该参数并不和您的实体卡有直接关系。
您可以在1.x的卡的机器上使用更高的计算能力的编译参数,并按照此参数编译您的工程,得到可执行文件。只是此时1.x的卡不能执行而已。
同理可推,您的卡虽然是3.0的计算能力,但这个和您编译的时候给出的参数真心是两回事的。请您明察。
祝您好运~
版主见笑了,我不明白什么是编译的参数,这个在哪里设置,还是建工程的时候设置的啊?
LZ您好:
VS2008的话,在解决方案属性——配置属性——CUDA Runtime API——GPU——GPU Architecture这里,选择为sm_30即可。您可以只保留一项GPU Architecture参数即可。
VS2010的话,您使用您的鼠标邮件点击您的solution, 选择属性。然后在弹出的窗口中,选择cuda c/c++ → comm,然后请寻找类上的选项,选择compute_30,sm_30这样。
请您不妨一试。
祝您好运~
版主你好,我按照你的建议进行修改后,还是出现同样的错误,另外,我把程序中与GPU相关的语句全部注释掉后,还是会出现这个错误,请问版主这是什么原因呀?
LZ您好:
我不知道是为何了,见谅。
祝您好运~
那不可能。显然你设置错误。请重新看ICE原帖。
(正确的设置了sm_**和compute_**后,显然不会再按默认的1.0提示的。你显然没有设置正确)
这是我在vs2010中的设置截图,版主看看有什么问题没
那就奇怪了。您的compute_30,sm_30设置后,
依然提示:需要2.0及以上的计算能力才能支持-rdc=true么?
那果断不对,
要么是您的图有问题(例如您实际上不是这么设置的),
要么就是您设置不完全(例如您有多个cu,有的不是设置成compute_30,sm_30的),
要么就是楼主您在调侃我们。
版主真会开玩笑,截图肯定没有问题,另外我是对整个工程都设置成compute_30,sm_30,所以也不存在有的cu没设置。 我打算重新写个简单global函数调用device函数的程序,然后重新按照版主的意见来配置。 另外多谢版主悉心指导,帮忙解决了很多问题。
你都设置成compute_30,sm_30了,还提示计算能力<2.0 ?
您确定您真的rebuild all过一次了么?