【发布时间】:2016-08-01 12:04:01
【问题描述】:
我有一个结构数组,我需要根据结构 (N) 的属性对该数组进行排序。对象如下所示:
struct OBJ
{
int N; //sort array of OBJ with respect to N
OB *c; //OB is another struct
}
数组很小,大约有 512 个元素,但是每个元素的大小都很大,因此我无法将数组复制到共享内存。
对这个数组进行排序的最简单和“好”的方法是什么?我不需要一个需要大量时间来实现的复杂算法(因为数组中的元素数量很少)我只需要一个简单的算法。
注意:我已经阅读了一些关于使用 GPU 进行排序算法的论文,但是这些论文的速度增益仅在数组的大小非常大时才会显示出来。因此我没有尝试实现他们的算法,因为我的数组很小。我只需要一种简单的方法来对我的数组进行并行排序。谢谢。
【问题讨论】:
-
只对一个小数组进行排序,无论哪种方式,您都无法使 GPU 饱和。可能更容易对 CPU 端进行排序,特别是如果您同时运行其他内核。但是,如果您有很多小列表(最多约 500 个项目),类似的问题是与订单无关的透明度。见this。您需要提取键和索引列表,对它们进行排序,然后使用索引重新排序或仅按排序顺序读取。