看看這段代碼:OpenMP:並行程序不是更快(或不是更快),然後串行。我究竟做錯了什麼?
#include <stdio.h>
#include <omp.h>
int main()
{
long i, j;
#pragma omp for
for(i=0;i<=100000;i++)
{
for(j=0;j<=100000;j++)
{
if((i^j) == 5687)
{
//printf("%ld^%ld\n", i, j);
break;
}
}
}
}
所以,結果是:
[email protected]:~/Projects$ gcc test.c -fopenmp -o test_openmp
[email protected]:~/Projects$ gcc test.c -o test_noopenmp
[email protected]:~/Projects$ time ./test_openmp
real 0m11.785s
user 0m11.613s
sys 0m0.008s
[email protected]:~/Projects$ time ./test_noopenmp
real 0m13.364s
user 0m13.253s
sys 0m0.008s
[email protected]:~/Projects$ time ./test_noopenmp
real 0m11.955s
user 0m11.853s
sys 0m0.004s
[email protected]:~/Projects$ time ./test_openmp
real 0m15.048s
user 0m14.949s
sys 0m0.004s
有什麼不對?爲什麼OpenMP程序較慢?我該如何糾正它?
我使用OS Ubuntu在幾臺計算機上測試了它(Intel Core i5在工作,Intel Core2Duo T7500在家中),並且總是得到相同的結果:OpenMP不會顯着提高性能。
我也測試了維基百科的例子,得到了同樣的結果。
你確定你的Ubuntu內核是SMP? – m0skit0 2012-04-10 15:55:07