Cuda 使用推力的矢量阵列

Cuda 使用推力的矢量阵列,cuda,gpu,gpgpu,nvidia,thrust,Cuda,Gpu,Gpgpu,Nvidia,Thrust,是否可以使用推力创建设备_矢量阵列?我知道我不能创建设备向量中的设备向量,但是我如何创建设备向量数组呢?下面的代码适合我。如果将此代码放在扩展名为.cu的文件中,它会编译得很好,但如果将其放在扩展名为.cpp的文件中,则会导致编译时断言失败 thrust::device_vector<float> vectors[3]; //thrust::device_vector<float> *vectors = new thrust::device_vector<float

是否可以使用推力创建设备_矢量阵列?我知道我不能创建设备向量中的设备向量,但是我如何创建设备向量数组呢?

下面的代码适合我。如果将此代码放在扩展名为.cu的文件中,它会编译得很好,但如果将其放在扩展名为.cpp的文件中,则会导致编译时断言失败

thrust::device_vector<float> vectors[3];
//thrust::device_vector<float> *vectors = new thrust::device_vector<float>[3];

vectors[0] = thrust::device_vector<float>(10);
vectors[1] = thrust::device_vector<float>(10);
vectors[2] = thrust::device_vector<float>(10);

printf("Works\n");
推力::设备_向量[3];
//推力::设备_向量*向量=新推力::设备_向量[3];
向量[0]=推力::装置_向量(10);
向量[1]=推力::装置_向量(10);
向量[2]=推力::装置_向量(10);
printf(“作品”\n);
断言失败如下所示

1>../for_each.inl(96) : error C2027: use of undefined type 'thrust::detail::STATIC_ASSERTION_FAILURE<x>'
1>。/for_each.inl(96):错误C2027:使用未定义的类型“推力::细节::静态断言\u失败”

虽然您可以直接这样做,但不建议这样做。推力仅针对一维矢量进行优化。还有其他更好的2维或更多维数据库,例如OpenCV GPU、ArrayFire等。我将看看OpenCV GPU。ArrayFire对多个GPU不免费。听起来不错。OpenCV GPU(像推力)比ArrayFire慢很多,所以这是你必须做的权衡。你能解释一下你想要做什么吗?如果您想要2D阵列,那么ArrayFire可能是更好的选择。如果出于其他原因,您只想在主机代码中使用设备_向量的主机端数组,那么这是很容易做到的。@harrism您将如何处理设备_向量的主机端数组?我想那对我会有用的。它不一定是一个2D数组。虽然2D阵列可以在CUDA中寻址。谢谢,让我自己试试吧!令人惊叹的!我认为这个问题/答案会帮助很多人@Manolete,我有时会忘记在.cu文件中使用面向设备的推力代码,并导致一些断言失败。它可能也会提醒我。有像copy_if等方法。此外,您可以从推力容器中获取原始指针。对这些向量的大小是在运行时定义的,而不是在编译时定义的。所以未知大小应该可以。