当我在C#中运行bubblesorts,cocktailorts和quicksorts时,我可以看到所有3个内核都参与了我的AMD X3(X4附带1个故障核心)。
为什么会这样?我的算法是顺序的,我的代码没有任何线程标记。特别是像排序算法这样的高度顺序算法没有,一个事件直到下一个完成才会发生。它如何设法拆分算法?
例如,请求中的bubblesort:
public void BubbleSort()
{
for (int i = 1; i < amount; i++)
{
for (int j = 0; j < a; j++)
{
if (numbers[j] > numbers[j + 1])
{
t = numbers[j + 1];
numbers[j + 1] = numbers[j];
numbers[j] = t;
}
}
a--;
}
}
答案 0 :(得分:3)
您的代码可能会在上下文切换上交换核心。但是一次只能使用一个。
答案 1 :(得分:1)
可以使排序算法并行运行并利用多个核心。你使用哪种排序程序?它们很可能不是顺序算法。
举个例子,Quicksort非常容易parallelize via divide and conquer。