赞
踩
个人主页:丷从心·
系列专栏:并行计算
#include <stdio.h> #include <string.h> #include <mpi.h> const int MAX_STRING = 100; int main(void) { char greeting[MAX_STRING]; int comm_sz; int my_rank; MPI_Init(NULL, NULL); MPI_Comm_size(MPI_COMM_WORLD, &comm_sz); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); if (my_rank != 0) { sprintf(greeting, "Greetings from process %d of %d!", my_rank, comm_sz); MPI_Send(greeting, strlen(greeting) + 1, MPI_CHAR, 0, 0, MPI_COMM_WORLD); } else { printf("Greetings from process %d of %d!\n", my_rank, comm_sz); for (int q = 1; q < comm_sz; q++) { MPI_Recv(greeting, MAX_STRING, MPI_CHAR, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, MPI_STATUS_IGNORE); printf("%s\n", greeting); } } MPI_Finalize(); return 0; }
mpicc -g -Wall -o mpi_hello mpi_hello.c
mpiexec -n 4 ./mpi_hello
MPI_COMM_WORLD
tag
是个非负int
型,用于区分看上去完全一样的消息,例如tag
为
0
0
0表示消息用于打印,tag
为
1
1
1表示消息用于计算MPI_Status
是一个有至少三个成员MPI_SOURCE
、MPI_TAG
、MPI_ERROR
的结构MPI_Get_count
函数找回这个值int MPI_Get_count(MPI_Status* status_p, MPI_Datatype type, int* count_p)
MPI_Send()
典型的实现方法有一个默认的消息截止大小,如果一条消息的大小小于截止大小,它将被缓冲;如果大于截止大小,那么MPI_Send()
函数将被阻塞MPI_Send()
发生了阻塞,并且没有相匹配的接收,那么发送进程就悬挂;如果调用MPI_Send()
被缓冲,但没有相匹配的接收,那么消息将被丢失Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。