gpt4 book ai didi

c++ - 如何让 Nsight EE 使用 -dc 标志进行编译?

转载 作者:行者123 更新时间:2023-11-30 05:33:45 24 4
gpt4 key购买 nike

我正在尝试使用 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"

内核.cu:

#include "Object.h"

对象.h:

#include <cuda_runtime.h>

使用自定义 makefile 可以很好地编译代码。缺少的部分似乎是 -dc (设备代码)标志,但我不知道如何在 Nsight Eclipse 版本中启用它。我知道我可以创建一个 Makefile 项目,但我真的更喜欢在 Eclipse 中进行,这样所有的内省(introspection)都可以正常工作等等。

最佳答案

我解决了这个问题,虽然我仍然不完全理解它......似乎 -x c++ 是关键标志,而不是 -dc

当文件重命名如下时,Nsight Eclipse 的默认build设置可以正常工作:

Object.cpp Object.cu:

#include "Object.h"
#include "kernels.cuh"

main.cpp: (main.cu也不错)

#include "Object.h"

kernels.cu kernels.cuh:

#include "Object.h"

对象.h:

#include <cuda_runtime.h>

显然 .cu 文件用 -x cu(语言 CUDA)编译成 .o 文件,然后链接 。 cpp 文件使用 -x c++ 语言编译,因此看不到所有 CUDA 标记。 main.cpp 文件中没有实际的 CUDA,因此无关紧要。

如果不将 kernels.cu 重命名为 kernels.cuh,构建将失败并出现多个定义错误,因为它编译了两次。

当前配置似乎有效,希望这对某人有帮助。我真的希望有一些关于文件扩展名如何影响 Nsight 构建规则的清晰文档或设置...

关于c++ - 如何让 Nsight EE 使用 -dc 标志进行编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34589997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com