【发布时间】:2015-05-26 12:55:33
【问题描述】:
我有一些数组(实际上是推力::device_vector)-
MyClass1 a[N];
int b[N];
我必须用来填充
MyClass2 c[M];
a[0] 生成 c[] 中的前 b[0] 个元素。 a[1] 在 c[] 中生成下一个 b[1] 元素,依此类推。需要明确的是,M = b[0] + b[1] + ... + b[N-1]。任何 b[i] 都可以为零。我需要创建 c[],然后使用 M 个线程并行处理它的所有 M 个元素。
有没有办法编写一个使用 M 个线程的内核,其中每个线程都知道(或在 O(1) 时间内找出)它与 a[] 中的哪个对应的 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] 将使用 a[0] 创建,因为 b[0] == 2。
- 不会使用 a[1] 创建任何元素,因为 b[1] == 0。
- c[2] 到 c[4] 将使用 a[2] 创建。
- c[5] 到 c[9] 将使用 a[3] 创建。
线程 tid=3 知道它应该创建 c[3],但是它怎么知道它应该使用 a[2] 并生成它的 second 元素来这样做呢? p>
【问题讨论】:
标签: arrays parallel-processing cuda