并行计算之MPI(六)

mpi中计时器功能

在MPI程序中经常会用到时间函数,比如用来统计程序运行的时间或根据时间的不同选取不同的随机数种子,或根据时间的不同对程序的执行进行控制等。

MPI_WTIME()
double MPI_Wtime(void)
DOUBLE PRECISION MPI_WTIME()

MPI_WTIME返回一个用浮点数表示的秒数, 它表示从过去某一时刻到调用时刻所经历的时间这样如果需要对特定的部分进行计时一般采取的方式是:
在这里插入图片描述

MPI_WTICK()
double MPI_Wtick()
DOUBLE PRECISION MPI_WTICK()

MPI_WTICK返回MPI_WTIME的精度单位是秒可以认为是一个时钟滴答所占用的时间。

获取机器的名字和MPI版本号

在实际使用MPI编写并行程序的过程中,经常要将一些中间结果或最终的结果输出到程序自己创建的文件中,对于在不同机器上的进程常希望输出的文件名包含该机器名,或者是需要根据不同的机器执行不同的操作这样仅仅靠进程标识rank是不够的,MPI为此提供了一个专门的调用使各个进程在运行时可以动态得到该进程所运行机器的名字。

int MPI_Get_processor_name ( char *name, int *resultlen)

name 当前进程所运行机器的名字
resultlen 返回名字的的长度以可打印字符的形式

int MPI_Get_version(int * version, int * subversion)

返回MPI的主版本号version和次版本号subversion

任意源和任意标识的使用

在接收操作中,通过使用任意源和任意tag标识,使得该接收操作可以接收任何进程以任何标识发送给本进程的数据,但是该消息的数据类型必须和接收操作的数据类型相一致。
下面给出一个使用任意源和任意标识的例子,其中ROOT进程进程0接收来自其它所有进程的消息,然后将各消息的内容消息来源和消息标识打印出来。
在这里插入图片描述

#include "mpi.h"
#include <stdio.h>
int main(argc, argv)
int argc;
char **argv;
{ 
int rank, size, i, buf[1]; 
MPI_Status status; 
MPI_Init( &argc, &argv );
MPI_Comm_rank( MPI_COMM_WORLD, &rank ); 
MPI_Comm_size( MPI_COMM_WORLD, &size ); 
if (rank == 0) 
{
for (i=0; i<100*(size-1); i++)
{ 
MPI_Recv( buf, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status ); 
printf( "Msg=%d from %d with tag %d\n", buf[0], status.MPI_SOURCE, status.MPI_TAG );
} 
} 
else 
{
for (i=0; i<100; i++)
buf[0]=rank+i; 
MPI_Send( buf, 1, MPI_INT, 0, i, MPI_COMM_WORLD ); 
} 
MPI_Finalize();
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值