Каков основной способ расширения матрицы разреженного стиля?

По сути, у меня есть набор данных «разреженный стиль», с

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) это не позволяет мне использовать причудливые итераторы. Я думаю, что я просто использую неправильный термин в своем поиске или просто недостаточно креативен.

1

Решение

Это звучит как типичная операция разброса. Тяга имеет функция рассеяния это позволяет вам сделать что-то вроде этого:

thrust::scatter(values.begin(), values.end(), indexes.begin(), expanded.begin());

Это будет разбрасывать values в индексы expanded,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]