wiczenia MPI-2 Mirosław Kupczyk Miroslaw.Kupczyk@man.poznan.pl PCSS, 12.06.2006 http://szkolenia.man.poznan.pl
Kompilacja i uruchomienie Origin 3800, Irix 6.5.25f MPT 1.9 Z linii komend: > cc -64 prog.c o prog lmpi mpirun -np 4 prog Przykłady do pobrania: http://szkolenia.man.poznan.pl/ Prosty accounting: tracejob -n <liczba_dni_wstecz> <nr_zadania>
Konta testowe klaster IA-64 (Linux): Intel(R) C/C++ compilers - Intel(R) Fortran Compiler - GNU C/C++/Fortran compilers (gcc, g77) - MPI (MPICH v2., v3., MVAPICH for InfiniBand) 248 procesorów Itanium2, sumaryczna pami operacyjna 540 GB, dyskowa: 9,4 TB > ssh sherwood.man.poznan.pl Username: psncxy [XY=01..10] Pass: psncxyxy
Dostpne wersje MPI-2 na sherwoodzie # mpich1_gnu -MPI w wersji 1 z kompilatorami gcc, g77 # mpich1_intel -MPI w wersji 1 z kompilatorami icc, ifort # mpich2_gnu -MPI w wersji 2 z kompilatorami gcc, g77 # mpich2_intel -MPI w wersji 2 z kompilatorami icc, ifort # mvapich1_gnu -MPI w wersji 1 korzystajace z technologii Infiniband oparte o kompilatory gcc, g77 # mvapich1_intel -MPI w wersji 1 korzystajace z technologii Infiniband oparte o kompilatory icc, ifort # mvapich2_gnu -MPI w wersji 2 korzystajace z technologii Infiniband oparte o kompilatory gcc, g77 # mvapich2_intel -MPI w wersji 2 korzystajace z technologii Infiniband oparte o kompilatory icc, ifort Ustaw potrzebn wersje MPI w pliku.bash_profile Np. MPI_VERSION="mpich2_gnu" I przeloguj si.
Kompilacja i uruchomienie sherwood:~/mpi$ mpicc [-DDEBUG -D_FILE_OFFSET_BITS=64 - D_LARGEFILE64_SOURCE] -o prog prog.c Przygotowanie pliku startowego PBS: > cat prog.sh #!/bin/bash #PBS -l nodes=4:ppn=1 mpiexec /home/staff/user/prog Zlecenie zadania: > qsub [-I] prog.sh qsub: waiting for job 118244.sherwood to start qsub: job 118244.sherwood ready Stan zadania: qstat 118244.sherwood Job id Name User Time Use S Queue ---------------- ---------------- ---------------- -------- - ----- 118244.sherwood t.sh miron 00:00:06 R avg_mem
Zapis sekwencyjny do kilku plików - szablon 1. Zobacz kod: t1.c 2. Kompiluj: [Master] sherwood:~/mpi$ mpicc -D_FILE_OFFSET_BITS=64 - D_LARGEFILE64_SOURCE -o t1 t1.c 3. Przygotuj plik dla PBS: t1.sh #!/bin/bash #PBS -l nodes=4:ppn=1 mpiexec /home/staff/userxxx/t1 4. Zle zadanie: > qsub [-I] q mpi t1.sh 5. Wyniki: -rw------- 1 miron staff 858 2006-06-09 12:53 t.sh.o118247 -rw------- 1 miron staff 0 2006-06-09 12:53 t.sh.e118247 > ls ld testfile.*
Zapis równoległy do jednego pliku - szablon 1. Zobacz kod: t2.c 2. Kompiluj: [Master] sherwood:~/mpi$ mpicc -D_FILE_OFFSET_BITS=64 - D_LARGEFILE64_SOURCE -o t2 t2.c 3. Przygotuj plik dla PBS: t2.sh #!/bin/bash #PBS -l nodes=4:ppn=1 mpiexec /home/staff/userxxx/t2 4. Zle zadanie: > qsub [-I] q mpi t2.sh 5. Wyniki: -rw------- 1 miron staff 858 2006-06-09 12:53 t.sh.o118247 -rw------- 1 miron staff 0 2006-06-09 12:53 t.sh.e118247 > ls ld testfile
Zapis równoległy do jednego pliku - testy 1. Zobacz kod: mkrandpfile.c 2. Kompiluj: [Master] sherwood:~/mpi$ mpicc -DDEBUG -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -o mkrandpfile mkrandpfile.c 3. Przygotuj plik dla PBS: mkrandpfile.sh #!/bin/bash #PBS -l nodes=4:ppn=1 mpiexec /home/staff/userxxx/mkrandpfile f plik l 10 4. Zle zadanie: > qsub q mpi mkrandpfile.sh 5. Wyniki: -rw------- 1 miron staff 858 2006-06-09 12:53 t.sh.o118247 -rw------- 1 miron staff 0 2006-06-09 12:53 t.sh.e118247 longest_io_time = 10.596874 seconds total_number_of_bytes = 167772160 transfer rate = 15.098792 MB/s > ls ld plik -rw------- 1 miron staff 167772160 2006-06-09 12:51 plik Komentarz: Operacje MPI-2 na NFS s małowydajne.
SGI Origin3800 SMP NumaCC #cpus blocks B MB/s max Rt [sek] 1 256 1073741824 184,10 5,56 2 128 1073741824 181,20 5,65 4 64 1073741824 187,86 5,45 8 32 1073741824 179,22 5,71 16 16 1073741824 182,44 5,61 32 8 1073741824 171,59 5,97 64 4 1073741824 166,55 6,15 96 2 805306368 161,86 4,88 96 * MIPS, RAM 72 GB, Local HDD Wniosek: uywajmy modeli programowania adekwatnych do architektury.
Obcienie http://sherwood.man.poznan.pl/ganglia
Zapis sekwencyjny do kilku plików - testy 1. Zobacz kod: mkrandpfiles.c 2. Kompiluj: [Master] sherwood:~/mpi$ mpicc -DDEBUG -D_FILE_OFFSET_BITS=64 - D_LARGEFILE64_SOURCE -o mkrandpfiles mkrandpfiles.c 3. Przygotuj plik dla PBS: mkrandpfiles.sh #!/bin/bash #PBS -l nodes=4:ppn=1 mpiexec /home/staff/userxxx/mkrandpfiles f plik l 10 4. Zle zadanie: > qsub [-I] q mpi mkrandpfiles.sh 5. Wyniki: -rw------- 1 miron staff 858 2006-06-09 12:53 t.sh.o118247 -rw------- 1 miron staff 0 2006-06-09 12:53 t.sh.e118247 longest_io_time = 2.663838 seconds total_number_of_bytes = 134217728 transfer rate = 48.050972 MB/s > ls ld plik.*
Zapis sekwencyjny do kilku plików klaster (NFS) #cpus blocks B MB/s max IO time Real time 2 16 134217728 16,99 7,96 0m10.844s 4 8 134217728 30,77 4,16 0m8.232s 8 4 134217728 53,00 2,41 0m4.826s 16 2 134217728 36,35 3,52 0m9.481s Transfer duego pliku na system NFS `/bin/cp /tmp/plik_a ~/` miał prdko ok. 10MB/s
Niemiertelny przykład 1. Zobacz kod: pi.c 2. Kompiluj: [Master] sherwood:~/mpi$ mpicc -o pi pi.c 3. Przygotuj plik dla PBS: pi.sh #!/bin/bash #PBS -l nodes=4:ppn=1 mpiexec /home/staff/userxxx/pi 4. Zle zadanie: > qsub -I q mpi pi.sh
Synchronizacja Aktywna 1. Zobacz kod: syn1.c 2. Kompiluj: [Master] sherwood:~/mpi$ mpicc -o syn1 syn1.c 3. Przygotuj plik dla PBS: pi.sh #!/bin/bash #PBS -l nodes=4:ppn=1 mpiexec /home/staff/userxxx/syn1 4. Zle zadanie: > qsub -I q mpi syn1.sh
Rozmieszczenie danych 1. Zobacz kod: write.c 2. Kompiluj: [Master] sherwood:~/mpi$ mpicc -o write write.c 3. Przygotuj plik dla PBS: write.sh #!/bin/bash #PBS -l nodes=4:ppn=1 mpiexec /home/staff/userxxx/write 4. Zle zadanie: > qsub q mpi write.sh 5. Zobacz plik wynikowy: out.dat 6. Jaki bdzie wynik dla 16 procesorów? 7. A Jaki dla 5 procesorów?
Inne ciekawe http://www.cs.utk.edu/~dongarra/web- PAGES/SPRING-2006/Lect07.pdf http://beige.ucs.indiana.edu/i590/node86.h tml