基本上,我有一个“稀疏风格”的数据集,有
thrust::device_vector<int> indexes(smallsize);
thrust::device_vector<float> values(smallsize);
我想把它扩展成一个
thrust::device_vector<float> expanded(fullsize);
我知道如何用内核做到这一点:
template <typename T>
__global__ void AssignByIndex
(
T* inval,
T* outval,
size_t* keys,
int Ilength
)
{
int index = blockIdx.x * blockDim.x + threadIdx.x;
if (index < Ilength)
{
const size_t key = keys[index];//cross access,slow
outval[key]=inval[index];
}
};
但是 1) 这感觉像是 thrust 可以轻松完成的事情,并且 2) 这不允许我使用花哨的迭代器。我认为我只是在搜索中使用了错误的术语,或者只是不够有创意。
最佳答案
这听起来像是典型的分散操作。推力有一个 scatter function这让你可以做这样的事情:
thrust::scatter(values.begin(), values.end(), indexes.begin(), expanded.begin());
这会将 values
分散到 expanded
的索引中。
关于c++ - 扩展稀疏式矩阵的推力方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16017652/