【发布时间】:2016-04-07 23:56:33
【问题描述】:
我正在尝试使用 Nsight 编译一个 CUDA 应用程序,该应用程序将 .cpp 文件编译为 .o 文件,然后链接主应用程序。我的构建基于 NVIDIA“Parallel for All”示例 Separate Compilation and Linking of CUDA C++ Device Code 及其 Makefile:
objects = main.o particle.o v3.o
all: $(objects)
nvcc -arch=sm_20 $(objects) -o app
%.o: %.cpp
nvcc -x cu -arch=sm_20 -I. -dc $< -o $@
clean:
rm -f *.o app
当我将代码复制到一个新目录并使用该 Makefile(当然,适应我的文件名和其他标志)时,一切正常。
但我不知道如何在 Eclipse 中获取相同的选项,因此构建总是失败并出现以下错误:
/usr/local/cuda-7.5/bin/nvcc -G -g -O0 -std=c++11 -gencode arch=compute_50,code=sm_50 -odir "src" -M -o "src/Object.d" "../src/Object.cpp"
/usr/local/cuda-7.5/bin/nvcc -G -g -O0 -std=c++11 --compile -x c++ -o "src/Object.o" "../src/Object.cpp"
../src/kernels.cu:31:12: error: ‘blockIdx’ was not declared in this scope
#... lots more "no one told me this was CUDA" errors
../src/Object.cpp:125:26: error: expected primary-expression before ‘<’ token
#... can't call CUDA kernels from cpp either ...
我的项目文件的相关包括是:
对象.cpp:
#include "Object.h"
#include "kernels.cu"
main.cpp:(fname 与 main.cu 相同的错误)
#include "Object.h"
kernels.cu:
#include "Object.h"
对象.h:
#include <cuda_runtime.h>
使用自定义 makefile 可以很好地编译代码。缺少的部分似乎是-dc(设备代码)标志,但我不知道如何在 Nsight Eclipse 版本中启用它。我知道我可以创建一个 Makefile 项目,但我真的更喜欢在 Eclipse 中完成它,这样所有的内省都可以正常工作等等。
【问题讨论】:
标签: c++ eclipse cuda makefile nsight