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 秒钟
mpi 的计时函数 和 C/C++ 的计时函数 有什么区别吗?
最新推荐文章于 2024-06-09 22:27:15 发布