gpt4 book ai didi

boost - 告诉 NVCC 不要预处理主机代码以避免 BOOST_COMPILER 重新定义

转载 作者:太空宇宙 更新时间:2023-11-04 14:15:06 26 4
gpt4 key购买 nike

我有一个包含主机和设备代码的 .cu 文件:

// device code
__global__ void
myKernel() { ... }

// host code
#include <boost/thread/mutex.hpp>

boost::mutex myMutex;

int main() { ... }

如您所见,我包含了 boost 的互斥功能。当我编译文件时,由于以下警告而出现错误:

warning C4005: 'BOOST_COMPILER': Macro-Redefinition c:\boost\include\boost-1_49_0\boost\config\compiler\visualc.hpp

所以我假设 nvcc 处理设备代码和主机代码的所有预处理。我是对的吗?如果是,我该如何避免这种情况并将预处理也传递给 cl.exe(MSVC 2010,Win7)?

我已经尝试将主机代码放在单独的 hpp/cpp 文件中,并将此文件包含在 cu 文件中 - 同样的问题。在主机代码中,我定义了一个将在设备代码中使用的表面引用。所以这就是我需要在 cu 文件和主机代码中分别包含设备代码的原因。

最佳答案

这是 nvcc(我认为技术上 cudafe)的一个已知限制。 nvcc 使用文件扩展名来确定给定的源文件是否应该针对设备代码进行处理或传递给 CUDA 预处理器,然后传递给设备编译器。该编译轨迹无法正确解析 boost 包含的一些非常复杂的声明,并且编译失败。

解决方案是不要在 .cu 文件中导入 boost header 。将主机 boost 代码放在 .cc 文件中,设备代码和内核启动放在单独的 .cu 文件中,并制作一些薄包装器以访问来自 的内核调用>.cc 文件。您仍然可以将所有源代码传递给 nvcc 进行编译,但是将 boost 导入与设备代码分开可以消除前端因 boost 声明而阻塞的问题。

关于boost - 告诉 NVCC 不要预处理主机代码以避免 BOOST_COMPILER 重新定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11928756/

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