- 论坛徽章:
- 0
|
我在LINUX下使用g++编译器,做一个OPENMP的优化处理实验,代码如下:- #include <stdio.h>
- #include <string.h>
- #include <strings.h>
- #include <time.h>
- #include <omp.h>
- int main()
- {
- long long k = 20;
- int i;
- int j[10] = {101,102,103,104,105,106,107,108,109,110};
- printf("begin k=%d\tj[0]=%d\n", k,j[0]);
- time_t t, t1;
- t = time(NULL);
- omp_set_num_threads(7);
- #pragma omp parallel for
- for(i = 0; i < 7; i++)
- {
- int rank = omp_get_thread_num();
- int count = omp_get_num_threads();
- printf("Hello from thread %d of %d\n", rank, count);
- for( k=0; k < 1000000000; k++)
- {
- j[k%10] = k*k;
- }
- }
- t1 = time(NULL);
- printf("time = [%d]\n", t1 - t);
- printf("end k=%d\tj[0]=%d\n", k,j[0]);
- }
复制代码 分别采用OPENMP编译与不采用OPENMP编译的方式结果如下:
采用OPENMP的情况
begin k=20 j[0]=101
Hello from thread 0 of 7
Hello from thread 3 of 7
Hello from thread 4 of 7
Hello from thread 5 of 7
Hello from thread 6 of 7
Hello from thread 1 of 7
Hello from thread 2 of 7
time = [72]
end k=1000000000 j[0]=-11782044
不采用OPENMP的情况
begin k=20 j[0]=101
Hello from thread 0 of 1
Hello from thread 0 of 1
Hello from thread 0 of 1
Hello from thread 0 of 1
Hello from thread 0 of 1
Hello from thread 0 of 1
Hello from thread 0 of 1
time = [27]
end k=1000000000 j[0]=-11782044
采用OPENMP的的情况反而效率变低了,我的LINUX环境是
Linux FC14-1 2.6.35.14-106.fc14.x86_64 #1 SMP Wed Nov 23 13:07:52 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux, 2CPU, 8核(所以才用7个线程)
请那位使用过openmp的高手指点一下,我才vs2008上实验一个类似的程序,效果也是使用openmp时效率大幅下降了,很奇怪。 |
|