View
241
Download
6
Embed Size (px)
Citation preview
מבוא לעיבוד מקבילי – הרצאה מס' 2
על המערך המקביליMPIתרגול
מטרות השיעור
לוודא כי לכל זוג יש חשבון משתמש על המערך •המקבילי.
תרגול ביצוע משימות בסיסיות תחת מערכת •.Linuxההפעלה
הרצת תכניות מקביליות בסיסיות המשתמשות •.MPIב-
יעדים
יישור קו •
MPIהכרות ראשונית עם •
Basic Linux Commands – 1/5
Enter the systemlogin: username
password: passwd
Exit the systemexit
Text editorspico, vi, Emacs or
Edit on Windows then transfer with ftp
C Compilergcc –o file file.c
Basic Linux Commands – 2/5
DOSLinux
See filesdirls
ls -l
Copy filescopycp
Erase filesdelrm
Basic Linux Commands – 3/5DOSLinux
Make directory
mkdirmkdir
Remove directory
rmdirrmdir
More/Renamerenamemv
OS versionveruname -a
Basic Linux Commands – 4/5
• Getting help: man topic
• Look at the contents of a file: cat, more,head and tail
• Quit from man or more: q
• Where am I? pwd
• Clear the screen: clear
Basic Linux Commands – 5/5
• Redirection: >, >>
• Pipe: |
• telnet
• ftp
• ping
• chmod
• chown
Linux FAQ
http://www.ctssn.com/linux/linuxfaq.html
The vi EditorESC Puts you in command modeh, j, k, l Left, down, up, right or use the arrows keysw, W, b, B Forward, backward by word
0, $ First, last position of current line/pattern Search forward for pattern?pattern Search backward for patternn,N Repeat last search in same, opposite directionx Delete characterdd Delete current lineD Delete to end of linedw Delete wordp, P Put deleted text before, after cursoru 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
vi reference card
• Download and print:
• http://my.pages.de/vi-refcard.html
• http://vh224401.truman.edu/~dbindner/mirror/vi-ref.pdf
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 ..dwarf14 – nodes names using Fast Ethernet
dwarf1m .. dwarf12m – nodes names using Myrinet
dwarf13 and dwarf14 have only Ethernet cards (no myrinet!) – use them for editing!!
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
Connecting to the Dwarves
1תרגיל מס'
.telnetהתחבר לאחת מהתחנות תוך שימוש ב- •Hello Worldכתוב תכנית מחשב קצרה כגון: •בצע קומפילציה:•
gcc –o hello_world hello_world.cהרץ את התכנית ושמור הפלט:•
% ./hello_world > hello.txt
בדוק את הפלט על-ידי:•• more hello.txt
1/3 – 1פתרון תרגיל מס'
2/3 – 1פתרון תרגיל מס'
3/3 – 1פתרון תרגיל מס'
MPI-Quick reference card 1/2
MPI-Quick reference card 2/2
What is message passing?•Data transfer plus synchronization
Requires cooperation of sender and receiver
DataProcess 0
Process 1
May I Send?
Yes
DataDataDataDataDataDataDataData
Time
Point to Point: Basic Send/Receive
' מס תהליך1x
Send(&x,2);
תהליך מס' 2y
Recv(&y,1);
הזזת נתונים
Space-Time Diagram of a Message-Passing Program
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 Data typesMPI data type C TypeMPI_CHAR signed charMPI_SHORT signed short intMPI_INT signed intMPI_LONG signed long intMPI_UNSIGNED_CHAR unsigned charMPI_UNSIGNED_SHORT unsigned short intMPI_UNSIGNED unsigned intMPI_UNSIGNED_LONG unsigned long int MPI_FLOAT floatMPI_DOUBLE doubleMPI_LONG_DOUBLE long doubleMPI_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
1/3 – 2פתרון תרגיל מס' #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/3 – 2פתרון תרגיל מס'
helloworld: helloworld.c
mpicc -o helloworld helloworld.c
clean:
/bin/rm -f helloworld *.o
% make
The Makefile
++C: מימוש ב- 2תרגיל מס'
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תרגיל מס'
חישוב באמצעות אינטגרציה•
f(x)=4/(1+x2)נבצע אינטגרציה על הפונקציה • חלקיםn על-ידי חלוקת התחום ל- 1 ל- 0בין
4)1arctan()0arctan()1arctan(|)arctan(
1
1 10
1
02
xdxx
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 */
תהליכים4הרצת
הרצת שני תהליכים על שני מעבדים
1/2הערכת ביצועי הריצה
2/2הערכת ביצועי הריצה
1תרגיל הגשה מס'
העבודה תתבצע בזוגות•
תוך שבועיים Emailהתרגיל יוגש באמצעות ה- •היום האחרון להגשה הוא עד לשיעור בעוד –
(.4שבועיים )שבוע
יש לתעד את התכנית.•
חובה!אמנם התרגיל הוא ללא ציון, אך הגשתו •
:1תרגיל הגשה מס'
מטרות התרגיל•:MPIהכרות ראשונית עם –
.Point-to-Pointפקודות תקשורת מסוג •
פקודות תקשורת קולקטיביות.•
.Master-workersמיקבול בשיטת –
:1תרגיל הגשה מס' אינטגרציה בשיטת הטרפז
כתוב תכנית מחשב מקבילית המבצעת אינטגרציה •לפולינום ממעלה שלישית (ראה בשיטת הטרפז
בהמשך). להעברת מסרים בין המעבדים MPIהשתמש בפקודות •
שנלמדו בשיעור:
Send, Recv, Bcast and Reduce Point-to-Pointבפעם הראשונה, השתמש בפקודות •
בלבד. בפעם השניה השתמש בפקודות קולקטיביות בלבד. השווה זמני ריצה בין שתי הפעמים.
1תרגיל הגשה מס'
יקבל מהמשתמש את תחום האינטגרציה 0מעבד מס' • טרפזים.n עם b ל- aלדוגמה, מ- ואת מס' הטרפזים:
ירכז אליו את תוצאות הביניים הנשלחות 0מעבד מס' •מהמעבדים וידפיס את התוצאה הסופית. כמו-כן, יש
.nלהדפיס את גבולות האינטגרציה ומס' הטרפזים,
כך שהשגיאה בתוצאה תהיה קטנה מ- n קבע את 0.001
יש לצרף את הפלט של הריצות ואת התוצאה •האנליטית.
1תרגיל הגשה מס'
הפונקציה עליה יש לבצע את האינטגרציה היא •פולינום ממעלה שלישית:
גבולות האינטגרציה הם לבחירתכם, אך ציינו •אותם בפלט.
להשוות עם התוצאה האנליטית!•
3
0
i
i
ix
:1תרגיל הגשה מס'
נקודות למחשבה:• עושה גם-כן חישוב או רק masterהאם ה- –
אדמיניסטרציה?האם ניתן להריץ את התכנית גם עם תהליך אחד –
בלבד
mpirun –np 1 exe1?
בשבוע הבא...
MPIלימוד •
השיעור יתקיים בכיתות הלימוד הרגילות•
חדר 90: שינוי חדר לימוד: בניין 1קבוצה מס' •127