我是编程新手。我知道计算机按照给出的顺序执行指令。
我正在学习C,我写了这个:
#include <stdlib.h>
#include <stdio.h>
int comp(const char *a, const char *b) {
return *a - *b;
}
int main() {
char str[] = "Hello, world! I'm learning C and it's awesome!";
qsort(str, sizeof(str) - 1, sizeof(char), comp); // -1 because of NUL-terminator.
puts(str);
return 0;
}
但是,当我想对多个非常大的数组进行排序时,这可能需要一段时间。我的计算机有多个处理核心,所以我想利用它。那可能吗?代码可以并行运行,我该怎么做?
<子> P.S。我知道在优化之前我必须对代码进行分析,但现在假设这是一个非常慢的操作。
答案 0 :(得分:5)
您要找的是threading。 Internet上有很多资源和教程可以帮助您开始并行化代码。
答案 1 :(得分:0)
答案 2 :(得分:0)
是的,代码可以使用多个线程或多个进程并行运行。另一种并行形式是SIMD,其中相同的操作在多组操作数上并行执行。
现在,能够并行运行代码并不会自动导致能够并行地排序。为此,您需要一个合适的算法。存在一些并行排序算法,其中一些在Wikipedia article on quicksort中提到。
答案 3 :(得分:0)
在诉诸并行之前,您应该确保您的算法尽可能快,这取决于您正在排序的内容。例如,如果您要排序占用有限范围的数字,则可以使用O(N)排序。否则,像MergeSort这样的O(NlogN)算法就可以工作。
假设您选择了MergeSort。然后,即使它是O(NlogN),它仍然可以有一个很大的常数加速因子,你应该这样做。 Here's how I do it.
完成后,假设您有4个核心。 然后你可以将数据集拆分为4个大致相等的段并对它们进行并行排序,每个核心一个。 然后你可以完成两个O(N)传球来合并结果。