带推力减少的推力::复杂无法编译
Posted
技术标签:
【中文标题】带推力减少的推力::复杂无法编译【英文标题】:thrust::complex with thrust reduce does not compile 【发布时间】:2019-01-28 12:21:30 【问题描述】:我一直在尝试实现一些需要在推力::complexes 上调用 reduce 的代码,编译器向我发出错误提示:
无法将带有用户提供的复制构造函数的参数传递给设备端内核启动
代码如下:
#include <thrust/device_vector.h>
#include <thrust/host_vector.h>
#include <thrust/complex.h>
#include <thrust/transform.h>
#include <vector>
using namespace thrust;
void exec()
auto v = std::vector<complex<double>>(1.0,1.0,1.0,1.0);
auto complexZero = complex<double>();
device_vector<complex<double>> devA(v);
thrust::reduce(devA.begin(), devA.end(), complexZero, plus<complex<double>>());
int main()
exec();
[CUDA 9.2 与 g++]
我做错了吗?
【问题讨论】:
您使用的是哪个版本的 CUDA?还有什么主机编译器? 我正在使用 cuda 9.2 并使用nvcc test.cu -std=c++14 -arch=sm_61 --device-c
行编译它 对于主机编译器,我不确定我是否理解您的问题,我在此示例中使用的唯一编译器是 nvcc
nvcc 不是编译器。它使用主机编译器(gcc、clang 或可视 C++ 编译器)来完成大部分工作。你用的是哪一个?
哦,好吧! (我仍然是 cuda 的极端初学者)。我查了一下,宿主编译器是gcc
这似乎是 CUDA 9.2 版本的推力的缺陷。您的代码在 CUDA 9.1、gcc 4.8.5、RHEL 7.x 上为我编译干净,在编译命令行中用 -std=c++11
替换 -std=c++14
。我已向 NVIDIA 提交了内部缺陷。欢迎您在 developer.nvidia.com 上提交推力问题或报告错误。目前我没有任何进一步的信息。好的,您似乎已经提交了一个推力问题。
【参考方案1】:
这似乎是 CUDA 9.2 中提供的推力版本的某种回归。您发布的代码可以在 CUDA 9.1 及更早版本中正确编译。
NVIDIA 和推力开发人员似乎都提出了这个问题。
[此帖子从 cmets 添加为社区 wiki 条目,以获取未回答队列的问题。随着有关解决方案的更多信息可用,请随时对其进行编辑]
【讨论】:
确实是回归。 github问题链接:github.com/thrust/thrust/issues/928【参考方案2】:从 CUDA 10.0 开始,此问题已得到修复。
来源:我是 Thrust 维护者。
【讨论】:
以上是关于带推力减少的推力::复杂无法编译的主要内容,如果未能解决你的问题,请参考以下文章