thrust::complex 使用 thrust reduce 无法编译

thrust::complex with thrust reduce does not compile

我一直在尝试实现一些需要在 thrust::complexes 上调用 reduce 的代码,编译器向我发出错误提示:

cannot pass an argument with a user-provided copy-constructor to a device-side kernel launch

代码如下:

#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();
}

[带 g++ 的 CUDA 9.2]

我是不是做错了什么?

这似乎是 CUDA 9.2 中推力版本的某种回归。您 post 编辑的代码可以在 CUDA 9.1 及更早版本中正确编译。

NVIDIA 和推力开发人员似乎都提出了这个问题。

[此 post 从评论中添加为社区 wiki 条目以获取未回答队列的问题。随着有关决议的更多信息可用,请随时对其进行编辑]

自 CUDA 10.0 起已修复。

资料来源:我是推力维护者。