По сути, у меня есть набор данных «разреженный стиль», с
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) это не позволяет мне использовать причудливые итераторы. Я думаю, что я просто использую неправильный термин в своем поиске или просто недостаточно креативен.
Это звучит как типичная операция разброса. Тяга имеет функция рассеяния это позволяет вам сделать что-то вроде этого:
thrust::scatter(values.begin(), values.end(), indexes.begin(), expanded.begin());
Это будет разбрасывать values
в индексы expanded
,
Других решений пока нет …