MPI int mainint argc char argv MPIRequest req4
- Slides: 83
Алгоритм Якоби. MPI-версия int main(int argc, char **argv) { MPI_Request req[4]; int myrank, ranksize; int startrow, lastrow, nrow; MPI_Status status[4]; double t 1, t 2, time; MPI_Init (&argc, &argv); /* initialize MPI system */ MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /*my place in MPI system*/ MPI_Comm_size (MPI_COMM_WORLD, &ranksize); /* size of MPI system */ MPI_Barrier(MPI_COMM_WORLD); /* rows of matrix I have to process */ startrow = (myrank *L) / ranksize; lastrow = (((myrank + 1) * L) / ranksize)-1; nrow = lastrow - startrow + 1; m_printf("JAC 1 STARTEDn"); 25 октября Н. Новгород, 2010 DVM-технология разработки параллельных программ 7 из 83 Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Алгоритм Якоби. MPI-версия if(myrank!=0) MPI_Irecv(&A[0][0], L, MPI_DOUBLE, myrank-1, 1235, MPI_COMM_WORLD, &req[0]); if(myrank!=ranksize-1) MPI_Isend(&A[nrow][0], L, MPI_DOUBLE, myrank+1, 1235, MPI_COMM_WORLD, &req[2]); if(myrank!=ranksize-1) MPI_Irecv(&A[nrow+1][0], L, MPI_DOUBLE, myrank+1, 1236, MPI_COMM_WORLD, &req[3]); if(myrank!=0) MPI_Isend(&A[1][0], L, MPI_DOUBLE, myrank-1, 1236, MPI_COMM_WORLD, &req[1]); ll=4; shift=0; if (myrank==0) {ll=2; shift=2; } if (myrank==ranksize-1) {ll=2; } MPI_Waitall(ll, &req[shift], &status[0]); 25 октября Н. Новгород, 2010 DVM-технология разработки параллельных программ 10 из 83 Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Распределение данных. DISTRIBUTE DVM(DISTRIBUTE [BLOCK]) double A[12]; DVM(DISTRIBUTE [BLOCK]) double B[6]; DVM(DISTRIBUTE [MULT_BLOCK(3)]) double A[12]; node 1 node 2 node 3 node 4 A 0, 1, 2 3, 4, 5 6, 7, 8 9, 10, 11 B 0, 1 2, 3 4 5 double wb[6]={1. , 0. 5, 1. }; int bs[4]={2, 4, 4, 2}; DVM(DISTRIBUTE [GEN_BLOCK(bs)]) double A[12]; DVM(DISTRIBUTE [WGT_BLOCK(wb, 6)]) double B[6]; A B node 1 node 2 node 3 node 4 0, 1 2, 3, 4, 5 6, 7, 8, 9 10, 11 0 1, 2 3, 4 5 25 октября Н. Новгород, 2010 DVM-технология разработки параллельных программ 20 из 83 Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Удаленные данные типа REMOTE DVM (DISTRIBUTE [BLOCK]) float A 1[M][N 1+1], A 2[M 1+1][[N 2+1], A 3[M 2+1][N 2+1]; DVM (REMOTE_GROUP) void *RS; DO(ITER, 1, MIT, 1) {. . . DVM (PREFETCH RS); . . . DVM ( PARALLEL[i] ON A 1[i][N 1]; REMOTE_ACCESS RS: A 2[i][1]) DO(i, 0, M 1 -1, 1) A 1[i][N 1] = A 2[i][1]; DVM (PARALLEL[i] ON A 1[i][N 1]; REMOTE_ACCESS RS: A 3[i-M 1][1]) DO(i, M 1, M-1, 1) A 1[i][N 1] = A 3[i-M 1][1]; DVM (PARALLEL[i] ON A 2[i][0]; REMOTE_ACCESS RS: A 1[I][N 1 -1]) DO(i, 0, M 1 -1, 1) A 2[i][0] = A 1[i][N 1 -1]; DVM(PARALLEL[i] ON A 3[i][0]; REMOTE_ACCESS RS: A 1[I+M 1][N 1 -1]) DO (i, 0, M 2 -1, 1) A 3[i][0] = A 1[i+M 1][N 1 -1]; } 25 октября DVM-технология разработки параллельных программ 33 из 83 Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности» Н. Новгород, 2010
Cray MPI: параметры по умолчанию MPI Environment Variable Name 1, 000 PEs 10, 000 PEs 50, 000 PEs 100, 000 Pes MPI Environment Variable Name 128, 000 Bytes 20, 480 4096 2048 MPICH_UNEX_BUFFER_SIZE (The buffer allocated to hold the unexpected Eager data) 60 MB 150 MB 260 MB MPICH_PTL_UNEX_EVENTS (Portals generates two events for each unexpected message received) 20, 480 events 22, 000 110, 000 220, 000 MPICH_PTL_UNEX_EVENTS (Portals generates two events for each unexpected message received) 2048 events 2500 12, 500 25, 000 25 октября Н. Новгород, 2010 DVM-технология разработки параллельных программ 47 из 83 Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Алгоритм Якоби. MPI-версия int main(int argc, char **argv) { MPI_Request req[4]; int myrank, ranksize; int startrow, lastrow, nrow; MPI_Status status[4]; double t 1, t 2, time; MPI_Init (&argc, &argv); /* initialize MPI system */ MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /*my place in MPI system*/ MPI_Comm_size (MPI_COMM_WORLD, &ranksize); /* size of MPI system */ MPI_Barrier(MPI_COMM_WORLD); /* rows of matrix I have to process */ startrow = (myrank *L) / ranksize; lastrow = (((myrank + 1) * L) / ranksize)-1; nrow = lastrow - startrow + 1; m_printf("JAC 1 STARTEDn"); 25 октября Н. Новгород, 2010 DVM-технология разработки параллельных программ 52 из 83 Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Алгоритм Якоби. MPI-версия if(myrank!=0) MPI_Irecv(&A[0][0], L, MPI_DOUBLE, myrank-1, 1235, MPI_COMM_WORLD, &req[0]); if(myrank!=ranksize-1) MPI_Isend(&A[nrow][0], L, MPI_DOUBLE, myrank+1, 1235, MPI_COMM_WORLD, &req[2]); if(myrank!=ranksize-1) MPI_Irecv(&A[nrow+1][0], L, MPI_DOUBLE, myrank+1, 1236, MPI_COMM_WORLD, &req[3]); if(myrank!=0) MPI_Isend(&A[1][0], L, MPI_DOUBLE, myrank-1, 1236, MPI_COMM_WORLD, &req[1]); ll=4; shift=0; if (myrank==0) {ll=2; shift=2; } if (myrank==ranksize-1) {ll=2; } MPI_Waitall(ll, &req[shift], &status[0]); 25 октября Н. Новгород, 2010 DVM-технология разработки параллельных программ 55 из 83 Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Алгоритм Якоби. MPI-версия int main(int argc, char **argv) { MPI_Request req[8]; int myrank, ranksize; int srow, lrow, nrow, scol, lcol, ncol; MPI_Status status[8]; double t 1; int isper[] = {0, 0}; int dim[2]; int coords[2]; MPI_Comm newcomm; MPI_Datatype vectype; int pleft, pright, pdown, pup; MPI_Init (&argc, &argv); /* initialize MPI system */ MPI_Comm_size (MPI_COMM_WORLD, &ranksize); /* size of MPI system */ MPI_Comm_rank (MPI_COMM_WORLD, &myrank); /* my place in MPI system */ 25 октября Н. Новгород, 2010 DVM-технология разработки параллельных программ 59 из 83 Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Алгоритм Якоби. MPI-версия dim[0]=ranksize/LC; dim[1]=LC; if ((L%dim[0])||(L%dim[1])) { m_printf("ERROR: array[%d*%d] is not distributed on %d*%d processorsn", L, L, dim[0], dim[1]); MPI_Finalize(); exit(1); } MPI_Cart_create(MPI_COMM_WORLD, 2, dim, isper, 1, &newcomm); MPI_Cart_shift(newcomm, 0, 1, &pup, &pdown); MPI_Cart_shift(newcomm, 1, 1, &pleft, &pright); MPI_Comm_rank (newcomm, &myrank); /* my place in MPI system */ MPI_Cart_coords(newcomm, myrank, 2, coords); 25 октября Н. Новгород, 2010 DVM-технология разработки параллельных программ 60 из 83 Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Алгоритм Якоби. MPI-версия /* rows of matrix I have to process */ srow = (coords[0] * L) / dim[0]; lrow = (((coords[0] + 1) * L) / dim[0])-1; nrow = lrow - srow + 1; /* columns of matrix I have to process */ scol = (coords[1] * L) / dim[1]; lcol = (((coords[1] + 1) * L) / dim[1])-1; ncol = lcol - scol + 1; MPI_Type_vector(nrow, 1, ncol+2, MPI_DOUBLE, &vectype); MPI_Type_commit(&vectype); m_printf("JAC 2 STARTED on %d*%d processors with %d*%d array, it=%dn", dim[0], dim[1], L, L, ITMAX); /* dynamically allocate data structures */ A = malloc ((nrow+2) * (ncol+2) * sizeof(double)); B = malloc (nrow * ncol * sizeof(double)); 25 октября Н. Новгород, 2010 DVM-технология разработки параллельных программ 61 из 83 Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Алгоритм Якоби. MPI-версия MPI_Irecv(&A[0][1], ncol, MPI_DOUBLE, pup, 1235, MPI_COMM_WORLD, &req[0]); MPI_Isend(&A[nrow][1], ncol, MPI_DOUBLE, pdown, 1235, MPI_COMM_WORLD, &req[1]); MPI_Irecv(&A[nrow+1][1], ncol, MPI_DOUBLE, pdown, 1236, MPI_COMM_WORLD, &req[2]); MPI_Isend(&A[1][1], ncol, MPI_DOUBLE, pup, 1236, MPI_COMM_WORLD, &req[3]); MPI_Irecv(&A[1][0], 1, vectype, pleft, 1237, MPI_COMM_WORLD, &req[4]); MPI_Isend(&A[1][ncol], 1, vectype, pright, 1237, MPI_COMM_WORLD, &req[5]); MPI_Irecv(&A[1][ncol+1], 1, vectype, pright, 1238, MPI_COMM_WORLD, &req[6]); MPI_Isend(&A[1][1], 1, vectype, pleft, 1238, MPI_COMM_WORLD, &req[7]); MPI_Waitall(8, req, status); 25 октября Н. Новгород, 2010 DVM-технология разработки параллельных программ 63 из 83 Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Алгоритм Якоби. MPI/Open. MP-версия #pragma omp barrier #pragma omp single { if(myrank!=0) MPI_Irecv(&A[0][0], L, MPI_DOUBLE, myrank-1, 1235, MPI_COMM_WORLD, &req[0]); if(myrank!=ranksize-1) MPI_Isend(&A[nrow][0], L, MPI_DOUBLE, myrank+1, 1235, MPI_COMM_WORLD, &req[2]); if(myrank!=ranksize-1) MPI_Irecv(&A[nrow+1][0], L, MPI_DOUBLE, myrank+1, 1236, MPI_COMM_WORLD, &req[3]); if(myrank!=0) MPI_Isend(&A[1][0], L, MPI_DOUBLE, myrank-1, 1236, MPI_COMM_WORLD, &req[1]); ll=4; shift=0; if (myrank==0) {ll=2; shift=2; } if (myrank==ranksize-1) {ll=2; } MPI_Waitall(ll, &req[shift], &status[0]); 25 октября } Н. Новгород, 2010 DVM-технология разработки параллельных программ 66 из 83 Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
Алгоритм Якоби. DVM/Open. MP-версия PROGRAM JAC_Open. MP_DVM PARAMETER REAL (L=1000, ITMAX=100) A(L, L), B(L, L) CDVM$ DISTRIBUTE ( BLOCK, BLOCK) : : A CDVM$ ALIGN B(I, J) WITH A(I, J) PRINT *, '***** TEST_JACOBI *****' C$OMP PARALLEL DEFAULT(NONE ) SHARED(A, B) PRIVATE(IT, I, J) DO IT = 1, ITMAX CDVM$ PARALLEL (J, I) ON A(I, J) DO J = 2, L-1 C$OMP DO DO I = 2, L-1 A(I, J) = B(I, J) ENDDO C$OMP 25 октября Н. Новгород, 2010 ENDDO NOWAIT ENDDO DVM-технология разработки параллельных программ 69 из 83 Всероссийская школа «Суперкомпьютерные технологии в образовании, науке и промышленности»
- Int main int argc char argv
- Include
- Glutinit(&argc, argv);
- Sum0
- Char argv
- Char argv
- Inheritance calculator
- Public void drawsquare(int x, int y, int len)
- Divideint
- Int max(int x int y)
- Const int size=18; string *tbl2 = new string[size];
- Auto break case char
- Char int long
- Long char
- Short long double float
- Int (*)(bool, char)
- 아두이노 const int
- V int
- Bool 1
- Int char float
- Int ival char cval
- Char ch int i scanf c&i
- Int char float
- Char short int
- Argc
- Void swap(int a int b)
- #include stdio.h void main()
- Void
- 7팩토리얼
- Int main() int num=4
- Max int
- Interface myinterface int foo(int x)
- What is mpi
- Mpibcast
- Mpi
- Mpi salary bands
- Fuel injection system in petrol engine
- Open fabric interface
- Mpi quiz
- Mpi china
- Mpi trezor
- Mpi basics
- Mpi fault tolerance
- Mpi quiz
- Mpi mission
- Mpi
- Wida performance indicators
- Mpi
- Mpi java tutorial
- Intel mpi benchmark
- Mpi time measure
- Pvm mpi
- Perangkat lunak pvm (parallel virtual machine) bersifat
- Transient vs persistent communication
- Mpi_min
- Unpathetic freightment
- Mpi_type_vector
- Mpi
- Wida mpi template
- Mpi sdk
- Mpi
- Mpi_wait example
- Mpi parallel programming in c
- Hotel mpi
- Mpi wax
- Message passing interface tutorial
- Revpar adalah
- Bubble sort parallel programming
- Mpi alternatives
- Language domains wida
- Mpi send receive example
- Mpi dfw
- Mpi morris
- Mpi 5001
- #include "mpi.h"
- Mpi wtime
- Allreduce
- Squidward age
- Byte character
- Char map
- V char
- 1 char kaç byte
- String em c
- Huma char