【问题标题】:Stream filter in cudacuda中的流过滤器
【发布时间】:2011-12-12 09:41:24
【问题描述】:

我有一个值数组和一个索引链接列表。现在,我只想保留与 LL 中的索引相对应的数组中的那些值。是否有标准算法可以做到这一点。可以的话请举个例子

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

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

【问题讨论】:

  • 不清楚你到底想做什么——你可能应该在 C 中发布一些正常的标量代码来做你想做的事情,然后可能会告诉你如何在 CUDA 中实现它。跨度>
  • 链表中的条目是否保证以某种可预测的方式排序(如排序)?
  • @talonmies:是的,索引已排序。

标签: cuda parallel-processing nvidia


【解决方案1】:

一般来说,链表本质上是串行的。拥有一台并行机器不会加快列表的遍历速度,因此问题的步数不能低于 O(n),其中 n 是列表的大小。

但是,如果您有其他方法可以访问该列表,您可以对它进行一些操作。 例如,列表的所有元素都可以存储在一个固定大小的数组中(尽管不一定以连续的方式)。列表成员可以使用以下结构在数组中表示。

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

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

现在,并行算法会一次读取所有单元格,检查它是否代表有效数据,如果是,则对其进行处理。

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

【讨论】:

    猜你喜欢
    • 2012-09-28
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多