在cuda流过滤器

时间:2011-10-21 08:17:58

标签: cuda parallel-processing nvidia

我有一组值和索引的链接列表。现在,我只想保留数组中与LL中的索引相对应的值。有没有一个标准的算法来做到这一点。如果可能,请举例说明

所以,假设我有一个数组1,2,5,6,7,9 我有一个链表2-> 3

所以,我想将值保留在索引2和3处。即保持5和6。 因此我的函数应该返回5和6

1 个答案:

答案 0 :(得分:1)

通常,链表本质上是连续的。使用并行机器不会加快遍历列表的速度,因此问题的步数不能低于O(n),其中n是列表的大小。

但是,如果你有一些额外的方式来访问列表,你可以用它做一些事情。 例如,列表的所有元素都可以存储在固定大小的数组中(尽管不是连续的方式)。可以使用以下结构在数组中表示List成员。

struct ListNode {
    bool isValid;
    T data;
    int next;
}

isValid设置数组中的给定单元格是否被有效的列表成员占用,或者它只是一个空单元格。

现在,并行算法会立即读取所有单元格,检查它是否代表有效数据,如果是,则用它做一些事情。

第二部分:每个线程具有输入数组idx的有效索引A,必须标记A[idx]不被删除。一旦我们知道应该删除A的哪些元素,哪些元素不被删除 - 可以应用并行压缩算法。