我如何将这个简单的代码转换为推力代码?
for (i=0;i<cA-rA;i++)
sn[i]=c[n_index[i]]-sn[i];
更多信息: cA 和 rA 是 const 整数,因此我们可以将其视为 'n'= cA-rA sn:float(n) 数组 n_index:int(n) 数组 c:float(cA) 数组
我的问题是指向 C 数组元素的 n_index[i] 。谢谢你!
thrust::transform
您可以通过使用以下方法与“收集”操作融合来实现这一点permutation_iterator
:
#include <thrust/device_vector.h>
#include <thrust/iterator/permutation_iterator.h>
#include <thrust/transform.h>
#include <thrust/sequence.h>
#include <thrust/functional.h>
int main()
{
size_t n = 100;
// declare storage
thrust::device_vector<int> sn(n);
thrust::device_vector<int> n_index(n);
thrust::device_vector<int> c(n);
// initialize vectors with some sequential values for demonstrative purposes
thrust::sequence(sn.begin(), sn.end());
thrust::sequence(n_index.begin(), n_index.end());
thrust::sequence(c.begin(), c.end());
// sn[i] = c[n_index[i]] - sn[i]
thrust::transform(thrust::make_permutation_iterator(c.begin(), n_index.begin()),
thrust::make_permutation_iterator(c.end(), n_index.end()),
sn.begin(),
sn.begin(),
thrust::minus<int>());
return 0;
}
我尝试了第一个,但没有得到正确的结果。第二个 permutation_iterator 需要位于BOTH向量的末尾。
尝试以下更正:
// sn[i] = c[n_index[i]] - sn[i] thrust::transform(thrust::make_permutation_iterator(c.begin(), n_index.begin()), thrust::make_permutation_iterator(c.end(), n_index.end()), sn.begin(), sn.begin(), thrust::minus<int>());