我有一些陣列(實際上推力:: device_vector) -如何使用CUDA將多個線程映射到具有不同線程數的線程的數組元素?
MyClass1 a[N];
int b[N];
,我必須使用填補
MyClass2 c[M];
一個[0]生成第一B [0]在C [元素]。 a [1]在c []中生成下一個b [1]元素,依此類推。要清楚,M = b [0] + b [1] + ... + b [N-1]。任何b [i]都可以爲零。我需要創建c [],然後使用M個線程並行處理其所有M個元素。
是否有編寫使用M根絲線一個內核,其中每個線程都知道(或爲O發現(1)時間),其對應MyClass1的在[]它被關聯到的方法嗎?
例如,如果我有N = 4和
int b[4] = {2,0,3,5};
然後M = 2 + 0 + 3 + 5 = 10,所以C []是大小爲10的,我需要10個線程(TID = 0 ... 9)並行處理c [],其中tid = i創建c [i]。這裏,
- C [0]和C [1]將使用創建的[0],因爲B [0] == 2.
- 否元件將被使用[1],因爲在b [1] == 0
- C [2]至c [4]將使用創建的[2]。
- C [5]至c [9]使用將要創建的[3]。
線程TID = 3的人都知道它應該創建C [3],但它怎麼會知道它應該使用[2]和產生其秒元素這樣做?
我所有的數據是在設備上。最後,我剛去與發射N個線程,其中每個在C [](I使用的B []與此幫助前綴和)中的適當位置寫入其相應的B [TID]元素。我想也像你說的那樣進行二分搜索,但在我看來,通常M >> N,甚至O(log(M))都會比我的解決方案更糟糕,我想。如果可能的話,我會嘗試並報告。 –