2012-08-09 147 views
2

我有一個關於塊的平均值的問題。我有大小爲256 * 512的輸入數據,並且我在一個塊中放置了256個線程,所以總共有512個塊。輸出的大小應爲256,其中每個元素是不同塊之間相同線程ID的平均值。換句話說,所有512個塊中的線程1被平均,結果賦給輸出數組的線程1。類似地,所有512個塊中的線程2被平均並提供給輸出數組的線程2。我知道通過使用共享內存在一個塊內部平均做到相當快速和高效,但這不是這裏的條件。使用NPP函數可以讓我在for循環中完成它,但這非常耗時。任何人都可以提出如何有效地對塊進行平均處理的建議嗎?非常感謝!CUDA-如何對塊進行平均?

+3

難道你不能切換線程和塊,以便可以平均一個塊中的線程嗎? – chaohuang 2012-08-09 23:49:55

回答

2

爲什麼不把它翻轉,每塊512個線程,並做一個共享內存sum-reduction來計算塊內的總和,然後除以512並存儲到全局內存?

您也可以使用thrust快速使用按鍵減法操作對其進行編碼。

+0

謝謝你的回答。你的意思是先使用矩陣轉置,然後使用共享內存每塊平均執行512個線程?或者有更好的方法來分配線程和塊?類似於將輸入[0]放入塊0的線程0,將輸入[256]放入塊0的線程1,...,輸入[256 * 512-1]到塊0的線程511中。 – user1588794 2012-08-10 17:26:33