基本上,我有一个“稀疏风格”数据集,
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)这感觉就像推力可以轻松完成的事情,并且 2)这不允许我使用花哨的迭代器。我认为我只是在搜索中使用了不正确的术语,或者只是没有足够的创意。