SPMD (Single Program Multiple Data), .
. , , . (Single program - Multiple Data) [1,12].
#include <mpi.h>
#include <stdlib.h>
#include <stdio.h>
void main(int argc, char *argv[ ]){
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
If (myid == 0){/* . */ }
if (myid == 0) { /* . */ } MPI_Finalize();}
3. 2*sin(x) ң [0,1] ̆қ ң.
2*sin(x) [0,1].
double f(double x)
{return 2*sin(x);}
int main(int argc,char **argv)
{ int size,rank; MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
float h=0.05,a=0,b=1,s=0.0;
for(int i=rank; a+h*(i+1)<b+h; i+=size)
{ s+=h*f(a+h*(i+1)); }
if(rank!=0) {
MPI_Send(&s,1,MPI_FLOAT,0,1,MPI_COMM_WORLD); }
if(rank==0) { float r;
MPI_Recv(&r,1,MPI_FLOAT,1,1,MPI_COMM_WORLD,&status); s+=r;
printf("s=%f\n ",s); }}
. . .
- . , (, /), , . α. T1. p : (1)
: S= (2)
, . : E= (3)
, α :
S= = (4)