MPI初体验

Communicators

A collection of processes that can send messages to each other.
MPI_Init defines a communicator that consists of all the processes created when the program is started.Called MPI_COMM_WORLD.

SPMD

MPI是典型的SPMD(Single program Multiple data)
The if-else construct makes our program SPMD

基本函数说明

//通过MPI_Init函数进入MPI环境并完成所有的初始化工作,标志并行代码的开始。
int MPI_Init(int *argc, char **argv);

//通过MPI_Finalize函数从MPI环境中退出,标志并行代码的结束,如果不是MPI程序最后一条可执行语句,则运行结果不可知。
int MPI_Finalize(void)

//获取指定通信域的进程个数。
//其中,第一个参数是通信子,第二个参数返回进程的个数。
//定义由用户启动的所有进程所组成的通信子,缺省值为 MPI_COMM_WORLD 。这个参数是MPI通信操作函数中必不可少的参数,用于限定参加通信的进程的范围。
int MPI_Comm_size(MPI_Comm comm, int *rank)

//获得当前进程在指定通信域中的编号,将自身与其他程序区分。其中,第一个参数是通信子,第二个参数返回进程的编号。
int MPI_Comm_rank(MPI_Comm comm, int *rank)

//char *name : 实际节点的唯一说明字;
//int *resultlen:在name中返回结果的长度;
//有时候在实际处理中我们可能需要将进程迁移至不同的处理器,而MPI提供了获取处理器名的函数以简单地允许这种行为。
int MPI_Get_processor_name( char *name, int *resultlen)

通信

//进程之间传送消息,Tag  is used to distinguish messages that are otherwise identical
int MPI_Send(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)

//进程之间接收消息,tag要和发送消息的进程保持一致
int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status * status)


程序计时

在实际编程中,计时是一个很实用的功能。

在MPI编程我们可以使用MPI_Wtime函数在并行代码中计算运行时间,用MPI_Wtick来查看精度。

double MPI_Wtime(void)
//MPI_WTIME返回一个用浮点数表示的秒数, 它表示从过去某一时刻到调用时刻所经历的时间。

double MPI_Wtick(void)
//MPI_WTICK返回MPI_WTIME的精度,单位是秒,可以认为是一个时钟滴答所占用的时间。

你可能感兴趣的:(一些小心得)