我从 wikipedia 获得代码:
#include <stdio.h>
#include <omp.h>
#define N 100
int main(int argc, char *argv[])
{
float a[N], b[N], c[N];
int i;
omp_set_dynamic(0);
omp_set_num_threads(10);
for (i = 0; i < N; i++)
{
a[i] = i * 1.0;
b[i] = i * 2.0;
}
#pragma omp parallel shared(a, b, c) private(i)
{
#pragma omp for
for (i = 0; i < N; i++)
c[i] = a[i] + b[i];
}
printf ("%f\n", c[10]);
return 0;
}
我尝试使用 gcc4.5(我的配置:Intel C2D T7500M 2.2GHz,2048Mb RAM)在我的 Ubuntu 11.04 中编译和运行它,该程序的运行速度比单线程慢两倍。为什么?
最佳答案
非常简单的答案:增加 N。并将线程数设置为等于您拥有的处理器数。
对于您的机器来说,100 是一个非常小的数字。尝试更高几个数量级。
另一个问题是:您如何测量计算时间?通常需要程序时间来获得可比较的结果。
关于performance - Ubuntu 中的 OpenMP : parallel program works on double core processor in two times slower than single-threaded. 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6981643/