- MPI_Bcast(buffer,count,datatype,root,MPI_COMM)
- MPI_Gather(send_buf,send_cnt,send_type,recv_buf,recv_cnt,recv_type,root,MPI_COMM)
- MPI_Scatter(send_buf,send_cnt,send_type,recv_buf,recv_cnt,recv_type,root,MPI_COMM)
- MPI_Reduce(send_buf,recv_buf,count,data_type,operation,root,MPI_COMM)
- MPI_Alltoall(send_buf,send_cnt,send_type,recv_buf,recv_cnt,recv_type,MPI_COMM)
- MPI_Allgather= gather+ broadcast
- MPI_Allreduce= reduce + broadcast
집합통신에서 따로 tag는 포함되지 않고, 커뮤니케이터 안에서 모든 프로세스들이 참여하게 된다.
*MPI_REDUCE의 연산 : MPI_Reduce 할 때 실행되는 연산은 associative operation이다. 즉, 순서에 상관없이 계산이 똑같다는 것을 의미한다. 따라서 뺄셈과 나눗셈은 계산될 수 없다.
Operator | Operation |
MPI_MAX | maximum value |
MPI_MIN | minimum value |
MPI_SUM | sum |
MPI_PROD | product |
MPI_LAND | logical and |
MPI_BAND | bit-wise and |
MPI_LOR | logical or |
MPI_BOR | bit-wise or |
1. 예제 코드: data의 합을 프로세스들이 나눠서 총 합을 계산하는 프로그램
#include<stdio.h>
#include<mpi.h>
#define MAXSIZE 1000
void main(){
int myid, numprocs,i,x,low,high,myresult,result;
int data[MAXSIZE];
MPI_Init(NULL,NULL);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
if(myid==0)
fir(i=0;i<MAXSIZE;i++)
data[i]=i;
MPI_Bcast(data,MAXSIZE,MPI_INT,0,MPI_COMM_WORLD);
x=MAXSIZE/numprocs;
low=myid*x;
high=low+x;
myresult=0;
result=0;
for(i=low;i<high;i++)
myresult+=data[i];
MPI_Reduce(&myresult,&result,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);
if(myid==0)
printf("sum=%d",result);
MPI_Finalize();
}
2. 예제코드: 프로세스들이 일을 나누어 홀수의 개수를 세는 프로그램
#include <mpi.h>
#include <stdio.h>
#define MAXSIZE 1000
void main(int argc, char *argv){
int myid,numprocs;
int a[MAXSIZE];
int b[MAXSIZE]={0,};
int i,j;
int count=0;
int tmp=0;
MPI_Init(NULL,NULL);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
if(myid==0) for(i=0;i<MAXSIZE;i++) a[i]=i;
MPI_Scatter(a, MAXSIZE/numprocs,MPI_INT,b,MAXSIZE/numprocs,MPI_INT,0,MPI_COMM_WORLD);
for(j=0;j<=MAXSIZE/numprocs;j++)
if(b[j]%2!=0)
count++;
MPI_Reduce(&count,&tmp,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);
count=tmp;
if(myid==0){
printf("%d",count);
}
MPI_Finalize();
}
'Cloud Computing' 카테고리의 다른 글
12. 공유메모리 프로그래밍-Pthreads (2) | 2020.12.08 |
---|---|
10. 병렬프로그래밍: 병렬화가 잘되는 경우 (Embarrassingly Parallel Computations) (0) | 2020.10.22 |
8. MPI프로그램 1:1 통신모드 (1:1 Communication Modes) (6) | 2020.10.21 |
7. MPI 프로그램 기본예제(Send, Receive) (8) | 2020.10.21 |
6. MPI program: Coding, Compile, and Run (0) | 2020.10.21 |