在CUDA中单独编译

时间:2013-12-04 17:22:32

标签: cuda

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

我试图编译并运行更简单的示例here

main.cu

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

int main () 
{
    hello<<<1, 1>>>();
    cudaDeviceSynchronize();
}

defines.h

#include <cuda.h>

extern __global__ void hello(void);

defines.cu

#include <cstdio>
#include <cuda.h>

__global__ void hello()
{
    printf("Hello!\n");
}

使用:

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

当我尝试使用:

运行输出 a.out 文件时
optirun ./a.out

我没有“你好!”在控制台。可能是什么问题?

1 个答案:

答案 0 :(得分:2)

这是不对的:

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文档为here

或者,按照您链接的示例,您也可以这样做:

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

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