CUDA主机代码的互斥锁? boost::mutex 由于使用 nvcc 重新定义了 BOOST_COMPILER 没有解决方案
Posted
技术标签:
【中文标题】CUDA主机代码的互斥锁? boost::mutex 由于使用 nvcc 重新定义了 BOOST_COMPILER 没有解决方案【英文标题】:Mutex for CUDA host code? boost::mutex no solution due to BOOST_COMPILER redefinition with nvcc 【发布时间】:2012-07-19 14:38:26 【问题描述】:有人看到在 CUDA 主机代码中同步操作的可能性吗?对于 CUDA 主机代码,我指的是包含在您的 .cu 文件中并由 nvcc 预处理然后传递给 Windows 上的 cl.exe 的主机代码。
由于 nvcc 不可避免地对主机代码进行预处理,我无法使用我的首选实现 boost::mutex: 如果我包含 boost 内容,则会收到 BOOST_COMPILER makro redefinition 错误。
【问题讨论】:
【参考方案1】:只需将您的 CUDA C 代码与其他代码分开即可。让 .cu 文件包含您的内核、设备函数、内核调用等。为内核调用制作标头并在您的 cpp 文件中使用这些标头。这也有助于减少编译时间,因为编译 .cu 文件很慢。
【讨论】:
我已经尝试过了,但对我的主机代码还有另一个重要要求:我在 CUDA 表面上进行操作,它本质上是静态的,必须在全局范围内声明。当我在单独的 .cpp / .hpp 文件中使用它时,cl.exe 不知道如何处理它并且 nvcc 丢失了它。以上是关于CUDA主机代码的互斥锁? boost::mutex 由于使用 nvcc 重新定义了 BOOST_COMPILER 没有解决方案的主要内容,如果未能解决你的问题,请参考以下文章