SlideShare a Scribd company logo
1 of 49
‫درس‬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

More Related Content

Similar to 05 mpi fundamentals_of_parallelism_and_code_optimization-www.astek.ir

avr project , sim808l, mmc card
avr project , sim808l, mmc cardavr project , sim808l, mmc card
avr project , sim808l, mmc cardPooriaKeihani
 
Radmanesh c#-1
Radmanesh c#-1Radmanesh c#-1
Radmanesh c#-1neginrmn
 
A. Mir's Master's Thesis - Robust Twin Support Vector Machine for Noisy Data ...
A. Mir's Master's Thesis - Robust Twin Support Vector Machine for Noisy Data ...A. Mir's Master's Thesis - Robust Twin Support Vector Machine for Noisy Data ...
A. Mir's Master's Thesis - Robust Twin Support Vector Machine for Noisy Data ...Amir M. Mir
 
Clustering customers based on kmeans algorithm
Clustering customers based on kmeans algorithmClustering customers based on kmeans algorithm
Clustering customers based on kmeans algorithmEhsan Kamali
 
Chapter 04 - introduction to tcpip protocols
Chapter 04 - introduction to tcpip protocolsChapter 04 - introduction to tcpip protocols
Chapter 04 - introduction to tcpip protocolsbehrad eslamifar
 
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
سی پلاس پلاس به عنوان زبان دومی  برای یادگیری شی گراییسی پلاس پلاس به عنوان زبان دومی  برای یادگیری شی گرایی
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گراییmrm_196
 
نمونه پروژه سایت پروژه تیوب
نمونه پروژه سایت پروژه تیوبنمونه پروژه سایت پروژه تیوب
نمونه پروژه سایت پروژه تیوبAlireza Alahdadi
 
برنامه سازی3
برنامه سازی3برنامه سازی3
برنامه سازی3mahdiehsalari
 
Mohamady zahedy c#
Mohamady zahedy c#Mohamady zahedy c#
Mohamady zahedy c#danesh_fd
 
برنامه سازی 2- اعظم صالح-هنرستان جنت فارسان
برنامه سازی 2- اعظم صالح-هنرستان جنت فارسانبرنامه سازی 2- اعظم صالح-هنرستان جنت فارسان
برنامه سازی 2- اعظم صالح-هنرستان جنت فارسانtarasad
 
مهندسی اینترنت فصل 4 لایه شبکه
مهندسی اینترنت فصل 4 لایه شبکهمهندسی اینترنت فصل 4 لایه شبکه
مهندسی اینترنت فصل 4 لایه شبکهNavid Einakchi
 
Socket Programming in C++
Socket Programming in C++Socket Programming in C++
Socket Programming in C++saeed_delphi
 
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیرازIntroduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیرازMobin Ranjbar
 
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهرانFarafekr Technology
 
13940305-Message Passing_ver2.5
13940305-Message Passing_ver2.513940305-Message Passing_ver2.5
13940305-Message Passing_ver2.5Ehsan Khanahmadi
 
Cpusimulation
CpusimulationCpusimulation
Cpusimulationdanesh_fd
 

Similar to 05 mpi fundamentals_of_parallelism_and_code_optimization-www.astek.ir (20)

avr project , sim808l, mmc card
avr project , sim808l, mmc cardavr project , sim808l, mmc card
avr project , sim808l, mmc card
 
Radmanesh c#-1
Radmanesh c#-1Radmanesh c#-1
Radmanesh c#-1
 
MIPS and QtSpim
MIPS and QtSpimMIPS and QtSpim
MIPS and QtSpim
 
A. Mir's Master's Thesis - Robust Twin Support Vector Machine for Noisy Data ...
A. Mir's Master's Thesis - Robust Twin Support Vector Machine for Noisy Data ...A. Mir's Master's Thesis - Robust Twin Support Vector Machine for Noisy Data ...
A. Mir's Master's Thesis - Robust Twin Support Vector Machine for Noisy Data ...
 
Clustering customers based on kmeans algorithm
Clustering customers based on kmeans algorithmClustering customers based on kmeans algorithm
Clustering customers based on kmeans algorithm
 
Chapter 04 - introduction to tcpip protocols
Chapter 04 - introduction to tcpip protocolsChapter 04 - introduction to tcpip protocols
Chapter 04 - introduction to tcpip protocols
 
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
سی پلاس پلاس به عنوان زبان دومی  برای یادگیری شی گراییسی پلاس پلاس به عنوان زبان دومی  برای یادگیری شی گرایی
سی پلاس پلاس به عنوان زبان دومی برای یادگیری شی گرایی
 
نمونه پروژه سایت پروژه تیوب
نمونه پروژه سایت پروژه تیوبنمونه پروژه سایت پروژه تیوب
نمونه پروژه سایت پروژه تیوب
 
برنامه سازی3
برنامه سازی3برنامه سازی3
برنامه سازی3
 
Mohamady zahedy c#
Mohamady zahedy c#Mohamady zahedy c#
Mohamady zahedy c#
 
برنامه سازی 2- اعظم صالح-هنرستان جنت فارسان
برنامه سازی 2- اعظم صالح-هنرستان جنت فارسانبرنامه سازی 2- اعظم صالح-هنرستان جنت فارسان
برنامه سازی 2- اعظم صالح-هنرستان جنت فارسان
 
Sql tuning
Sql tuningSql tuning
Sql tuning
 
مهندسی اینترنت فصل 4 لایه شبکه
مهندسی اینترنت فصل 4 لایه شبکهمهندسی اینترنت فصل 4 لایه شبکه
مهندسی اینترنت فصل 4 لایه شبکه
 
Socket Programming in C++
Socket Programming in C++Socket Programming in C++
Socket Programming in C++
 
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیرازIntroduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
 
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
 
13940305-Message Passing_ver2.5
13940305-Message Passing_ver2.513940305-Message Passing_ver2.5
13940305-Message Passing_ver2.5
 
MD5
MD5MD5
MD5
 
مدل MapReduce
مدل MapReduceمدل MapReduce
مدل MapReduce
 
Cpusimulation
CpusimulationCpusimulation
Cpusimulation
 

More from aminnezarat

Health-medicine-and-Block-chain1402-1-12.pptx
Health-medicine-and-Block-chain1402-1-12.pptxHealth-medicine-and-Block-chain1402-1-12.pptx
Health-medicine-and-Block-chain1402-1-12.pptxaminnezarat
 
ارائه ابزار.pptx
ارائه ابزار.pptxارائه ابزار.pptx
ارائه ابزار.pptxaminnezarat
 
00 - BigData-Chapter_01-PDC.pdf
00 - BigData-Chapter_01-PDC.pdf00 - BigData-Chapter_01-PDC.pdf
00 - BigData-Chapter_01-PDC.pdfaminnezarat
 
Smart Data Strategy EN (1).pdf
Smart Data Strategy EN (1).pdfSmart Data Strategy EN (1).pdf
Smart Data Strategy EN (1).pdfaminnezarat
 
slides8 SharedMemory.ppt
slides8 SharedMemory.pptslides8 SharedMemory.ppt
slides8 SharedMemory.pptaminnezarat
 
06 hpc library_fundamentals_of_parallelism_and_code_optimization-www.astek.ir
06 hpc library_fundamentals_of_parallelism_and_code_optimization-www.astek.ir06 hpc library_fundamentals_of_parallelism_and_code_optimization-www.astek.ir
06 hpc library_fundamentals_of_parallelism_and_code_optimization-www.astek.iraminnezarat
 
01 introduction fundamentals_of_parallelism_and_code_optimization-www.astek.ir
01 introduction fundamentals_of_parallelism_and_code_optimization-www.astek.ir01 introduction fundamentals_of_parallelism_and_code_optimization-www.astek.ir
01 introduction fundamentals_of_parallelism_and_code_optimization-www.astek.iraminnezarat
 
Machine learning and big-data-in-physics 13970711-Dr. Amin Nezarat
Machine learning and big-data-in-physics 13970711-Dr. Amin NezaratMachine learning and big-data-in-physics 13970711-Dr. Amin Nezarat
Machine learning and big-data-in-physics 13970711-Dr. Amin Nezarataminnezarat
 
Big data HPC Convergence-Dr. Amin-Nezarat-(aminnezarat@gmail.com)-2019
Big data HPC Convergence-Dr. Amin-Nezarat-(aminnezarat@gmail.com)-2019Big data HPC Convergence-Dr. Amin-Nezarat-(aminnezarat@gmail.com)-2019
Big data HPC Convergence-Dr. Amin-Nezarat-(aminnezarat@gmail.com)-2019aminnezarat
 
Camera ready-nash equilibrium-ngct2015-format
Camera ready-nash equilibrium-ngct2015-formatCamera ready-nash equilibrium-ngct2015-format
Camera ready-nash equilibrium-ngct2015-formataminnezarat
 
Data set cloudrank-d-hpca_tutorial
Data set cloudrank-d-hpca_tutorialData set cloudrank-d-hpca_tutorial
Data set cloudrank-d-hpca_tutorialaminnezarat
 

More from aminnezarat (13)

Health-medicine-and-Block-chain1402-1-12.pptx
Health-medicine-and-Block-chain1402-1-12.pptxHealth-medicine-and-Block-chain1402-1-12.pptx
Health-medicine-and-Block-chain1402-1-12.pptx
 
ارائه ابزار.pptx
ارائه ابزار.pptxارائه ابزار.pptx
ارائه ابزار.pptx
 
00 - BigData-Chapter_01-PDC.pdf
00 - BigData-Chapter_01-PDC.pdf00 - BigData-Chapter_01-PDC.pdf
00 - BigData-Chapter_01-PDC.pdf
 
Smart Data Strategy EN (1).pdf
Smart Data Strategy EN (1).pdfSmart Data Strategy EN (1).pdf
Smart Data Strategy EN (1).pdf
 
slides8 SharedMemory.ppt
slides8 SharedMemory.pptslides8 SharedMemory.ppt
slides8 SharedMemory.ppt
 
BASIC_MPI.ppt
BASIC_MPI.pptBASIC_MPI.ppt
BASIC_MPI.ppt
 
Chap2 GGKK.ppt
Chap2 GGKK.pptChap2 GGKK.ppt
Chap2 GGKK.ppt
 
06 hpc library_fundamentals_of_parallelism_and_code_optimization-www.astek.ir
06 hpc library_fundamentals_of_parallelism_and_code_optimization-www.astek.ir06 hpc library_fundamentals_of_parallelism_and_code_optimization-www.astek.ir
06 hpc library_fundamentals_of_parallelism_and_code_optimization-www.astek.ir
 
01 introduction fundamentals_of_parallelism_and_code_optimization-www.astek.ir
01 introduction fundamentals_of_parallelism_and_code_optimization-www.astek.ir01 introduction fundamentals_of_parallelism_and_code_optimization-www.astek.ir
01 introduction fundamentals_of_parallelism_and_code_optimization-www.astek.ir
 
Machine learning and big-data-in-physics 13970711-Dr. Amin Nezarat
Machine learning and big-data-in-physics 13970711-Dr. Amin NezaratMachine learning and big-data-in-physics 13970711-Dr. Amin Nezarat
Machine learning and big-data-in-physics 13970711-Dr. Amin Nezarat
 
Big data HPC Convergence-Dr. Amin-Nezarat-(aminnezarat@gmail.com)-2019
Big data HPC Convergence-Dr. Amin-Nezarat-(aminnezarat@gmail.com)-2019Big data HPC Convergence-Dr. Amin-Nezarat-(aminnezarat@gmail.com)-2019
Big data HPC Convergence-Dr. Amin-Nezarat-(aminnezarat@gmail.com)-2019
 
Camera ready-nash equilibrium-ngct2015-format
Camera ready-nash equilibrium-ngct2015-formatCamera ready-nash equilibrium-ngct2015-format
Camera ready-nash equilibrium-ngct2015-format
 
Data set cloudrank-d-hpca_tutorial
Data set cloudrank-d-hpca_tutorialData set cloudrank-d-hpca_tutorial
Data set cloudrank-d-hpca_tutorial
 

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)
  • 4. ‫کالسترها‬ ‫های‬ ‫شبکه‬ ‫از‬ ‫معمول‬ ‫طور‬ ‫به‬ ‫کالسترها‬Gig. Ethernet, Infiniband, Intel Omni-Path‫ها‬ ‫گره‬ ‫بین‬ ‫ارتباط‬ ‫مدیریت‬ ‫برای‬ ‫کنند‬ ‫می‬ ‫استفاده‬
  • 5. ‫نویسی‬ ‫برنامه‬ ‫های‬ ‫الیه‬ ‫موازی‬
  • 7. Message Passing Interface - MPI -‫محاسباتی‬ ‫مدل‬ ‫توزیع‬ ‫حافظه‬ ‫شده‬ -‫چند‬ ‫محاسبه‬ ‫ای‬ ‫پردازنده‬ ‫حافظه‬ ‫در‬ -‫جابجایی‬ ‫پذیری‬ -‫کارا‬ -‫شده‬ ‫طراحی‬ ‫برای‬ ‫محاسبات‬ -‫دارای‬ ‫قابلیتهایی‬ ‫تبادل‬ ‫برای‬ ‫پیام‬ -‫سازی‬ ‫پیاده‬ ‫مختلفی‬ ‫های‬
  • 9. ‫شبکه‬ ‫کارت‬HPC‫اینتل‬ Intel Omni-Path Architecture‫باند‬ ‫پهناد‬ ،‫کم‬ ‫تاخیر‬ ‫پذیر‬ ‫مقیاس‬ ،‫زیاد‬ 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
  • 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 Peer Messaging
  • 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
  • 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)
  • 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‫داشته‬ ‫باشیم‬
  • 33. ‫عملگرهای‬Stencil •‫معادالت‬ ‫خطی‬ ‫سیستمهای‬ •‫جزئی‬ ‫دیفرانسیل‬ ‫معادالت‬ Fluid dynamics, heat transfer, image processing (convolution matrix), cellular automata.
  • 35. ‫لبه‬ ‫تشخیص‬ 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
  • 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‫کرد‬ ‫استفاده‬
  • 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
  • 47. ‫توابع‬ ‫و‬ ‫مفاهیم‬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
  • 48. ‫از‬ ‫ای‬ ‫خالصه‬MPI •‫شده‬ ‫توزیع‬ ‫حافظه‬ ‫نویسی‬ ‫برنامه‬ ‫برای‬ ‫چارچوبی‬ •‫ها‬ ‫گره‬ ‫بین‬ ‫پیام‬ ‫تبادل‬ ‫پیچیدگی‬ ‫از‬ ‫زیادی‬ ‫بخش‬ ‫است‬ ‫شده‬ ‫مخفی‬ ‫نویسان‬ ‫برنامه‬ ‫از‬ •‫توان‬ ‫می‬ ‫تجمعی‬ ‫تبادل‬ ‫نویسی‬ ‫برنامه‬ ‫مدلهای‬ ‫از‬ ‫کرد‬ ‫استفاده‬ •‫برای‬ ‫محاسباتی‬ ‫سیستم‬ ‫چندین‬ ‫از‬ ‫استفاده‬ ‫امکان‬ ‫کند‬ ‫می‬ ‫فراهم‬ ‫را‬ ‫شده‬ ‫توزیع‬ ‫الگوریتمهای‬ ‫اجرای‬