Как уменьшить каждый элемент device_vector на константу? - PullRequest
5 голосов
/ 12 марта 2012

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

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?

Спасибо!

1 Ответ

6 голосов
/ 13 марта 2012

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

...