1 #include <omp.h> 2 #include <stdio.h> 3 #include <sys/time.h> 4 void test() { 5 int a = 0; 6 for(int i = 0; i < 10000000; i++) { 7 a = i + 1; 8 } 9 } 10 int main() { 11 int nthrds = 4; 12 omp_set_num_threads(nthrds); 13 timeval tStart,cTime; 14 long long tPassed = 0; 15 gettimeofday(&tStart, 0); 16 for (int i = 0; i < 100; i++) { 17 test(); 18 } 19 gettimeofday(&cTime, 0); 20 cTime.tv_sec -= tStart.tv_sec; 21 cTime.tv_usec -= tStart.tv_usec; 22 tPassed = 1000000LL * cTime.tv_sec + cTime.tv_usec; 23 tPassed /= 1000; 24 printf("Time = %lld/n", tPassed); 25 gettimeofday(&tStart, 0); 26 #pragma omp parallel for 27 for (int i = 0; i < 100; i++) { 28 test(); 29 } 30 gettimeofday(&cTime, 0); 31 cTime.tv_sec -= tStart.tv_sec; 32 cTime.tv_usec -= tStart.tv_usec; 33 tPassed = 1000000LL * cTime.tv_sec + cTime.tv_usec; 34 tPassed /= 1000; 35 printf("Time = %lld/n", tPassed); 36 return 1; 37 }
result:函數
1 [root@c0108 zlt]# g++ omp.c -o omp -fopenmp 2 [root@c0108 zlt]# ./omp 3 Time = 2859 4 Time = 718 5 [root@c0108 zlt]#
在四核的機器上,開了四個線程,加速比基本上是4,果真不錯。 測試
此外,BS一下clock()函數,我向來以爲它一無可取。。。spa
結果:線程
1 2 3 [root@c0108 zlt]# g++ omp.c -o omp -fopenmp 4 [root@c0108 zlt]# ./omp 5 Time = 2860000 6 Time = 2860000 7 [root@c0108 zlt]# 8
clock有三個問題:
1)若是超過一個小時,將要致使溢出.
2)函數clock沒有考慮CPU被子進程使用的狀況.
3)也不能區分用戶空間和內核空間.code