‫درس‬5–‫توزیع‬
‫شدگی‬
MPI
Fundamentals of Parallelism & Code Optimization
(C/C++,Fortran) for Data Science with MPI
‫در‬ ‫کدها‬ ‫سازی‬ ‫بهینه‬ ‫و‬ ‫سازی‬ ‫موازی‬ ‫مبانی‬
‫زبانهای‬
C/C++,Fortran‫در‬ ‫حجیم‬ ‫هاي‬ ‫داده‬ ‫براي‬MPI
Amin Nezarat (Ph.D.)
Assistant Professor at Payame Noor University
aminnezarat@gmail.com www.astek.ir - www.hpclab.ir
‫عناوین‬
‫دوره‬
1.‫های‬ ‫پردازنده‬ ‫معماری‬ ‫با‬ ‫آشنایی‬
‫اینتل‬
2.Vectorization‫معماری‬ ‫در‬
‫اینتل‬ ‫کامپایلرهای‬
3.‫نویسی‬ ‫برنامه‬ ‫با‬ ‫کار‬ ‫و‬ ‫آشنایی‬
‫در‬OpenMP
4.‫با‬ ‫داده‬ ‫تبادل‬ ‫قواعد‬ ‫و‬ ‫اصول‬
‫حافظه‬(Memory Traffic)
‫کالسترهای‬
‫محاسباتی‬
‫کالسترها‬
‫های‬ ‫شبکه‬ ‫از‬ ‫معمول‬ ‫طور‬ ‫به‬ ‫کالسترها‬Gig. Ethernet,
Infiniband, Intel Omni-Path‫ها‬ ‫گره‬ ‫بین‬ ‫ارتباط‬ ‫مدیریت‬ ‫برای‬
‫کنند‬ ‫می‬ ‫استفاده‬
‫نویسی‬ ‫برنامه‬ ‫های‬ ‫الیه‬
‫موازی‬
Message Passing Interface
Message Passing Interface - MPI
-‫محاسباتی‬ ‫مدل‬
‫توزیع‬ ‫حافظه‬
‫شده‬
-‫چند‬ ‫محاسبه‬
‫ای‬ ‫پردازنده‬
‫حافظه‬ ‫در‬
-‫جابجایی‬
‫پذیری‬
-‫کارا‬
-‫شده‬ ‫طراحی‬
‫برای‬
‫محاسبات‬
-‫دارای‬
‫قابلیتهایی‬
‫تبادل‬ ‫برای‬
‫پیام‬
-‫سازی‬ ‫پیاده‬
‫مختلفی‬ ‫های‬
‫ترکیب‬MPI+OpenMP
Necessary for multi-core CPUsWorks for low core counts
‫شبکه‬ ‫کارت‬HPC‫اینتل‬
Intel Omni-Path Architecture‫باند‬ ‫پهناد‬ ،‫کم‬ ‫تاخیر‬
‫پذیر‬ ‫مقیاس‬ ،‫زیاد‬
Discrete Integrated
‫برنامه‬ ‫نمونه‬ ‫یک‬ ‫ساختار‬MPI–
Hello World
#include "mpi.h"
#include <cstdio>
int main (int argc, char *argv[]) {
MPI_Init (&argc, &argv); // Initialize MPI envirnmnt
int rank, size, namelen;
char name[MPI_MAX_PROCESSOR_NAME];
MPI_Comm_rank (MPI_COMM_WORLD, &rank); // ID of current process
MPI_Get_processor_name (name, &namelen); // Hostname of node
MPI_Comm_size (MPI_COMM_WORLD, &size); // Number of processes printf
("Hello World from rank %d running on %s!n", rank, name);
if (rank == 0) printf("MPI World size = %d processesn", size);
MPI_Finalize (); // Terminate MPI environment
}
‫توابع‬ ‫از‬ ‫لیستی‬MPI‫سایت‬ ‫در‬ ‫توانید‬ ‫می‬ ‫را‬MPICH‫ببینید‬
1
2
3
4
5
6
7
8
9
10
11
12
13
‫اجرا‬ ‫و‬ ‫کامپایل‬
‫با‬MPI
‫برنامه‬ ‫کامپایل‬Hello
World‫با‬MPI
amin@astek% mpiicpc -o HelloMPI.out HelloMPI.cc
#PBS -l nodes=1
cd $PBS_O_WORKDIR
mpirun -host machinename -np 2 ./HelloMPI.out
amin@astek% qsub myjob.pbs 2000
amin@astek% cat mympi.o2000
Hello World from rank 1 running on c005-n001!
Hello World from rank 0 running on c005-n001!
MPI World size = 2 processes
Command file myjob.pbs:
Results:
‫برنامه‬ ‫اجرای‬MPI‫روی‬
‫سیستم‬ ‫چندین‬
#PBS -l nodes=2
cd $PBS_O_WORKDIR cat
$PBS_NODEFILE
mpirun -machinefile $PBS_NODEFILE ./HelloMPI.out
amin@astek% qsub mydistmpijob.pbs
2001
amin@astek% cat mydistmpi.o2001 c005-n001
c005-n002
Hello World from rank 1 running on c005-n002!
Hello World from rank 0 running on c005-n001!
MPI World size = 2 processes
Command file mydistmpijob.pbs:
Peer to Peer Messaging
‫نقطه‬ ‫به‬ ‫نقطه‬ ‫تبادل‬
if (rank == sender) {
char outMsg[msgLen];
strcpy(outMsg, "Hi There!");
MPI_Send(&outMsg, msgLen, MPI_CHAR, receiver, tag, MPI_COMM_WORLD);
}
else if (rank == receiver) {
char inMsg[msgLen];
MPI_Recv (&inMsg, msgLen, MPI_CHAR, sender, tag, MPI_COMM_WORLD,
&stat);
printf ("Received message with tag %d: ’%s’n", tag, inMsg);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
Collective Communication
‫سازی‬ ‫موازی‬ ‫الگوهای‬
‫تجمعی‬ ‫ارتباطات‬ ‫برای‬ ‫مرسوم‬ ‫سازی‬ ‫موازی‬ ‫الگوهای‬
‫سازی‬ ‫موازی‬ ‫الگوهای‬-
‫ادامه‬
‫تجمعی‬ ‫ارتباطات‬ ‫برای‬ ‫مرسوم‬ ‫سازی‬ ‫موازی‬ ‫الگوهای‬
‫الگوی‬Broadcast
int MPI_Bcast( void *buffer, int count, MPI_Datatype datatype,
int root, MPI_Comm comm );
‫الگوی‬Scatter
int MPI_Scatter(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *rec
int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm);
‫الگوی‬Gather
int MPI_Gather(void *sendbuf, int sendcnt, MPI_Datatype sendtype,
void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm
‫الگوی‬Reduction
int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatyp
MPI_Op op, int root, MPI_Comm comm);
‫عملیاتهای‬Reduction‫دسترس‬ ‫قابل‬:
max/min, minloc/maxloc, sum, product, AND, OR, XOR
(logical or bitwise)
Network Architecture
‫در‬ ‫شبکه‬ ‫معماری‬
‫ابرکامپیوترها‬
‫می‬ ‫ابرکامپیوترها‬ ‫در‬ ‫فیزیکی‬ ‫و‬ ‫منطقی‬ ‫های‬ ‫شبکه‬
‫شوند‬ ‫طراحی‬ ‫مختلفی‬ ‫اشکال‬ ‫به‬ ‫توانند‬.
‫بر‬ ‫مبتنی‬ ‫معماری‬Ring
‫بر‬ ‫مبتنی‬ ‫معماری‬ ‫ترین‬ ‫ساده‬Ring‫سه‬ ‫که‬ ‫است‬
‫کنید‬ ‫می‬ ‫مشاهده‬ ‫را‬ ‫آن‬ ‫از‬ ‫مدل‬
‫بر‬ ‫مبتنی‬ ‫معماری‬Mesh
‫مبتنی‬ ‫بعدی‬ ‫پیچیده‬ ‫معماری‬Mesh‫ترین‬ ‫ساده‬ ‫در‬ ‫که‬ ‫است‬
‫یک‬ ‫حالت‬grid‫یک‬ ‫خود‬ ‫پیچیده‬ ‫مدل‬ ‫در‬ ‫و‬ ‫سازد‬ ‫می‬ ‫را‬torii‫یا‬
‫همان‬Plural of torus‫است‬
‫بر‬ ‫مبتنی‬ ‫معماری‬Cube
‫بر‬ ‫مبتنی‬ ‫است‬ ‫پرکاربرد‬ ‫که‬ ‫دیگری‬ ‫معماری‬Cube‫است‬.
Cycle Connected Cube(CCC)Cube
‫معماری‬ ‫پیچیدگی‬ ‫درجه‬
‫ها‬
‫که‬ ‫صورتی‬ ‫در‬p‫و‬ ‫ها‬ ‫پردازنده‬ ‫تعداد‬D‫معماری‬ ‫پراکندگی‬ ‫درجه‬
‫بود‬ ‫خواهد‬ ‫زیر‬ ‫جدول‬ ‫مطابق‬ ‫پیچیدگی‬ ‫درجه‬ ،‫باشد‬ ‫ها‬
‫در‬ ‫داده‬ ‫تقسیم‬ ‫از‬ ‫مثالی‬
Cube‫ها‬
‫یک‬ ‫در‬Hyper-Cube‫خاصی‬ ‫روش‬ ‫اساس‬ ‫بر‬ ‫محاسباتی‬ ‫های‬ ‫گره‬
‫بین‬ ‫ها‬ ‫گره‬ ‫همسایگی‬ ‫اساس‬ ‫بر‬ ‫ها‬ ‫داده‬ ‫و‬ ‫شده‬ ‫گذاری‬ ‫شماره‬
‫شوند‬ ‫می‬ ‫تقسیم‬ ‫آنها‬
4D-Hyper-Cube
Broadcasting a message
‫در‬ ‫داده‬ ‫تقسیم‬ ‫از‬ ‫مثالی‬
Cube‫ها‬-‫ادامه‬
‫یک‬ ‫در‬Hyper-Cube‫شماره‬ ‫خاصی‬ ‫روش‬ ‫اساس‬ ‫بر‬ ‫محاسباتی‬ ‫های‬ ‫گره‬
‫آنها‬ ‫بین‬ ‫ها‬ ‫گره‬ ‫همسایگی‬ ‫اساس‬ ‫بر‬ ‫ها‬ ‫داده‬ ‫و‬ ‫شده‬ ‫گذاری‬
‫شوند‬ ‫می‬ ‫تقسیم‬
Broadcasting a message
‫یک‬ ‫نگاشت‬Cube‫به‬Tree
‫از‬ ‫پیام‬ ‫ارسال‬ ‫الگوریتم‬ ‫سازی‬ ‫پیاده‬ ‫و‬ ‫فهم‬ ‫سادگی‬ ‫برای‬
‫به‬ ‫نگاشتی‬ ‫توان‬ ‫می‬ ‫ها‬ ‫گره‬ ‫سایر‬ ‫به‬ ‫مستر‬ ‫گره‬tree‫داشته‬
‫باشیم‬
‫مثال‬:Stencil Code
Game of Life
‫عملگرهای‬Stencil
•‫معادالت‬ ‫خطی‬ ‫سیستمهای‬
•‫جزئی‬ ‫دیفرانسیل‬ ‫معادالت‬
Fluid dynamics, heat transfer, image processing (convolution matrix),
cellular automata.
‫لبه‬ ‫تشخیص‬
‫لبه‬ ‫تشخیص‬
Clustering with MPI
#PBS -l nodes=4:flat
cd $PBS_O_WORKDIR
mpirun -machinefile $PBS_NODEFILE ./stencil my-image.png
MPI_Comm_rank(MPI_COMM_WORLD, &myRank);
MPI_Comm_size(MPI_COMM_WORLD, &nRanks);
const double rowsPerProcess = double(height-2)/double(nRanks);
const int myFirstRow = 1 + int(rowsPerProcess*myRank);
const int myLastRow = 1 + int(rowsPerProcess*(myRank+1));
#pragma omp parallel for
for (int i = myFirstRow; i < myLastRow; i++)
...
1
2
3
4
5
6
7
8
9
‫عملکرد‬ ‫و‬ ‫کارایی‬
Game of Life
•‫دو‬ ‫در‬ ‫تواند‬ ‫می‬ ‫سلول‬ ‫هر‬ ،‫کنید‬ ‫ایجاد‬ ‫بعدی‬ ‫دو‬ ‫گرید‬ ‫یک‬
‫حالت‬alive‫یا‬dead‫باشد‬
•‫است‬ ‫مرتبط‬ ‫خود‬ ‫همسایه‬ ‫هشت‬ ‫با‬ ‫سلول‬ ‫هر‬
o‫از‬ ‫کمتر‬ ‫با‬ ‫سلول‬ ‫هر‬2‫مرد‬ ‫خواهد‬ ‫زنده‬ ‫همسایه‬
o‫با‬ ‫سلول‬ ‫هر‬2‫یا‬3‫نسل‬ ‫در‬ ‫تواند‬ ‫می‬ ‫زنده‬ ‫همسایه‬
‫بماند‬ ‫زنده‬ ‫هم‬ ‫بعد‬
o‫از‬ ‫بیش‬ ‫با‬ ‫سلول‬ ‫هر‬3‫مرد‬ ‫خواهد‬ ‫همسایه‬(‫ازدیاد‬
‫جمعیت‬)
o‫دارای‬ ‫که‬ ‫مرده‬ ‫سلول‬ ‫هر‬3‫می‬ ‫باشد‬ ‫زنده‬ ‫همسایه‬
‫زنده‬ ‫تواند‬‫شود‬
Game of Life
•‫الگوی‬ ‫در‬ ‫خوبی‬ ‫به‬ ‫مسئله‬ ‫این‬Stencil
‫شود‬ ‫می‬ ‫منطبق‬
•‫یک‬ ‫به‬ ‫را‬ ‫ماتریس‬ ‫زیر‬ ‫هر‬thread‫می‬
‫سپاریم‬
•‫ماتریس‬ ‫زیر‬ ‫مرز‬ ‫روی‬ ‫های‬ ‫سلول‬ ‫برای‬
‫افتاد؟‬ ‫خواهد‬ ‫اتفاقی‬ ‫چه‬
•Ghost Cells‫راهکارهای‬ ‫از‬ ‫یکی‬
‫است‬ ‫کاندید‬
•‫هر‬thread‫های‬ ‫داده‬ ‫از‬ ‫کپی‬ ‫یک‬
‫می‬ ‫نگه‬ ‫را‬ ‫خود‬ ‫های‬ ‫همسایه‬
‫دارد‬
•‫این‬Ghost Cells‫بار‬ ‫هر‬ ‫در‬ ‫باید‬
‫روز‬ ‫به‬ ،‫الگوریتم‬ ‫تکرار‬
Game of Life‫مقدار‬ ‫محاسبه‬
‫جدید‬
‫سلول‬ ‫این‬
‫تکرار‬ ‫اولین‬ ‫از‬ ‫بعد‬:
•PE0‫نتایج‬ ‫باید‬PE1,PE2‫را‬
‫کند‬ ‫درخواست‬
•PE0‫می‬ ‫انجام‬ ‫را‬ ‫بعدی‬ ‫تکرار‬
‫دهد‬
‫در‬ ‫بازرخداد‬ ‫سازی‬ ‫موازی‬
‫مسئله‬Stencil
•‫قبلی‬ ‫تکرارهای‬ ‫مقادیر‬ ‫به‬ ‫وابستگی‬ ‫حلقه‬ ‫مقادیر‬ ‫که‬ ‫مواقعی‬ ‫در‬
‫روش‬ ‫از‬ ‫توان‬ ‫می‬ ‫باشد‬ ‫داشته‬Recurrence‫کرد‬ ‫استفاده‬
‫مثال‬:‫انتگرال‬
‫عددی‬
‫متد‬Midpoint Rectangle
‫گره‬ ‫یک‬ ‫در‬ ‫سازی‬ ‫پیاده‬
‫با‬OpenMP
const double dx = a/(double)n;
double integral = 0.0;
#pragma omp parallel for simd reduction(+: integral)
for (int i = 0; i < n; i++) {
const double xip12 = dx*((double)i + 0.5);
const double dI = BlackBoxFunction(xip12)*dx;
integral += dI;
}
1
2
3
4
5
6
7
8
9
‫گره‬ ‫چند‬ ‫سازی‬ ‫پیاده‬
‫ای‬
const int iStart = double(n)/double(nRanks)*double(rank);
const int iEnd = double(n)/double(nRanks)*double(rank+1);
const double dx = a/(double)n;
double integral_partial = 0.0, integral = 0.0;
#pragma omp parallel for simd reduction(+: integral_partial)
for (int i = iStart; i < iEnd; i++) {
const double xip12 = dx*((double)i + 0.5); const double dI =
BlackBoxFunction(xip12)*dx; integral_partial += dI;
}
MPI_Allreduce(&integral_partial, &integral, 1, MPI_DOUBLE, MPI_SUM,
MPI_COMM_WORLD);
1
2
3
4
5
6
7
8
9
10
11
12
13
‫عملکرد‬ ‫و‬ ‫کارایی‬
‫بیشتر‬ ‫یادگیری‬
‫توابع‬ ‫و‬ ‫مفاهیم‬MPI
Communication modes –(non-)blocking, (a)synchronous, ready mode
Message buffers – application, system, user space
Communicators, Groups –creation, manipulation, usage Data types –
built-in, derived
Collective communication –patterns
Hybrid programming –co-existence with threads: safety, performance One-
sided communication – remote memory access
Click for links from the MPI Forum.
More information in MPI tutorial from the LLNL
‫از‬ ‫ای‬ ‫خالصه‬MPI
•‫شده‬ ‫توزیع‬ ‫حافظه‬ ‫نویسی‬ ‫برنامه‬ ‫برای‬ ‫چارچوبی‬
•‫ها‬ ‫گره‬ ‫بین‬ ‫پیام‬ ‫تبادل‬ ‫پیچیدگی‬ ‫از‬ ‫زیادی‬ ‫بخش‬
‫است‬ ‫شده‬ ‫مخفی‬ ‫نویسان‬ ‫برنامه‬ ‫از‬
•‫توان‬ ‫می‬ ‫تجمعی‬ ‫تبادل‬ ‫نویسی‬ ‫برنامه‬ ‫مدلهای‬ ‫از‬
‫کرد‬ ‫استفاده‬
•‫برای‬ ‫محاسباتی‬ ‫سیستم‬ ‫چندین‬ ‫از‬ ‫استفاده‬ ‫امکان‬
‫کند‬ ‫می‬ ‫فراهم‬ ‫را‬ ‫شده‬ ‫توزیع‬ ‫الگوریتمهای‬ ‫اجرای‬
05 mpi fundamentals_of_parallelism_and_code_optimization-www.astek.ir

05 mpi fundamentals_of_parallelism_and_code_optimization-www.astek.ir

  • 1.
    ‫درس‬5–‫توزیع‬ ‫شدگی‬ MPI Fundamentals of Parallelism& Code Optimization (C/C++,Fortran) for Data Science with MPI ‫در‬ ‫کدها‬ ‫سازی‬ ‫بهینه‬ ‫و‬ ‫سازی‬ ‫موازی‬ ‫مبانی‬ ‫زبانهای‬ C/C++,Fortran‫در‬ ‫حجیم‬ ‫هاي‬ ‫داده‬ ‫براي‬MPI Amin Nezarat (Ph.D.) Assistant Professor at Payame Noor University aminnezarat@gmail.com www.astek.ir - www.hpclab.ir
  • 2.
    ‫عناوین‬ ‫دوره‬ 1.‫های‬ ‫پردازنده‬ ‫معماری‬‫با‬ ‫آشنایی‬ ‫اینتل‬ 2.Vectorization‫معماری‬ ‫در‬ ‫اینتل‬ ‫کامپایلرهای‬ 3.‫نویسی‬ ‫برنامه‬ ‫با‬ ‫کار‬ ‫و‬ ‫آشنایی‬ ‫در‬OpenMP 4.‫با‬ ‫داده‬ ‫تبادل‬ ‫قواعد‬ ‫و‬ ‫اصول‬ ‫حافظه‬(Memory Traffic)
  • 3.
  • 4.
    ‫کالسترها‬ ‫های‬ ‫شبکه‬ ‫از‬‫معمول‬ ‫طور‬ ‫به‬ ‫کالسترها‬Gig. Ethernet, Infiniband, Intel Omni-Path‫ها‬ ‫گره‬ ‫بین‬ ‫ارتباط‬ ‫مدیریت‬ ‫برای‬ ‫کنند‬ ‫می‬ ‫استفاده‬
  • 5.
  • 6.
  • 7.
    Message Passing Interface- MPI -‫محاسباتی‬ ‫مدل‬ ‫توزیع‬ ‫حافظه‬ ‫شده‬ -‫چند‬ ‫محاسبه‬ ‫ای‬ ‫پردازنده‬ ‫حافظه‬ ‫در‬ -‫جابجایی‬ ‫پذیری‬ -‫کارا‬ -‫شده‬ ‫طراحی‬ ‫برای‬ ‫محاسبات‬ -‫دارای‬ ‫قابلیتهایی‬ ‫تبادل‬ ‫برای‬ ‫پیام‬ -‫سازی‬ ‫پیاده‬ ‫مختلفی‬ ‫های‬
  • 8.
  • 9.
    ‫شبکه‬ ‫کارت‬HPC‫اینتل‬ Intel Omni-PathArchitecture‫باند‬ ‫پهناد‬ ،‫کم‬ ‫تاخیر‬ ‫پذیر‬ ‫مقیاس‬ ،‫زیاد‬ Discrete Integrated
  • 10.
    ‫برنامه‬ ‫نمونه‬ ‫یک‬‫ساختار‬MPI– Hello World #include "mpi.h" #include <cstdio> int main (int argc, char *argv[]) { MPI_Init (&argc, &argv); // Initialize MPI envirnmnt int rank, size, namelen; char name[MPI_MAX_PROCESSOR_NAME]; MPI_Comm_rank (MPI_COMM_WORLD, &rank); // ID of current process MPI_Get_processor_name (name, &namelen); // Hostname of node MPI_Comm_size (MPI_COMM_WORLD, &size); // Number of processes printf ("Hello World from rank %d running on %s!n", rank, name); if (rank == 0) printf("MPI World size = %d processesn", size); MPI_Finalize (); // Terminate MPI environment } ‫توابع‬ ‫از‬ ‫لیستی‬MPI‫سایت‬ ‫در‬ ‫توانید‬ ‫می‬ ‫را‬MPICH‫ببینید‬ 1 2 3 4 5 6 7 8 9 10 11 12 13
  • 11.
  • 12.
    ‫برنامه‬ ‫کامپایل‬Hello World‫با‬MPI amin@astek% mpiicpc-o HelloMPI.out HelloMPI.cc #PBS -l nodes=1 cd $PBS_O_WORKDIR mpirun -host machinename -np 2 ./HelloMPI.out amin@astek% qsub myjob.pbs 2000 amin@astek% cat mympi.o2000 Hello World from rank 1 running on c005-n001! Hello World from rank 0 running on c005-n001! MPI World size = 2 processes Command file myjob.pbs: Results:
  • 13.
    ‫برنامه‬ ‫اجرای‬MPI‫روی‬ ‫سیستم‬ ‫چندین‬ #PBS-l nodes=2 cd $PBS_O_WORKDIR cat $PBS_NODEFILE mpirun -machinefile $PBS_NODEFILE ./HelloMPI.out amin@astek% qsub mydistmpijob.pbs 2001 amin@astek% cat mydistmpi.o2001 c005-n001 c005-n002 Hello World from rank 1 running on c005-n002! Hello World from rank 0 running on c005-n001! MPI World size = 2 processes Command file mydistmpijob.pbs:
  • 14.
    Peer to PeerMessaging
  • 15.
    ‫نقطه‬ ‫به‬ ‫نقطه‬‫تبادل‬ if (rank == sender) { char outMsg[msgLen]; strcpy(outMsg, "Hi There!"); MPI_Send(&outMsg, msgLen, MPI_CHAR, receiver, tag, MPI_COMM_WORLD); } else if (rank == receiver) { char inMsg[msgLen]; MPI_Recv (&inMsg, msgLen, MPI_CHAR, sender, tag, MPI_COMM_WORLD, &stat); printf ("Received message with tag %d: ’%s’n", tag, inMsg); } 1 2 3 4 5 6 7 8 9 10 11 12 13
  • 16.
  • 17.
    ‫سازی‬ ‫موازی‬ ‫الگوهای‬ ‫تجمعی‬‫ارتباطات‬ ‫برای‬ ‫مرسوم‬ ‫سازی‬ ‫موازی‬ ‫الگوهای‬
  • 18.
    ‫سازی‬ ‫موازی‬ ‫الگوهای‬- ‫ادامه‬ ‫تجمعی‬‫ارتباطات‬ ‫برای‬ ‫مرسوم‬ ‫سازی‬ ‫موازی‬ ‫الگوهای‬
  • 19.
    ‫الگوی‬Broadcast int MPI_Bcast( void*buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm );
  • 20.
    ‫الگوی‬Scatter int MPI_Scatter(void *sendbuf,int sendcnt, MPI_Datatype sendtype, void *rec int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm);
  • 21.
    ‫الگوی‬Gather int MPI_Gather(void *sendbuf,int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm
  • 22.
    ‫الگوی‬Reduction int MPI_Reduce(void *sendbuf,void *recvbuf, int count, MPI_Datatype datatyp MPI_Op op, int root, MPI_Comm comm); ‫عملیاتهای‬Reduction‫دسترس‬ ‫قابل‬: max/min, minloc/maxloc, sum, product, AND, OR, XOR (logical or bitwise)
  • 23.
  • 24.
    ‫در‬ ‫شبکه‬ ‫معماری‬ ‫ابرکامپیوترها‬ ‫می‬‫ابرکامپیوترها‬ ‫در‬ ‫فیزیکی‬ ‫و‬ ‫منطقی‬ ‫های‬ ‫شبکه‬ ‫شوند‬ ‫طراحی‬ ‫مختلفی‬ ‫اشکال‬ ‫به‬ ‫توانند‬.
  • 25.
    ‫بر‬ ‫مبتنی‬ ‫معماری‬Ring ‫بر‬‫مبتنی‬ ‫معماری‬ ‫ترین‬ ‫ساده‬Ring‫سه‬ ‫که‬ ‫است‬ ‫کنید‬ ‫می‬ ‫مشاهده‬ ‫را‬ ‫آن‬ ‫از‬ ‫مدل‬
  • 26.
    ‫بر‬ ‫مبتنی‬ ‫معماری‬Mesh ‫مبتنی‬‫بعدی‬ ‫پیچیده‬ ‫معماری‬Mesh‫ترین‬ ‫ساده‬ ‫در‬ ‫که‬ ‫است‬ ‫یک‬ ‫حالت‬grid‫یک‬ ‫خود‬ ‫پیچیده‬ ‫مدل‬ ‫در‬ ‫و‬ ‫سازد‬ ‫می‬ ‫را‬torii‫یا‬ ‫همان‬Plural of torus‫است‬
  • 27.
    ‫بر‬ ‫مبتنی‬ ‫معماری‬Cube ‫بر‬‫مبتنی‬ ‫است‬ ‫پرکاربرد‬ ‫که‬ ‫دیگری‬ ‫معماری‬Cube‫است‬. Cycle Connected Cube(CCC)Cube
  • 28.
    ‫معماری‬ ‫پیچیدگی‬ ‫درجه‬ ‫ها‬ ‫که‬‫صورتی‬ ‫در‬p‫و‬ ‫ها‬ ‫پردازنده‬ ‫تعداد‬D‫معماری‬ ‫پراکندگی‬ ‫درجه‬ ‫بود‬ ‫خواهد‬ ‫زیر‬ ‫جدول‬ ‫مطابق‬ ‫پیچیدگی‬ ‫درجه‬ ،‫باشد‬ ‫ها‬
  • 29.
    ‫در‬ ‫داده‬ ‫تقسیم‬‫از‬ ‫مثالی‬ Cube‫ها‬ ‫یک‬ ‫در‬Hyper-Cube‫خاصی‬ ‫روش‬ ‫اساس‬ ‫بر‬ ‫محاسباتی‬ ‫های‬ ‫گره‬ ‫بین‬ ‫ها‬ ‫گره‬ ‫همسایگی‬ ‫اساس‬ ‫بر‬ ‫ها‬ ‫داده‬ ‫و‬ ‫شده‬ ‫گذاری‬ ‫شماره‬ ‫شوند‬ ‫می‬ ‫تقسیم‬ ‫آنها‬ 4D-Hyper-Cube Broadcasting a message
  • 30.
    ‫در‬ ‫داده‬ ‫تقسیم‬‫از‬ ‫مثالی‬ Cube‫ها‬-‫ادامه‬ ‫یک‬ ‫در‬Hyper-Cube‫شماره‬ ‫خاصی‬ ‫روش‬ ‫اساس‬ ‫بر‬ ‫محاسباتی‬ ‫های‬ ‫گره‬ ‫آنها‬ ‫بین‬ ‫ها‬ ‫گره‬ ‫همسایگی‬ ‫اساس‬ ‫بر‬ ‫ها‬ ‫داده‬ ‫و‬ ‫شده‬ ‫گذاری‬ ‫شوند‬ ‫می‬ ‫تقسیم‬ Broadcasting a message
  • 31.
    ‫یک‬ ‫نگاشت‬Cube‫به‬Tree ‫از‬ ‫پیام‬‫ارسال‬ ‫الگوریتم‬ ‫سازی‬ ‫پیاده‬ ‫و‬ ‫فهم‬ ‫سادگی‬ ‫برای‬ ‫به‬ ‫نگاشتی‬ ‫توان‬ ‫می‬ ‫ها‬ ‫گره‬ ‫سایر‬ ‫به‬ ‫مستر‬ ‫گره‬tree‫داشته‬ ‫باشیم‬
  • 32.
  • 33.
    ‫عملگرهای‬Stencil •‫معادالت‬ ‫خطی‬ ‫سیستمهای‬ •‫جزئی‬‫دیفرانسیل‬ ‫معادالت‬ Fluid dynamics, heat transfer, image processing (convolution matrix), cellular automata.
  • 34.
  • 35.
    ‫لبه‬ ‫تشخیص‬ Clustering withMPI #PBS -l nodes=4:flat cd $PBS_O_WORKDIR mpirun -machinefile $PBS_NODEFILE ./stencil my-image.png MPI_Comm_rank(MPI_COMM_WORLD, &myRank); MPI_Comm_size(MPI_COMM_WORLD, &nRanks); const double rowsPerProcess = double(height-2)/double(nRanks); const int myFirstRow = 1 + int(rowsPerProcess*myRank); const int myLastRow = 1 + int(rowsPerProcess*(myRank+1)); #pragma omp parallel for for (int i = myFirstRow; i < myLastRow; i++) ... 1 2 3 4 5 6 7 8 9
  • 36.
  • 37.
    Game of Life •‫دو‬‫در‬ ‫تواند‬ ‫می‬ ‫سلول‬ ‫هر‬ ،‫کنید‬ ‫ایجاد‬ ‫بعدی‬ ‫دو‬ ‫گرید‬ ‫یک‬ ‫حالت‬alive‫یا‬dead‫باشد‬ •‫است‬ ‫مرتبط‬ ‫خود‬ ‫همسایه‬ ‫هشت‬ ‫با‬ ‫سلول‬ ‫هر‬ o‫از‬ ‫کمتر‬ ‫با‬ ‫سلول‬ ‫هر‬2‫مرد‬ ‫خواهد‬ ‫زنده‬ ‫همسایه‬ o‫با‬ ‫سلول‬ ‫هر‬2‫یا‬3‫نسل‬ ‫در‬ ‫تواند‬ ‫می‬ ‫زنده‬ ‫همسایه‬ ‫بماند‬ ‫زنده‬ ‫هم‬ ‫بعد‬ o‫از‬ ‫بیش‬ ‫با‬ ‫سلول‬ ‫هر‬3‫مرد‬ ‫خواهد‬ ‫همسایه‬(‫ازدیاد‬ ‫جمعیت‬) o‫دارای‬ ‫که‬ ‫مرده‬ ‫سلول‬ ‫هر‬3‫می‬ ‫باشد‬ ‫زنده‬ ‫همسایه‬ ‫زنده‬ ‫تواند‬‫شود‬
  • 38.
    Game of Life •‫الگوی‬‫در‬ ‫خوبی‬ ‫به‬ ‫مسئله‬ ‫این‬Stencil ‫شود‬ ‫می‬ ‫منطبق‬ •‫یک‬ ‫به‬ ‫را‬ ‫ماتریس‬ ‫زیر‬ ‫هر‬thread‫می‬ ‫سپاریم‬ •‫ماتریس‬ ‫زیر‬ ‫مرز‬ ‫روی‬ ‫های‬ ‫سلول‬ ‫برای‬ ‫افتاد؟‬ ‫خواهد‬ ‫اتفاقی‬ ‫چه‬ •Ghost Cells‫راهکارهای‬ ‫از‬ ‫یکی‬ ‫است‬ ‫کاندید‬ •‫هر‬thread‫های‬ ‫داده‬ ‫از‬ ‫کپی‬ ‫یک‬ ‫می‬ ‫نگه‬ ‫را‬ ‫خود‬ ‫های‬ ‫همسایه‬ ‫دارد‬ •‫این‬Ghost Cells‫بار‬ ‫هر‬ ‫در‬ ‫باید‬ ‫روز‬ ‫به‬ ،‫الگوریتم‬ ‫تکرار‬
  • 39.
    Game of Life‫مقدار‬‫محاسبه‬ ‫جدید‬ ‫سلول‬ ‫این‬ ‫تکرار‬ ‫اولین‬ ‫از‬ ‫بعد‬: •PE0‫نتایج‬ ‫باید‬PE1,PE2‫را‬ ‫کند‬ ‫درخواست‬ •PE0‫می‬ ‫انجام‬ ‫را‬ ‫بعدی‬ ‫تکرار‬ ‫دهد‬
  • 40.
    ‫در‬ ‫بازرخداد‬ ‫سازی‬‫موازی‬ ‫مسئله‬Stencil •‫قبلی‬ ‫تکرارهای‬ ‫مقادیر‬ ‫به‬ ‫وابستگی‬ ‫حلقه‬ ‫مقادیر‬ ‫که‬ ‫مواقعی‬ ‫در‬ ‫روش‬ ‫از‬ ‫توان‬ ‫می‬ ‫باشد‬ ‫داشته‬Recurrence‫کرد‬ ‫استفاده‬
  • 41.
  • 42.
  • 43.
    ‫گره‬ ‫یک‬ ‫در‬‫سازی‬ ‫پیاده‬ ‫با‬OpenMP const double dx = a/(double)n; double integral = 0.0; #pragma omp parallel for simd reduction(+: integral) for (int i = 0; i < n; i++) { const double xip12 = dx*((double)i + 0.5); const double dI = BlackBoxFunction(xip12)*dx; integral += dI; } 1 2 3 4 5 6 7 8 9
  • 44.
    ‫گره‬ ‫چند‬ ‫سازی‬‫پیاده‬ ‫ای‬ const int iStart = double(n)/double(nRanks)*double(rank); const int iEnd = double(n)/double(nRanks)*double(rank+1); const double dx = a/(double)n; double integral_partial = 0.0, integral = 0.0; #pragma omp parallel for simd reduction(+: integral_partial) for (int i = iStart; i < iEnd; i++) { const double xip12 = dx*((double)i + 0.5); const double dI = BlackBoxFunction(xip12)*dx; integral_partial += dI; } MPI_Allreduce(&integral_partial, &integral, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); 1 2 3 4 5 6 7 8 9 10 11 12 13
  • 45.
  • 46.
  • 47.
    ‫توابع‬ ‫و‬ ‫مفاهیم‬MPI Communicationmodes –(non-)blocking, (a)synchronous, ready mode Message buffers – application, system, user space Communicators, Groups –creation, manipulation, usage Data types – built-in, derived Collective communication –patterns Hybrid programming –co-existence with threads: safety, performance One- sided communication – remote memory access Click for links from the MPI Forum. More information in MPI tutorial from the LLNL
  • 48.
    ‫از‬ ‫ای‬ ‫خالصه‬MPI •‫شده‬‫توزیع‬ ‫حافظه‬ ‫نویسی‬ ‫برنامه‬ ‫برای‬ ‫چارچوبی‬ •‫ها‬ ‫گره‬ ‫بین‬ ‫پیام‬ ‫تبادل‬ ‫پیچیدگی‬ ‫از‬ ‫زیادی‬ ‫بخش‬ ‫است‬ ‫شده‬ ‫مخفی‬ ‫نویسان‬ ‫برنامه‬ ‫از‬ •‫توان‬ ‫می‬ ‫تجمعی‬ ‫تبادل‬ ‫نویسی‬ ‫برنامه‬ ‫مدلهای‬ ‫از‬ ‫کرد‬ ‫استفاده‬ •‫برای‬ ‫محاسباتی‬ ‫سیستم‬ ‫چندین‬ ‫از‬ ‫استفاده‬ ‫امکان‬ ‫کند‬ ‫می‬ ‫فراهم‬ ‫را‬ ‫شده‬ ‫توزیع‬ ‫الگوریتمهای‬ ‫اجرای‬