cuda中的流过滤器

cuda中的流过滤器,cuda,parallel-processing,nvidia,Cuda,Parallel Processing,Nvidia,我有一个值数组和一个索引链表。现在,我只想保留数组中与LL中的索引相对应的值。是否有一个标准的算法来实现这一点。如果可能,请举例说明 假设我有一个数组1,2,5,6,7,9 我有一个链表2->3 所以,我想保持索引2和3的值。那就是保持5和6。 因此,我的函数应该返回5和6。一般来说,链表本质上是串行的。拥有一台并行机不会加快遍历列表的速度,因此问题的步数不能低于O(n),其中n是列表的大小 但是,如果您有其他方法访问列表,您可以使用它做一些事情。 例如,列表中的所有元素都可以存储在一个固定大小

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

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

所以,我想保持索引2和3的值。那就是保持5和6。
因此,我的函数应该返回5和6。一般来说,链表本质上是串行的。拥有一台并行机不会加快遍历列表的速度,因此问题的步数不能低于O(n),其中n是列表的大小

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

struct ListNode {
    bool isValid;
    T data;
    int next;
}
isValid
设置数组中的给定单元格是否被有效列表成员占用,或者它只是一个空单元格

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


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

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

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

struct ListNode {
    bool isValid;
    T data;
    int next;
}
isValid
设置数组中的给定单元格是否被有效列表成员占用,或者它只是一个空单元格

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


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

不清楚您到底想做什么-您可能应该在C中发布一些正常的标量代码,它可以做您想做的事情,然后可以告诉您如何在CUDA中实现它。是否链接了列表保证以某种可预测的方式排序(如排序)?@Talonmes:Yes,索引已排序。不清楚您到底想做什么-您可能应该在C中发布一些普通的标量代码来满足您的要求,然后可能会告诉您如何在CUDA中实现这一点。链接列表中的条目是否保证以某种可预测的方式排序(如排序)?@talonmies:是的,索引已排序。