2013-04-15 4 views
1

В принципе, у меня есть набор данных «редкий стиль», сКакова толчка для расширения матрицы с разреженным стилем?

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

+2

Это просто типичная операция рассеяния. – talonmies

+1

@talonmies чувак, это было полностью недостающее ключевое слово. Если вы положите его в ответы, я помету его как таковой. – IdeaHat

+2

также, [cusp] (http://code.google.com/p/cusp-library/) построен поверх сустейна и имеет много полезных встроенных функций для обработки разреженных матриц, включая преобразования. –

ответ

2

Это звучит как типичная операция рассеяния. Упорный имеет scatter function, что позволяет вам сделать что-то вроде этого:

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

Это будет рассеивать values в индексах expanded.

 Смежные вопросы

  • Нет связанных вопросов^_^