mpi 的计时函数 和 C/C++ 的计时函数 有什么区别吗?

来源:互联网 发布:理财哪个软件好 编辑:程序博客网 时间:2024/05/02 04:28

MPI 中有 

double MPI_Wtime(void) 取得当前时间, 计时的精度有 double MPI_Wtick(void) 取得
C/C++ time.h 有 clock_t clock(void) 取得当前时间, 计时的精度有 常数 CLOCKS_PER_SEC 定义。

对于使用 C 语言编程的人来说,二者都可以使用。在我的机器上 MPI_Wtick 说时间精度是 1e-6 秒,
CLOCKS_PER_SEC 是1E6, 看起来没有什么区别, 也许 MPI_Wtime 计时更准确些,因为在我的机器山
使用的time.h 的函数取得时间长度总是只有两位小数,而 MPI_Wtime 则有很多位小数。


使用 MPI函数计时的代码:

#include "mpi.h"
#include <iostream>
#include <math.h>


using namespace std;
int main(){

int rank;
int size;

MPI_Init(0,0);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

double start , finish;

MPI_Barrier(MPI_COMM_WORLD);
start = MPI_Wtime();

for(double i =0; i < 10000; i+=0.01) {i=sin(cos(2.0))*i/(sin(cos(2.0)));};

finish = MPI_Wtime();

MPI_Barrier(MPI_COMM_WORLD);
if(rank==0){
    cout<<"mpi的计时函数:Elapsed time is "<< finish-start <<" seconds"<<endl;
    cout<<"时间精度是 "<<MPI_Wtick()<<" 秒钟"<<endl;
}


MPI_Finalize();

return 0;
}



使用 time.h 的函数来计时的代码:

#include "mpi.h"
#include <iostream>
#include <math.h>
#include <time.h>


using namespace std;
int main(){

int rank;
int size;

MPI_Init(0,0);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

clock_t start , finish;

MPI_Barrier(MPI_COMM_WORLD);
start = clock();

for(double i =0; i < 10000; i+=0.01) {i=sin(cos(2.0))*i/(sin(cos(2.0)));};

finish = clock();

MPI_Barrier(MPI_COMM_WORLD);
if(rank==0){
    cout<<"C语言的计时函数:Elapsed time is "<< double(finish-start)/CLOCKS_PER_SEC <<" seconds"<<endl;
    cout<<"时间精度是 "<<1./CLOCKS_PER_SEC<<" 秒钟"<<endl;
}


MPI_Finalize();

return 0;
}

编译命令:
tlu:mpi$ mpicxx -O3 -o mpitime.exe mpitime.cpp
tlu:mpi$ mpicxx -O3 -o mpitime1.exe mpitime1.cpp

运行结果:
tlu:mpi$ mpirun -np 1 ./mpitime.exe 
mpi的计时函数:Elapsed time is 0.0233588 seconds
时间精度是 1e-06 秒钟
tlu:mpi$ mpirun -np 1 ./mpitime1.exe 
C语言的计时函数:Elapsed time is 0.02 seconds
时间精度是 1e-06 秒钟
原创粉丝点击