使用Thrust构建向量数组

7

是否可以使用Thrust创建device_vectors的数组?我知道我不能创建一个device_vector的device_vector,但是我应该如何创建一个device_vector的数组?


1
虽然您可以在Thrust中这样做,但并不建议。Thrust仅针对1-D向量进行了优化。对于2个或更多维数据,有其他更好的库,例如OpenCV GPU,ArrayFire等。 - Ben Stewart
我会看一下OpenCV GPU。ArrayFire不支持多个GPU的免费使用。 - Manolete
听起来不错。OpenCV GPU(像Thrust一样)比ArrayFire慢得多,所以这是你必须做出的权衡。 - Ben Stewart
1
你能解释一下你想做什么吗?如果你想要一个二维数组,那么ArrayFire可能是更好的选择。如果你只是想要一个主机端的device_vectors数组,在主机代码中使用,那么这很容易实现。 - harrism
@harrism,你会如何在主机端创建device_vectors数组?我认为这对我很有用。它不一定要是二维数组,虽然CUDA可以处理二维数组。 - Manolete
1个回答

10

以下代码适用于我。如果您将此代码放入扩展名为.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");
断言失败通常如下所示。
1>../for_each.inl(96) : error C2027: use of undefined type 'thrust::detail::STATIC_ASSERTION_FAILURE<x>'

1
谢谢,让我自己试试! - Manolete
太棒了!我认为这个问题/答案会帮助很多人! - Manolete
@Manolete,我有时会忘记在.cu文件中使用面向设备的Thrust代码,从而导致一些断言失败。这可能也会提醒我。 - phoad
1
有像 copy_if 等的方法。 此外,您可以从 Thrust 容器中获取原始指针。 https://dev59.com/EWsz5IYBdhLWcg3wxat3 - phoad
1
是的。这些向量的大小在运行时定义,而不是编译时定义。因此,未知大小应该是可以的。 - phoad
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接