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个线程)