2012-03-12 83 views
4

我試圖用thrust::transformdevice_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陣列?

謝謝!

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

不尋常_1 -= val語法意味着創建一個無名算符其工作是通過遞減其第一個參數:

回答

5

可以通過使用佔位符表達組合for_each遞減從device_vector的每個元素的恆定值val_1生活在命名空間thrust::placeholders,我們有機會獲得通過using thrust::placeholders指令。

您也可以通過將for_eachtransform與您自己提供的自定義函子結合使用,但它更冗長。

+0

WOW賈裏德這就是我一直在尋找!你能否詳細說明for_each函數的性能? – 2012-03-13 06:13:16

+1

@igalk像這些功能是帶寬受限。表演應該「儘可能快地讀寫」 – 2012-03-13 17:17:26