MPI(一)常见函数

MPI简介

头文件
相关变量声明 MPI_Init(&argc, &argv)
程序开始
程序体 计算与通信
程序结束 MPI_Finalize()

MPI常见函数

// MPI_Init
MPI_Init(&argc,&argv)  // 也可以是NULL,NULL
// MPI_Finalize
MPI_Finalize

// 给rank赋值为进程号
int MPI_Comm_rank(MPI_Comm comm, int *rank)
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);

// 给size赋值通信域内总进程数
int MPI_Comm_size(MPI_Comm, int *size)
MPI_Comm_size(MPI_COMM_WORLD, &size);

// 发送函数,进程间发送消息。其中dest是接收的进程号。
// tag为信息标志,同为整型变量,发送和接收需要tag一致,这将可以区分同一目的地的不同消息。比如进程0给进程1分别发送了数据A和数据B,tag可分别定义成0和1,这样在进程1接收时同样设置tag0和1去接收,避免接收混乱。
// 缓冲区起始地址 发送数据个数 数据类型 目的进程标识号 消息标志 通信域
// 注意:是以数据类型为单位指定消息的长度
int MPI_Send(type* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)
    
// MPI_RECV 需要和MPI_SEND成对出现,
/**编程者要保证接收缓存区的长度不小于发送数据的长度
注意:最后有个status**/
int MPI_Recv(type* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) 

/**返回状态status。  也可以对status变量执行MPI_GET_COUNT调用可以得到接收到的消息的长度信息**/
MPI_Status status;
cout<<status.MPI_SOURSE<<status.MPI_TAG<<status.ERROR<<endl;
    
// scatter 对比, 是给很多进程分别发送count个消息。
int MPI_Scatter(type* send_buf, int count, MPI_Datatype, type *rec_buf, int count, MPI_Datatype, int tag, MPI_Comm comm)


简单的发送接收程序

#include<stdio.h>
#include<mpi.h>
#include<string.h>

int main(int argc, char **argv){
	char message[20];
	int myrank;
	MPI_Init(&argc,&argv); // MPI初始化 
	MPI_Comm_rank(MPI_COMM_WORLD,&myrank);  // 得到当前进程的标示 
	if(myrank == 0){
		/**
		发送数据,发送方和接收方必须在同一个通信域中,由通信域来统一协调和控制消息的发送和接收 
		**/
		strcpy(message, "Hello, process 1");
		MPI_Send(message, strlen(message),MPI_CHAR, 1, 99, MPI_COMM_WORLD);
	}
	else if(myrank == 1){
		/**
		进程1接收消息。使用message作为接收缓冲区。
		同一个变量在发送进程和接收进程中的作用是不同的。
		指定接收消息的最大长度 为20, 
		**/
		MPI_Status status;
		MPI_Recv(message, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD, &status);
		printf("received :%send",message);
	}
	MPI_Finalize();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值