470 likes | 619 Views
מבוא לעיבוד מקבילי – הרצאה מס' 2. 29.10.01 תרגול על המערך המקבילי. מטרות המפגש היום. לוודא כי לכל זוג יש חשבון משתמש על המערך המקבילי. תרגול ביצוע משימות בסיסיות תחת מערכת ההפעלה Linux . הרצת תכניות מקביליות בסיסיות המשתמשות ב- MPI. יעדים. יישור קו הכרות ראשונית עם MPI.
E N D
מבוא לעיבוד מקבילי – הרצאה מס' 2 29.10.01 תרגול על המערך המקבילי
מטרות המפגש היום • לוודא כי לכל זוג יש חשבון משתמש על המערך המקבילי. • תרגול ביצוע משימות בסיסיות תחת מערכת ההפעלה Linux. • הרצת תכניות מקביליות בסיסיות המשתמשות ב- MPI.
יעדים • יישור קו • הכרות ראשונית עם MPI
Basic Linux Commands – 4/5 • Getting help: man topic • Looking at the contents of a file: more • Quit from man or more: q • Where am I? pwd • Clear the screen: clear • Print the contents of a file: cat
Basic Linux Commands – 5/5 • Redirection: >, >> • Pipe: | • telnet • ftp • ping • chmod • chown
Linux FAQ http://www.ctssn.com/linux/linuxfaq.html
ESC Puts you in command mode h, j, k, l Left, down, up, right or use the arrows keys w, W, b, B Forward, backward by word 0, $ First, last position of current line /pattern Search forward for pattern ?pattern Search backward for pattern n,N Repeat last search in same, opposite direction x Delete character dd Delete current line D Delete to end of line dw Delete word p, P Put deleted text before, after cursor u Undo last command . Repeat the last command i, a Insert text before, after cursor [Puts you into INPUT MODE] o, O Open new line for text below, above cursor [Puts you into INPUT MODE] ZZ Save file and quit :w Save file :q! Quit, without saving changes The vi Editor
Our Parallel Cluster:The Dwarves There are 12 computers with Linux operating system. dwarf[1-12] or dwarf[1-12]m dwarf1[m], dwarf3[m]-dwarf7[m] - Pentium II 300 MHz, dwarf9[m]-dwarf12[m] - Pentium III 450 MHz (dual CPU), dwarf2[m], dwarf8[m] - Pentium III 733 MHz (dual CPU).
The Dwarves Networking: Two Kinds of NICs dwarf1 ..dwarf12 – nodes names for the Fast Ethernet link dwarf1m .. dwarf12m – nodes names for the Myrinet network
The Dwarves IP Addresses • Fast Ethernet:132.72.53.* Where * is between 111 to 122 • Myrinet:132.72.52.* Where * is between 161 to 172
תרגיל מס' 1 • התחבר לאחת מהתחנות תוך שימוש ב- telnet. • כתוב תכנית מחשב קצרה כגון: Hello World • בצע קומפילציה: gcc –o hello_world hello_world.c • הרץ את התכנית ושמור הפלט: % ./hello_world > hello.txt • בדוק את הפלט על-ידי: • more hello.txt
Data Process 0 Data May I Send? Data Data Data Data Data Data Data Process 1 Yes Time What is message passing? • Data transfer plus synchronization • Requires cooperation of sender and receiver
Match Receive Y , P , t Addr ess Y Send X, Q, t Addr ess X Local pr ocess Local pr ocess addr ess space addr ess space Pr ocess P Pr ocess Q Message-Passing Abstraction • Send specifies buffer to be transmitted and receiving process • Recv specifies sending process and application storage to receive into • Memory to memory copy, but need to name processes • Optional tag on send and matching rule on receive • User process names local data and entities in process/tag space too • In simplest form, the send/recv match achieves pairwise synch event • Other variants too • Many overheads: copying, buffer management, protection
MPI - Message Passing Library • MPI is a standard not an implementation • Popular implementations are LAM and MPICH • MPICH is installed under /usr/local/mpich • Always put in the code: #include “mpi.h” • Compilation: mpicc –o filename file.c • Executing: mpirun –np N filename
MPI Naming Conventions MPI_Xxxxx(parameter,...) Example:MPI_Init(&argc,&argv).
The First 4 Functions of MPI • MPI_Init • MPI_Finalize • MPI_Comm_size • MPI_Comm_rank
The First 4 Functions Syntax • int MPI_Init(*argc, ***argv) • int MPI_Finilize() • int MPI_Comm_size(MPI_Comm comm, int *size) • int MPI_Comm_rank(MPI_Comm comm, int *rank)
MPI Communicator A communicator is a handle representing a group of processors that can communicate with one another. The communicator name is required as an argument to all point-to-point and collective operations. The communicator specified in the send and receive calls must agree for communication to take place. Processors can communicate only if they share a communicator.
Basic Point to Point Functions • MPI_Send • MPI_Recv • MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm); • MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status status);
Basic Collective Functions • MPI_Bcast • MPI_Reduce • The exact syntax: • MPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm); • MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm);
MPI Datatypes MPI DatatypeC Type MPI_CHAR signed char MPI_SHORT signed short int MPI_INT signed int MPI_LONG signed long int MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED_SHORT unsigned short int MPI_UNSIGNED unsigned int MPI_UNSIGNED_LONG unsigned long int MPI_FLOAT float MPI_DOUBLE double MPI_LONG_DOUBLE long double MPI_BYTE (none) MPI_PACKED (none)
MPI Example: Mandelbrot MPICH 1.2.1 Running on Windows NT (Dual Celeron 400MHz) Compiled with Visual C++ 6.
Home Work #1 : MPI Tutorial http://www-unix.mcs.anl.gov/mpi/tutorial/index.html Four-up Postscript for Tutorial on MPI (tutorial4.ps)
תרגיל מס' 2 • הרצת תכנית קצרה ב- MPI: • Hello_World מקבילי • כתוב תכנית בה כל מחשב יאמר שלום ויודיע את מספר התהליך שלו בריצה: Hello world from process 1 of 2
פתרון תרגיל מס' 2 – 1/3 #include <stdio.h> #include "mpi.h" int main( argc, argv ) int argc; char **argv; { int rank, size; MPI_Init( &argc, &argv ); MPI_Comm_size( MPI_COMM_WORLD, &size ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); printf( "Hello world from process %d of %d\n", rank, size ); MPI_Finalize(); return 0; }
פתרון תרגיל מס' 2 – 2/3 The Makefile % make helloworld: helloworld.c mpicc -o helloworld helloworld.c clean: /bin/rm -f helloworld *.o
Hello World - Execution % mpicc -o helloworld helloworld.c % mpirun -np 4 helloworld Hello world from process 0 of 4 Hello world from process 3 of 4 Hello world from process 1 of 4 Hello world from process 2 of 4 %
תרגיל מס' 3: חישוב p • חישוב באמצעות אינטגרציה • נבצע אינטגרציה על הפונקציה f(x)=4/(1+x2) בין 0 ל- 1 על-ידי חלוקת התחום ל- n חלקים
פתרון תרגיל מס' 3 • בפתרון השתמשנו בפונקציה למדידת זמן • הנקראת: MPI_Wtime() • ראה דוגמא לפתרון התרגיל תחת: /usr/local/mpich/examples/basic/cpi.c
פתרון תרגיל מס' 3 #include "mpi.h" #include <stdio.h> #include <math.h> double f(double a) { return (4.0 / (1.0 + a*a)); } void main(int argc, char *argv[]) { int done = 0, n, myid, numprocs, i; double PI25DT = 3.141592653589793238462643; double mypi, pi, h, sum, x; double startwtime, endwtime; int namelen; char processor_name[MPI_MAX_PROCESSOR_NAME];
פתרון תרגיל מס' 3 MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); MPI_Get_processor_name(processor_name,&namelen); fprintf(stderr,"Process %d on %s\n",myid, processor_name); fflush(stderr); n = 0;
פתרון תרגיל מס' 3 while (!done) { if (myid == 0) { printf("Enter the number of intervals: (0 quits) "); fflush(stdout); scanf("%d",&n); startwtime = MPI_Wtime(); } MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); if (n == 0) done = 1; else {
פתרון תרגיל מס' 3 h = 1.0 / (double) n; sum = 0.0; for (i = myid + 1; i <= n; i += numprocs) { x = h * ((double)i - 0.5); sum += f(x); } mypi = h * sum; MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
פתרון תרגיל מס' 3 if (myid == 0) { printf("pi is approximately %.16f, Error is %.16f\n", pi, fabs(pi - PI25DT)); endwtime = MPI_Wtime(); printf("wall clock time = %f\n",endwtime-startwtime);} } /* end of if */ } /* end of while */ MPI_Finalize(); } /* end of main */
תרגיל הגשה מס' 1 • העבודה תתבצע בזוגות • התרגיל יוגש באמצעות ה- Email תוך שבועיים – היום האחרון להגשה הוא יום ב' ה- 12/11/01. • יש לתעד את התכנית. • אמנם התרגיל הוא ללא ציון, אך הגשתו חובה!
תרגיל הגשה מס' 1:אינטגרציה בשיטת הטרפז • כתוב תכנית מחשב מקבילית המבצעת אינטגרציה בשיטת הטרפז • השתמש בפקודות העברת מסרים בין המעבדים מטיפוס Point-to-Point שנלמדו בשיעור: MPI_Send ו- MPI_Recv • מעבד מס' 0 יקבל מהמשתמש את תחום האינטגרציה ואת מס' הטרפזים:לדוגמה, מ-a ל- b עם n טרפזים.
תרגיל הגשה מס' 1 • מעבד מס' 0 ירכז אליו את תוצאות הביניים הנשלחות מהמעבדים וידפיס את התוצאה הסופית. כמו-כן, יש להדפיס את גבולות האינטגרציה ומס' הטרפזים, n. • להריץ התכנית 3 פעמים עבור שלושה ערכים של n: n=100 ,1000 ,10000 • יש לצרף את הפלט של הריצות
תרגיל הגשה מס' 1 • הפונקציה עליה יש לבצע את האינטגרציה היא פולינום ממעלה שלישית: • השווה עם התוצאה האנליטית
תרגיל הגשה מס' 1 • גבולות האינטגרציה הם: a=Min(ID1,ID2)/1000000 b=Max(ID1,ID2)/1000000 • כאשר ID1 ו- ID2 הם מספרי ת.ז. של המגישים, כולל ספרת ביקורת.