【问题标题】:remove include path in nvcc删除 nvcc 中的包含路径
【发布时间】:2014-04-14 08:48:36
【问题描述】:

我正在尝试通过 CUDA 扩展向量支持,例如,覆盖向量结构中的运算符。我可以通过修改默认的 vector_types.h 文件来做到这一点。但是,在我无权修改它的多用户环境中是不可能的。

因此,我决定创建一个新的 vector_types.h 并且不包含原始的 vector_types.h。但似乎 nvcc 会自动包含这个文件,即使我没有将它包含在我的代码中。所以我的问题是,有没有办法改变 nvcc 的这种行为?

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 我认为您的问题的简短回答是否定的。 nvcc 是一个编译器驱动工具,所以它“在后台”做了很多步骤。如果您想了解发生了什么,请阅读nvcc manual 并了解dryrun。但我认为您不会找到一种标准方法(例如编译开关)来告诉nvcc 不要从标准系统包含路径中包含vector_types.h 文件。您可以尝试覆盖系统包含路径-isystem,但您基本上需要在本地安装完整的 CUDA。
  • 如果你在多用户环境下无法更改CUDA的系统版本,如果你有足够的磁盘空间可以下载CUDA工具包并安装本地副本,并带有适当的路径定义从该副本中工作,您可以根据需要对其进行修改。
  • 感谢 cmets 我想我将不得不查看手册以查看是否有解决方案。只需将您的 cmets 作为答案,如果我无法从手册中找到解决方案,我将接受它。

标签: cuda gpu nvidia nvcc


【解决方案1】:

您可以创建单独的头文件并在其中包含vector_types.h

// vector_types_ext.h

#include <vector_types.h>

__device__ float4 operator +(float4 a, float4 b)
{
    // ...
}

【讨论】:

  • 好吧,这可能可行,但如果我想重载下标 ([]) 运算符怎么办?这样的原型应该是 device int &operator[] (int i)。我认为这必须在结构声明中。
猜你喜欢
  • 1970-01-01
  • 2014-03-28
  • 2021-06-22
  • 2013-04-18
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多