使用MPI进行流程计算的时间

时间:2016-05-07 21:20:06

标签: c mpi

我有使用MPI计算积分的程序。这是代码(梯形规则,通过使用trap1.h文件中包含的外部函数):

#include <mpi.h>
#include <stdio.h>
#include <math.h>
#include "get_data.h"
#include "trap1.h"

extern double trap1(int n1, int n2, double a, double h);
extern void Get_data(int* n, int m, int d);
int main(int argc, char** argv)
{
    int world_size, world_rank, i, N, N1, N2;
    double Sum, GSum, A, B, h, time1, time2, x, ISum,time;
    MPI_Status Status;
    A=0.0;
    B=1.0;
    MPI_Init(NULL, NULL);
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
    Get_data(&N, world_rank, world_size);
    if(world_rank==0) time1=MPI_Wtime();
    N1 = N*world_rank/world_size+1;
    N2 = N*(world_rank+1)/world_size;
    h=(B-A)/N;
    Sum = trap1(N1,N2, A, h);
    FILE * pFile;
    if(world_rank==0) {
        GSum = Sum;
        for(i=1;i<world_size;i++)
        {
            MPI_Recv(&ISum,1, MPI_DOUBLE_PRECISION,MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &Status);
        }
        time2 = MPI_Wtime();
        GSum=GSum/N;
        time = time2-time1;
        printf("Result = %et Time = %et Intervals: %dn",GSum,time,N);
        FILE * pFile;
        pFile = fopen ("time1_1.log","a");
        fprintf (pFile, "number of procs is %it time= %ft cost = %it", world_size, time, world_size*time);
        fclose(pFile);
    }
    else MPI_Send(&Sum, 1, MPI_DOUBLE_PRECISION, 0, 0, MPI_COMM_WORLD);
    MPI_Finalize();
}

我需要获得每个流程的计算时间(即,我想计算流程i,其中0 <= i < world_size正在运行的时间段)。不幸的是,我所有的尝试都没有成功。如果我理解正确,我需要获得值

MPI_Wtime() - time1

其中time1是程序初始化值,用于每个进程。但是我不明白我的代码的哪一部分这个值给出了进程的计算时间。

我已插入代码

FILE * pFile;
pFile = fopen("time0_1_1.log","a");
fprintf (pFile, "particular_time=  %f\t",  MPI_Wtime() - time1);
fclose(pFile);

后进入程序代码
MPI_Recv(&ISum,1, MPI_DOUBLE_PRECISION,MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &Status);

线。但我不确定我获得的时间是否是特定过程的时间。

你能帮助我吗?

0 个答案:

没有答案