在我的程序中,我想通过这个循环确定有多少个数字有 9 个数字,很多有 8 个数字,等等:
for (int i = 0; i < 60000000; i++)
{
if (a[i] >= 1000000000) { p[10] += 1; }
else if (a[i] >= 100000000) { p[9] += 1; }
else if (a[i] >= 10000000) { p[8] += 1; }
else if (a[i] >= 1000000) { p[7] += 1; }
else if (a[i] >= 100000) { p[6] += 1; }
else if (a[i] >= 10000) { p[5] += 1; }
else if (a[i] >= 1000) { p[4] += 1; }
else if (a[i] >= 100) { p[3] += 1; }
else if (a[i] >= 10) { p[2] += 1; }
else { p[1] += 1; }
}
我像这样并行化循环:
void partiton(int f, int l, int[] p)
{
Parallel.Invoke(()=>calc(f,l/2,p),()=>calc(l/2,l,p));
}
void calc(int f, int l, int[] p)
{
for (int i = f; i < l; i++)
{
if (a[i] >= 1000000000) { p[10] += 1; }
else if (a[i] >= 100000000) { p[9] += 1; }
else if (a[i] >= 10000000) { p[8] += 1; }
else if (a[i] >= 1000000) { p[7] += 1; }
else if (a[i] >= 100000) { p[6] += 1; }
else if (a[i] >= 10000) { p[5] += 1; }
else if (a[i] >= 1000) { p[4] += 1; }
else if (a[i] >= 100) { p[3] += 1; }
else if (a[i] >= 10) { p[2] += 1; }
else { p[1] += 1; }
}
}
private void button1_Click(object sender, EventArgs e)
{
Stopwatch w = new Stopwatch();
w.Restart();
int f = 0;
int l = 60000000;
Parallel.Invoke(() => calc(f, l/2, p), () => calc(l/2, l, p));
w.Stop();
label1.Text = w.Elapsed.ToString();
}
但基准是:顺序:0.3834 并行:0.6864
为什么并行代码更慢?我的代码有问题吗?我的 CPU 是 AMD Phenom™ II X4。型号,955。