【发布时间】:2015-02-14 21:52:57
【问题描述】:
我需要对存储在结构数组中的数据块进行排序。结构没有指针。每个块都有其计数器编号和数组中与结构块相等的数据块所在位置的坐标。例如,如果我们有一个可以划分为 4 个 NxN 块的数据数组,我们在结构块的索引数组中有 4 个结构块,每个结构块在数据数组中都有自己的编号和位置,我们可以借助它们来计算使用索引块的数据数组中的块的指针。排序应该使用比较两个块的比较器来完成,使得两个块中的最小块具有最少的第 i 个数据。例如比较器:
for( i = 0; i < N * N; ++i )
{
if( a[i] < b[i] ) return -1;
if( a[i] > b[i] ) return 1;
}
其中a 和b 是指向数据数组块的指针,我们可以通过索引数组和数据数组开头的指针获得。
排序不应该对数据数组进行排序,而是对索引数组进行排序。
所以问题是:我可以使用什么并行算法(除了框架、库,我需要精确的算法或标准语言包,如 pthread 或 qt 库或 c/c++ 标准库)以避免同步错误?代码或伪代码也会有所帮助。
【问题讨论】:
-
我会在切片(或子数组)上并行使用
std::sort,然后使用一些合并排序。顺便说一句,你至少需要 C++11 -
顺便说一句,您确定您的数据足够大,可以进行并行排序吗?典型的数据大小是多少?
-
@BasileStarynkevitch 平均数据数组大小约为 9-11 Gb。我需要对小零件进行排序,所以问题是如何快速完成。
-
你的目标平台/工具链是什么?
-
@BaummitAugen x64 linux 服务器 - 主平台。
标签: c++ c sorting parallel-processing