2015-07-24 2 views
1

В Thrust У меня есть три вектора устройстваThrust вектор доступа элементы по другому вектору

device_vector<int> ID(N) 
device_vector<float> F(M),Y(N) 

где обычно M<<N (но это не имеет значения). Все значения ID находятся в диапазоне 0...M-1.

Я хотел бы назначить Y[i] = F[ID[i]] для всех i=0...N-1. Если я правильно понял Thrust, я не могу это сделать с for_each и некоторым функтором. Есть ли способ реализовать это так, чтобы я мог использовать thrust::transform или что-то подобное?

+0

Таким образом, вы не хотите ничего делать на хосте? – coincoin

+0

Точно, если возможно, я хочу избежать хоста. – k1next

+4

Это называется операцией «собрать» - взгляните на алгоритм 'pushust :: gather'. –

ответ

3

Вы можете сделать это с помощью thrust:gather, что-то вроде:

device_vector<int> ID(N); 
device_vector<float> F(M),Y(N); 

thrust::gather(ID.begin(), ID.end(), F.begin(), Y.begin()); 

В вызове ID это карта используется для сбора значений в F и записать их в Y.

[стандартный отказ от ответственности: написано в браузере, не тестируется, используйте на свой страх и риск]

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