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 起已修复。
资料来源:我是推力维护者。
我一直在尝试实现一些需要在 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 起已修复。
资料来源:我是推力维护者。