2012-03-12 4 views
4

Я пытаюсь использовать thrust::transform для уменьшения постоянного значения от каждого элемента device_vector. Как видите, последняя строка неполна. Я пытаюсь уменьшить из всех элементов константу fLowestVal, но не знаю, как именно.Как уменьшить каждый элемент device_vector на константу?

thrust::device_ptr<float> pWrapper(p); 
thrust::device_vector<float> dVector(pWrapper, pWrapper + MAXX * MAXY); 
float fLowestVal = *thrust::min_element(dVector.begin(), dVector.end(),thrust::minimum<float>()); 

// XXX What goes here? 
thrust::transform(...); 

Другой вопрос: После того, как я делаю изменения на device_vector, будут изменения применяются также к p массива?

Спасибо!

ответ

5

Вы можете уменьшаете постоянное значение от каждого элемента device_vector путем объединения for_each с выражением заполнителя:

#include <thrust/functional.h> 
... 
using thrust::placeholders; 
thrust::for_each(vec.begin(), vec.end(), _1 -= val); 

Необычный _1 -= val синтаксис означает создать неназванный функтор, работа которого заключается в уменьшаете свой первый аргумент, val. _1 живет в пространстве имен thrust::placeholders, к которому у нас есть доступ через директиву using thrust::placeholders.

Вы также можете сделать это, объединив for_each или transform с помощью специального функтора, который вы предоставили себе, но это более подробно.

+0

WOW jared вот что я искал! не могли бы вы рассказать о предварительной работе функции for_each? –

+1

@igalk Функции, подобные этим, ограничены пропускной способностью. Производительность должна быть «так же быстро, как вы можете читать и писать» –