CUDA中的独立编译

CUDA中的独立编译,cuda,Cuda,系统规格:支持nvidia optimus的笔记本电脑(geforce 740m,支持计算能力2.0)、ubuntu 13.10、cuda 5.0、optirun(大黄蜂)3.2.1 我正在尝试编译和运行所述示例的更简单版本: main.cu #include "defines.h" #include <cuda.h> int main () { hello<<<1, 1>>>(); cudaDeviceSynchronize(

系统规格:支持nvidia optimus的笔记本电脑(geforce 740m,支持计算能力2.0)、ubuntu 13.10、cuda 5.0、optirun(大黄蜂)3.2.1

我正在尝试编译和运行所述示例的更简单版本:

main.cu

#include "defines.h"
#include <cuda.h>

int main () 
{
    hello<<<1, 1>>>();
    cudaDeviceSynchronize();
}
#include <cstdio>
#include <cuda.h>

__global__ void hello()
{
    printf("Hello!\n");
}
当我尝试使用以下命令运行outputa.out文件时:

optirun ./a.out
我在控制台中没有听到“你好!”。有什么问题吗?

这不对:

nvcc –arch=sm_20 –dc main.cu defines.cu
nvcc –arch=sm_20 main.cu defines.cu
第一个命令以单独的编译模式执行编译(但不链接)。 第二个命令一步执行编译和链接,但不使用单独的编译模式

试试这个:

nvcc -arch=sm_20 -rdc=true main.cu defines.cu
相关的
nvcc
文档如下

或者,按照链接的示例,也可以执行以下操作:

nvcc –arch=sm_20 –dc main.cu defines.cu
nvcc –arch=sm_20 main.o defines.o

正如@jackolanten所指出的,您可能希望将上述命令中的
sm_20
替换为
sm_30
,以匹配您的设备,但这不是您观察到的故障的原因。为-arch=sm_20编译的代码将在cc 3.0设备上运行。

您的卡的计算能力是3.0,而不是2.0。另外,您是否使用代码重新定位进行编译?您是否希望提及海报的卡GeForce 740M具有3.0计算能力?为
-arch=sm_20
编译的代码将在cc 3.0设备上运行。这并不是报告失败的直接原因。我对post进行了更新,我发现它可以正确工作,只使用正确的计算能力编译.o文件(-dc和-rdc=true),在我的情况下是3.0,这要感谢JackOlantem。
nvcc -arch=sm_20 -rdc=true main.cu defines.cu
nvcc –arch=sm_20 –dc main.cu defines.cu
nvcc –arch=sm_20 main.o defines.o