51

我正在寻求有关 CUDA 项目的帮助。我的目标是拥有一个可以在本机 g++ 编译器中编译但使用 CUDA 代码的项目。我知道我必须在 nvcc 编译器中编译我的 CUDA 代码,但据我了解,我可以以某种方式将 CUDA 代码编译成 cubin 文件或 ptx 文件。

以下是我的问题:

  1. 如何使用 nvcc 编译成 cubin 文件或 ptx 文件?我不需要 -c 什么的吗?
  2. 我要使用哪种文件类型?
  3. 正确编译和链接项目的 g++ 命令是什么?

假设如下:

  1. 我有一个名为“main.cpp”的文件,其中包含一个主要功能并包含 cuda.h。
  2. 我有另一个名为“cudaFunc.cu”的文件,其中包含 CUDA 代码。例如,假设我想添加两个存在于 main.cpp 中的整数数组。
4

3 回答 3

61

我能够通过几个不同的帖子解决我的问题,包括这些帖子。不要忘记,如果您使用 64 位机器链接到 64 位库!它看起来很明显,但对于像我这样的小丑来说,这是我忘记的。这是我现在使用的 make 文件......如果你能消化这个 make 文件,你应该能够做我想做的事情,即分别编译 cuda 代码和其他 G++ 代码。还请记住,您必须拥有某些版本的 gcc、g++ 编译器(我使用的是 g++-4.4,它对我有用)无论如何,这里是 make 文件...

all: program

program: cudacode.o
    g++ -o program -L/usr/local/cuda/lib64 -lcuda -lcudart main.cpp  cudacode.o 

cudacode.o:
    nvcc -c -arch=sm_20 cudacode.cu 

clean: rm -f *.o program

希望您能看到我做的第一件事是使用编译器和选项编译 cudacode(已保存为.cu)(另请注意,您可能想要删除)。这创造了一个. 然后我使用带有选项的 g++ 编译器并链接到 lib64 库并链接和库以及编译我的然后链接. 希望这对某人有帮助!nvcc-c-arch=sm_20cudacode.o-o-lcuda-lcudartmain.cppcudacode.o

于 2012-02-29T19:18:18.680 回答
17

对这个最近的问题的回答可能描述了你需要什么。

一些附加说明:

  1. 您不需要将您的文件编译.cu.cubin.ptx文件。您需要将其编译为.o目标文件,然后将其与.o使用 g++ 编译的 .cpp 文件中的目标文件链接。
  2. 除了将您的 cuda 内核代码放入 中cudaFunc.cu,您还需要在启动内核的文件中放入一个 C 或 C++ 包装函数(除非您使用的是 CUDA 驱动程序 API,这不太可能也不推荐)。还要添加一个带有此包装函数原型的头文件,以便您可以将其包含在需要调用 CUDA 代码的 C++ 代码中。然后使用标准 g++ 链接线将文件链接在一起。
于 2012-02-24T01:47:12.800 回答
10

我发现将编译后的 cuda 目标代码与 g++ 链接起来可能很麻烦。尝试像这样编译它:

all:
nvcc cudafile.cu mainfile.cpp -o executable

clean: rm -rf *.o
于 2013-01-25T11:39:11.180 回答