系统规格:具有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
我没有“你好!”在控制台。可能是什么问题?
答案 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设备上运行。