在使用gcc 5.4的程序中,OpenMP需要花费更多时间

时间:2018-07-16 02:02:53

标签: gcc openmp

我使用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的时间。

1 个答案:

答案 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);