首页 > 解决方案 > 构建一个使用 boost 的 .cu 文件

问题描述

我运行了以下命令:

nvcc -arch=sm_70 foo.cu -o predatorPrey -I $BOOST_ROOT -L $BOOST_LIBRARY_PATH -lboost_timer

并得到以下编译错误:

boost/include/boost/core/noncopyable.hpp(42): error: defaulted default constructor cannot be constexpr because the corresponding implicitly declared default constructor would not be constexpr

谷歌搜索把我带到了这里

直到这家伙使用了一种变通方法,所有的希望似乎都落空了。虽然,作为初级程序员,我不明白他的意思

使用g ++ 11 open从源代码构建提升解决了这个问题

这是否意味着从头开始重建提升?它与默认构建 boost 有何不同?

那么在同一个项目中同时使用和 CUDA 的实际解决方法是什么?

标签: c++boostcudanvccnoncopyable

解决方案


对于主机代码使用:

使用 CUDA 工具链构建第 3 方库时,唯一具有高成功概率的通用解决方法是安排您的项目,使第 3 方代码位于以 .cpp 结尾并由主机编译器处理的文件中(例如 linux 上的 g++,windows 上的 cl.exe)。

您的 CUDA 代码(例如内核等)需要位于文件名以 .cu 结尾的文件中(用于默认处理行为)。

如果您需要在 .cu 文件中的函数中使用此第 3 方代码/库功能,则需要在 .cpp 文件中构建包装函数以提供必要的行为作为可调用函数,然后调用这些.cu 文件中需要的包装函数。

在项目级别将所有这些链接在一起。

如果分析具体问题,可能会采取其他方法。例如,有时更新到最新版本的 3rd 方库和/或 CUDA 版本可能会解决问题。

在设备代码中使用:

没有通用的兼容性方法。如果您希望某些行为在设备代码中可用,并且遇到这样的编译错误,则需要专门解决该问题。

一般建议可能仍然适用,例如更新到您正在使用的 3rd 方库的最新版本,和/或最新的 CUDA 版本。


推荐阅读