【发布时间】:2015-10-01 02:25:25
【问题描述】:
我正在研究网络排序(对于小于 8 的数组),并注意到所有算法都专注于其允许并行操作的能力。这是一个大小为 5 的数组的集合。
#define SWAP(x,y) if (data[y] < data[x]) { int tmp = data[x]; data[x] = data[y]; data[y] = tmp; }
//Parallelizable
SWAP(1, 2);
SWAP(4, 5);
//Parallelizable
SWAP(0, 2);
SWAP(3, 5);
//Parallelizable
SWAP(0, 1);
SWAP(3, 4);
SWAP(2, 5);
//Parallelizable
SWAP(0, 3);
SWAP(1, 4);
//Parallelizable
SWAP(2, 4);
SWAP(1, 3);
//Parallelizable
SWAP(2, 3);
我正在使用long int 数组(因此每个元素的大小为 8 个字节)。那么有什么简单的方法可以在 C 中并行化这些操作吗?是否有任何特定于硬件的命令可以用来实现这一点(SIMD、ASM(x86) 等)
【问题讨论】:
-
你有多少个数组?
-
它是一个包含很多元素(10 亿~)的大数组。我在我正在使用的 SWAP 中使用了一个偏移量。类似于 SWAP(1, 2 , lo);其中 lo 是数组中的偏移量。
-
好吧,您说您正在对小于 8 的大小进行排序。那么您要排序的是整个数组还是部分数组?
-
我正在使用一种并行合并排序的形式,当数组大小为
-
好的,所以你有很多小数组需要排序。如您所示,无需并行化您的代码。只需分发要单独排序的小数组。
标签: c algorithm sorting parallel-processing sorting-network