我使用Ubuntu 16.04作为Windows子系统,并使用带有bash的gcc 5.4版本。 我的Windows版本是Windows 10家庭版,内存是16GB。 我的CPU是i7-7700HQ。 我正在我的大学学习计算机编程。这些天,我对并行编程很感兴趣,因此我已经编写了许多代码,但是存在一些问题。
int i;
int sum = 0;
clock_t S, E;
S = clock();
#pragma omp parallel for reduction(+:sum)
for(i = 0 ; i < M ; i++){
sum++;
}
E = clock();
printf("\n%d :: time : %lf\n", sum, (double)(E-S)/1000);
return 0;
如果我用commamd,“ gcc -openmp test.c -o test”和“ time ./test”编译此代码,则会显示 100000000 ::时间:203.125000
真实0m0.311s 用户0m0.203s sys 0m0.016s。
但是,
int i;
int sum = 0;
clock_t S, E;
S = clock();
for(i = 0 ; i < M ; i++){
sum++;
}
E = clock();
printf("\n%d :: time : %lf\n", sum, (double)(E-S)/1000);
return 0;
如果使用命令“ gcc -openmp test2.c -o test2”和“ time ./test2”编译此代码,则显示 100000000 ::时间:171.875000
真实0m0.295s 用户0m0.172s sys 0m0.016s。
如果我一次又一次地编译这些代码,有时会花费相同的时间,但是openmp永远不会更快。
然后我用vim编辑了这些代码。
然后我尝试使用命令“ gcc -fopenmp test.c”和“ time ./penmp”进行编译。比命令“ gcc -openmp test.c”花费更多的时间。
如果我使用Visual Studio 2017社区编译相同的代码,则openmp会更快。
请让我知道如何减少openmp的时间。
答案 0 :(得分:0)
您应该使用omp_get_wtime()来测量挂钟:
double dif;
double start = omp_get_wtime( ); //start the timer
//beginning of computation
..
//end of computation
double end = omp_get_wtime();// end the timer
dif = end - start // stores the difference in dif
printf("the time of dif is %f", dif);