Parallel processing 在GPU上合并许多但很小的阵列

Parallel processing 在GPU上合并许多但很小的阵列,parallel-processing,gpgpu,Parallel Processing,Gpgpu,我有以下形式的2D数据结构: {t1,1;…;T1500},{t31,1;…;T31500} 因此,每个数据结构大约有15000个条目。范围1-500可能变化很大,只是指示性的,31是固定的。我每100ms得到2000个数据结构,代表测量数据 tx,x表示简单整数。保证如t1,1

我有以下形式的2D数据结构:

{t1,1;…;T1500},{t31,1;…;T31500}

因此,每个数据结构大约有15000个条目。范围1-500可能变化很大,只是指示性的,31是固定的。我每100ms得到2000个数据结构,代表测量数据

tx,x表示简单整数。保证如t1,1 我们想把所有的tx,x合并成一个订单!每2000个2D结构的1D结构

现在我们有一个相当快的顺序CPU合并算法,但我们正在尝试研究GPGPU的可能性,现在15000个项目可能不值得这样的开销,我可以用最初的opencl排序算法确认这一点。然而,有没有直接的策略提升一个在1个数据集上运行的GPGPU内核,在这个上下文中是一个2d数据结构,以便在2000个数据集上并行运行?如何充分利用GPU

我读过关于并发内核的文章,但这只允许在当前平台上使用最多4-16个并发内核。并发内核更像是一种通用的解决方案,因为它们允许不同类型的内核,而在这种情况下,我们需要在2000个数据结构上完成相同的内核,比如SKMD,单内核多数据*,然而,我不知道在这个层次上的并行性,或者我真的错过了在这种情况下充分利用GPU的一些明显的东西吗

我迫切需要任何帮助,所以基于专有或开放标准的建议都是受欢迎的


*是的,我这样做是为了给出一个想法,希望回答自己的问题:

因此,在GPU行话中,执行许多但相同的任务“x”被称为分段“x”*,在这种情况下,我希望分段合并。到目前为止,还没有生产就绪的算法,因此我将使用分段排序,仍然非常快,但我忽略了内部数组已经排序的事实,但我现在可以并行处理2000个数据集

另一种方法是使用,它确实利用了已经排序的区域这一事实,但是现在我无法将此功能提升到操作2000多个项目,可能是预处理和后处理,以及使用LocationSort over键和!也可用的值将产生结果

*在观看了关于GPU编程的非常有用的udacity讲座后,我得到了这些信息