OpenMP Szkolenie dla uytkowniku

Podobne dokumenty
Wprowadzenie do OpenMP

OpenMP. Programowanie aplikacji równoległych i rozproszonych. Wykład 2. Model programowania. Standard OpenMP. Dr inż. Tomasz Olas

Wprowadzenie do zrównoleglania aplikacji z wykorzystaniem standardu OpenMP

Przetwarzanie Równoległe i Rozproszone

Programowanie systemów z pamięcią wspólną specyfikacja OpenMP. Krzysztof Banaś Obliczenia równoległe 1

Programowanie współbieżne Wstęp do OpenMP. Rafał Skinderowicz

Elementy składowe: Przenośność oprogramowania Model SPMD Szczegółowe wersje (bindings) dla różnych języków programowania

Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI

wiczenia MPI-2 Mirosław Kupczyk PCSS,

Programowanie maszyn z pamięcią wspólną w standardzie OpenMP.

Open MP wer Rafał Walkowiak Instytut Informatyki Politechniki Poznańskiej Jesień 2014

Programowanie maszyn z pamięcią wspólną w standardzie OpenMP.

Open MP. Rafał Walkowiak Instytut Informatyki Politechniki Poznańskie Jesień 2011

Wyklad 11 Języki programowania równoległego

OpenMP część praktyczna

Jędrzej Ułasiewicz Programowanie aplikacji równoległych 1. OpenMP

Architektura, oprogramowanie i uytkowanie klastra PCSS. Marek Zawadzki <mzawadzk@man.poznan.pl>

Wsparcie dla OpenMP w kompilatorze GNU GCC Krzysztof Lamorski Katedra Informatyki, PWSZ Chełm

Równoległość i współbieżność

Równoległość i współbieżność

Programowanie Rozproszone i Równoległe

Wprowadzenie do obsługi systemów obliczeniowych PCSS

HPC na biurku. Wojciech De bski

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Programowanie współbieżne... (w14)

PRZETWARZANIE RÓWNOLEGŁE I ROZPROSZONE. Mnożenie macierzy kwadratowych metodą klasyczną oraz blokową z wykorzystaniem OpenMP.

1. Wprowadzenie do C/C++

Jak ujarzmić hydrę czyli programowanie równoległe w Javie. dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Sposoby przekazywania parametrów w metodach.

Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI

1. Wprowadzenie do C/C++

Programowanie maszyn z pamięcią wspólną w standardzie OpenMP ciąg dalszy.

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

Programowanie Proceduralne

Programowanie Współbieżne

Programowanie współbieżne OpenMP wybrane wydajność. Rafał Skinderowicz

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Programowanie Współbieżne

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

16. Taksonomia Flynn'a.

Proces tworzenia programu:

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych,

Użytkowanie systemów obliczeniowych PCSS Artur Trojanowski

OpenMP środowisko programowania komputerów równoległych ze wspólną pamięcią

Algorytmy i Struktury Danych

Wprowadzenie do kompilatorów

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

System obliczeniowy laboratorium oraz. mnożenia macierzy

Wstęp do programowania

Wstęp do programowania

1. Klasa typu sealed. Przykład 1. sealed class Standard{ class NowyStandard:Standard{ // błd!!!

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Program Sprzeda wersja 2011 Korekty rabatowe

Wstęp do programowania 2

O superkomputerach. Marek Grabowski

Wstp. Warto przepływu to

Wstęp do programowania

Programowanie w języku C++ Grażyna Koba

Bazy danych. Plan wykładu. Podzapytania - wskazówki. Podzapytania po FROM. Wykład 5: Zalenoci wielowartociowe. Sprowadzanie do postaci normalnych.

Programowanie Równoległe Wykład 4. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Wykład 8: klasy cz. 4

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Delphi Laboratorium 3

... Ireneusz Mrozek. Wydział Informatyki

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

Planowanie adresacji IP dla przedsibiorstwa.

1 Podstawy c++ w pigułce.

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

PARADYGMATY PROGRAMOWANIA Wykład 4

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Zaawansowane programowanie w C++ (PCP)

Podstawy Programowania.

Kompilator języka C na procesor 8051 RC51 implementacja

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Podstawy systemu kolejkowego SLURM

Mirosław Kupczyk Pozna, PCSS, Szkolenie: "Architektura i uytkowanie klastra Linux IA-64"

Zmienne, stałe i operatory

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Sosnowiec, dn... Imię i nazwisko...

Pobieranie argumentów wiersza polecenia

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Programowanie 2. Język C++. Wykład 3.

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Obliczenia równoległe w zagadnieniach inżynierskich. Wykład 4

1 Podstawy c++ w pigułce.

Klonowanie MAC adresu oraz TTL

Język ludzki kod maszynowy

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Kompilacja i uruchamianie zadań na klastrach Perszeron i Mustang.

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Instrukcja obsługi programu Pilot PS 5rc

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wstęp. do języka C na procesor (kompilator RC51)

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

!"" ' #$$$%&' ()*$+&',! Nazwy programów, polece, katalogów, wyniki działania wydawanych polece.

Transkrypt:

OpenMP Szkolenie dla uytkowniku w zasobów w PCSS Mirosław Kupczyk miron@man.poznan.pl PCSS 7.11.2006 1

Plan 11:00-12:30 Wykład Standard OpenMP Dyrektywy kompilatora Sterowanie w obszarach równoległych 12:30-12:45 Przerwa 12:45-14:15 wiczenia praktyczne 2

OpenMP Open specifications for Multi Processing to standard programowania komputerów równoległych (SMP) implementowany na wiekszoci platformach obliczeniowych i dostarczany w postaci API dla programisty. Dostarcza mechanizmów korzystajcych w sposób jawny z wielowtkowoci i pamici współdzielonej w trybie równoległym. PCSS 3

Co to jest OpenMP!= MPI Dyrektywy dla kompilatora Biblioteki procedur (runtime) Zmienne rodowiskowe Przenaszalno (na 99,99%) Wsparcie dla C/C++, Fortran Znakomity do przetwarzania równoległego na poziomie ptli (z pewnymi wyjtkami dot. zalenoci danych i zmiennych ptli). Standaryzacja OpenMP nie wspiera systemów z rozproszon pamici (np. klastry) Implementacje nie s identycznie implementowane w systemach. Brak gwarancji wydajnego/optymalnego wykorzystania pamici współdzielonej. PCSS 4

Historia Wczesne lata 90-te rozszerzenia dla Fortrana. Draft ANSI X3H5 in 1994 (nigdy nie zaakceptowany) Oficjalne prace nad standardem zaczły si w 1997 (Compaq/HP, SGI, Intel, US DOE, IBM, SUN,...) Oct 1997: Fortran version 1.0 Oct 1998: C/C++ version 1.0 Nov 2000: Fortran version 2.0 Mar 2002: C/C++ version 2.0 May 2005: C/C++ and Fortran version 2.5 http://www.openmp.org Uwaga: niektóre dyrektywy zmieniły nazw w kolejnych wersjach OpenMP. PCSS 5

Dostpne na komputerach KDM SGI Origin 3800 (grape) 96 procesorów SGI Altix 3700 (guarana) 128 procesorów Równie na klastrach: Intel IA-64 (sherwood) wzły 2-u procesorowe AMD Opteron64 (fangorn) wzły 2-u procesorowe (2 * 2 rdzenie) Uruchamianie zada OpenMP w klastrze rozproszonym: cluster-openmp nastpne szkolenie!! PCSS 6

Model programowania Model bazuje na tworzeniu i usuwaniu wtków w obszarach równoległych [w skr. OR] (fork-join). Programista decyduje jawnie (w kodzie programu) o tym, które i jakie wtki bd wykonywa si równolegle. Zawsze startuje pojedyczy proces. Tworzy n-1 wtków w OR. OR koczy si synchronizacj i porzdkowaniem. Zostaje master. API oferuje zagniedzony parallelizm i dynamiczne tworzenie wtków (zmiana liczby wtków w aktywnym RO). Implementacje rzadko wspieraj. Standard nie wspomina o I/O PCSS 7

Przykład programu w C/C++ #include <omp.h> main () { int var1, var2, var3; // Kod sekwencyjny:... /* Pocztek obszaru równoległego. Tworzenie wtków. Ustalenie zasiegu zmiennych */ #pragma omp parallel private(var1, var2) shared(var3) { // Obszar równoległy, wykonywany przez wszystkie wtki:.. // Koniec obszaru równoległego. Synchronizacja i likwidacja wtków. } // Pozostały kod sekwencyjny:.. return 0; } PCSS 8

Przykład programu w Fortranie PROGRAM HELLO INTEGER VAR1, VAR2, VAR3 Serial code... Beginning of parallel section. Fork a team of threads. Specify variable scoping!$omp PARALLEL PRIVATE(VAR1, VAR2) SHARED(VAR3) Parallel section executed by all threads.. All threads join master thread and disband!$omp END PARALLEL Resume serial code.. END PCSS 9

Format dyrektywy C/C++ #pragma omp nazwa dyrektywy [warunek1,...] Nowa linia NL Wymagane Wystpuje zawsze po pragmie i przed warunkami Opcjonalne. Porzdek dowolny Wymagane. Poprzedza blok równoległy. Przykład: #pragma omp parallel default(shared) private(alfa, beta, i, j, k) Zasady ogólne: - Case sensitive; - Konwecja dyrektywy odpowiednia dla C/C++; - Tylko jedna nazwa na dyrektyw; - Kada dyrektywa dotyczy najbliszego nastpujcego bloku kodu; - Długa dyrektywa moe zosta przeniesiona do kolejnej linii po znaku \. PCSS 10

Zasig g dyrektywy Obszar statyczny Ustrukturyzowany kod programu wystpujcy zaraz po dyrektywie. Nie uruchamia równoległych procedur, nie generuje kopii pliku ródłowego. Sierota Dyrektywa niezalena od dyrektywy nadrzdnej. Istnieje poza obszarem ustrukturyzowanego kodu dyrektywy. Moe wywoływa procedury i pliki z kodami. Obszar dynamiczny Zawiera obszary: statyczny i swoich osieroconych dyrektyw. Wane, poniewa w przypadku błdnie wpisanej dyrektywy program równie moe da wyniki (właciwe lub nie). PCSS 11

Lista dyrektyw omp #pragma omp parallel for sections single master critical barrier atomic flush ordered PCSS 12

PARALLEL C/C++ Fortran #pragma omp parallel [clause...] newline if (scalar_expression) private (list) shared (list) default (shared none) firstprivate (list) reduction (operator: list) copyin (list) structured_block!$omp PARALLEL [clause...] IF (scalar_logical_expression) PRIVATE (list) SHARED (list) DEFAULT (PRIVATE SHARED NONE) FIRSTPRIVATE (list) REDUCTION (operator: list) COPYIN (list) block!$omp END PARALLEL Uwagi: - Kiedy wtek (master) osignie obszar PARALLEL, tworzy zespół wtków. Master jest członkiem zespołu i ma nr 0. - Kod jest duplikowany i kady z wtków go wykonuje. - Na kocu obszaru jest bariera, któr przekracza tylko wtek master. - W przypadku zakoczenia si wtku w obszarze PARALLEL, wszystkie wtki w zespole s koczone a stan pracy w takim punkcie jest nieokrelony (nie musi to oznacza koca całego programu). - Zagniedzenie moliwe po ustawieniu zmiennej rodowiskowej: OMP_NESTED=true Wówczas liczba wtków programu (runtime) wyniesie: n^2. PCSS 13

O wtkach... w Liczba wtków w obszarze PARALLEL: > setenv OMP_NUM_THREADS 16 albo funkcja API: #include <omp.h> omp_set_num_threads( 16 ) ; Moe zalee od implementacji bibliotek OpenMP, np. liczba procesorów w wle. Numeracja wtków: <0..N-1> Dynamiczna: omp_get_dynamic(); sprawdzenie, jeli wspiera to: omp_set_dynamic(); lub ustaw zmiennrodowiskow: > setenv OMP_DYNAMIC TRUE PCSS 14

Warunki IF Warunek wejcia do obszaru PARALLEL: Fortran:.TRUE. C/C++: nie-zero W przeciwnym razie wtek master wykona blok kodu sekwencyjnie. Nie wolno dokonywa skoków do/na zewntrz obszaru równoległego! Równie nie wolno skaka pomidzy niezalenymi obszarami równoległymi. PCSS 15

Przykład C/C++ #include <omp.h> main () { int nthreads, tid; /* Fork a team of threads giving them their own copies of variables */ #pragma omp parallel private(tid) { /* Obtain and print thread id */ tid = omp_get_thread_num(); printf("hello World from thread = %d\n", tid); /* Only master thread does this */ if (tid == 0) { nthreads = omp_get_num_threads(); printf("number of threads = %d\n", nthreads); } } /* All threads join master thread and terminate */ > export OMP_NUM_THREADS=8 > icc -openmp hello.c >./a.out Hello World from thread = 0 Number of threads = 8 Hello World from thread = 1 Hello World from thread = 2 Hello World from thread = 5 Hello World from thread = 4 Hello World from thread = 3 Hello World from thread = 6 Hello World from thread = 7 Uwaga na nieporzdek w dostpie do urzdzenia tty. } PCSS 16

Sterowanie w obszarze równoległym Ptla: for() Niezalene sekcje (równoległo na poziomie procedur) Serializacja danego kodu PCSS 17

Ptla C/C++ #pragma omp for [clause...] schedule (type [,chunk]) ordered private (list) firstprivate (list) lastprivate (list) shared (list) reduction (operator: list) nowait NL for(...){ ciało ptli } #pragma omp parallel private(i) { #pragma omp for for(i=0;i<400;i++) {... } } PCSS 18

warunki SCHEDULE STATIC ptla jest dzielona na fragmenty o wielkoci chunk-size a jej kawałki przydzielone arbitralnie kademu z wtków. DYNAMIC - ptla jest dzielona na fragmenty o wielkoci chunk-size a jej kawałki przydzielone dynamicznie kademu z wtków. Warto włczy, gdy krok iteracji ma z góry nieznany czas wykonania. GUIDED chunk-size jest obliczany na podstawie liczby pozostałych niewykonanych jeszcze iteracji. RUNTIME zaley od zmiennej rodowiskowej OMP_SCHEDULE NOWAIT wtki nie synchronizuj si na kocu ptli. Ograniczenia ptli: - Liczba iteracji znana. Ptla nie moe mie charakteru ptli do...while. - Nie wolno wykonywa instrukcji skoku poza ptle. - Chunk-size musi mie niezmienn wielko (int). PCSS 19

SECTIONS #pragma omp sections [clause...] private (list) firstprivate (list) lastprivate (list) reduction (operator: list) nowait NL { #pragma omp section newline - Obszar w którym wykonuj si bloki kodu w odzielnych wtkach (nie iteracje). - Kada sekcja jest wykonywana tylko raz przez wtek. - Na kocu sections jest bariera, wykonywana zawsze i niezalenie od ustawienia nowait. - Jeli liczba sekcji jest wiksza ni liczba wtków implementacja OpenMP zadecyduje o rezultacie. structured_block #pragma omp section newline structured_block } PCSS 20

SINGLE - Fragment kodu zostanie wykonany tylko przez jeden wtek. Np.. Operacja I/O. Reszta wtków czeka. - Na kocu bloku jest domylnie bariera, niezalenie od ustawienia NOWAIT. #pragma omp single [clause...] private (list) firstprivate (list) nowait NL structured_block PCSS 21

Synchronizacja wtkw tków Przykład: Wtek 1: increment(x) { x = x + 1; } Wtek 2: increment(x) { x = x + 1; } Bez dodatkowych załoe, rezultat powyszych operacji bdzie nieprzewidywalny, tzn. warto zmiennej x bdzie zwikszona albo o 1, albo o 2. OpenMP ma mechanizmy do sterowania kolejnoci wykonywania si wtków. Dyrektywy: MASTER CRITICAL BARRIER ATOMIC FLUSH ORDERED PCSS 22

Synchronizacja c.d. #pragma omp master NL structured_block Tylko watek master wykonuje dany blok kodu. Brak bariery. #pragma omp critical [ nazwa ] NL structured_block Fragment kodu bdzie wykonany przez wszytkie wtki. Tylko jeden wtek działa w danym czasie, pozostałe czekaj na wykonanie. Nazw nadaje programista, moe istnie wiele obszarów CRITICAL z tak sam nazw, wówczas takie obszary s traktowane jako jeden. #include <omp.h> main() { int x; x = 0; #pragma omp parallel shared(x) { } #pragma omp critical x = x + 1; } /* end of parallel section */ PCSS 23

Synchronizacja c.d. #pragma omp barrier NL #pragma omp atomic NL statement_expression Odpowiednik sekcji mini-critical. Operacja atomowa na pamici. #pragma omp flush (list) NL Punkt synchronizacji po którym implementacja OpenMP musi zapewni spójno pamici. Konieczna równie w systemach cc (cache coherent) np. SGI Origin, Altix Domylnie jest wykonywana w ramach dyrektyw: barrier parallel critical ordered for sections single pocztek i koniec pocztek i koniec pocztek i koniec koniec koniec koniec #pragma omp ordered NL structured_block Iteracje w ptli wykonaj si w tym samym porzdku co ptla na jednym procesorze. Dotyczy tylko dyrektywy omp for. Moe si zday, e cz mocy obliczeniowej zostanie niewykorzystana (w rodku jest wywoływane omp flush). PCSS 24

THREADPRIVATE #include <omp.h> int a, b, i, tid; float x; #pragma omp threadprivate(a, x) main () { /* Explicitly turn off dynamic threads */ omp_set_dynamic(0); printf("1st Parallel Region:\n"); #pragma omp parallel private(b,tid) { tid = omp_get_thread_num(); a = tid; b = tid; x = 1.1 * tid +1.0; printf("thread %d: a,b,x= %d %d %f\n",tid,a,b,x); } /* end of parallel section */ printf("************************************\n"); printf("master thread doing serial work here\n"); printf("************************************\n"); printf("2nd Parallel Region:\n"); #pragma omp parallel private(tid) { tid = omp_get_thread_num(); printf("thread %d: a,b,x= %d %d %f\n",tid,a,b,x); } /* end of parallel section */ } Wynik: 1st Parallel Region: Thread 0: a,b,x= 0 0 1.000000 Thread 2: a,b,x= 2 2 3.200000 Thread 3: a,b,x= 3 3 4.300000 Thread 1: a,b,x= 1 1 2.100000 ************************************ Master thread doing serial work here ************************************ 2nd Parallel Region: Thread 0: a,b,x= 0 0 1.000000 Thread 3: a,b,x= 3 0 4.300000 Thread 1: a,b,x= 1 0 2.100000 Thread 2: a,b,x= 2 0 3.200000 Globalizacja zmiennych lokalnych z punktu widzenia wtku. Wartoci zdefiniowanych zmiennych s zachowywane pomidzy obszarami równoległymi. Dynamiczne tworzenie wtków naley w tym przypadku wyłczy. PCSS 25

#include <omp.h> main () { int i, n, chunk; float a[100], b[100], result; /* Some initializations */ n = 100; chunk = 10; result = 0.0; for (i=0; i < n; i++) { a[i] = i * 1.0; b[i] = i * 2.0; } #pragma omp parallel for \ default(shared) private(i) \ schedule(static,chunk) \ reduction(+:result) for (i=0; i < n; i++) result = result + (a[i] * b[i]); printf("final result= %f\n",result); } REDUCTION Proste operacje na zagregowanych zmiennych prywatnych. Składnia: reduction (operator: lista) Zmienne operandy typu prostego (skalarne), koniecznie jako SHARED. Operator nieprzeciony: +, *, -, /, &, ^,, &&, Uwaga: reguła łcznoci argumentów zmiennoprzecinkowych moe powodowa róne wyniki. PCSS 26

warunki / dyrektywy Dyrektywa Warunek PARALLEL DO/for SECTIONS SINGLE PARALLEL DO/for PARALLEL SECTIONS IF PRIVATE SHARED DEFAULT FIRSTPRIVATE LASTPRIVATE REDUCTION COPYIN SCHEDULE ORDERED NOWAIT PCSS 27

Uyteczne informacje Zadanie równoległe zlecamy do kolejki przeznaczonej dla zada równoległych. Do programisty naley takie wykorzystanie zasobów, by minimalizowa straty mocy obliczeniowej w obszarach nierównoległych kodu. Administrator dopuszcza zwikszenie liczby slotów czasowych na maszynach. Zwykle jest to ok. 10% liczby procesorów. Jeli braknie pamici lokalnej dla wtku uywamy: export KMP_STACKSIZE=20000000 PCSS 28

wiczenia > ssh guarana.man.poznan.pl nazwa uytkownika: ***** hasło: ***** wget http://szkolenia.man.poznan.pl/presentations/openmp/openmp.tar PCSS 29

Altix3700 Niederministyczny czas wykonania zadania równoległego w zwizku z rón odległoci (hopy) pomidzy procesorami cecha architektury. Mona temu zaradzi! PCSS 30

Pierwszy program 1. Zobacz plik:> cat hello.c 2. Kompilacja: > icc -openmp hello.c -ohello hello.c(8) : (col. 1) remark: OpenMP DEFINED REGION WAS PARALLELIZED. 3. Uruchamianie w systemie kolejkowym PBS: Przygotuj plik konfiguracyjny: > cat hello.sh #!/bin/bash #PBS -l ncpus=4 #PBS -l mem=3gb export OMP_NUM_THREADS=4 /home/staff/miron/progs/openmp/hello 4. Zlecenie do PBS: > qsub hello.sh 5184.guarana.man.poznan.pl 5. Status zadania w PBS: > qstat 5184.guarana.man.poznan.pl 6. Pliki wynikowe: -rw------- 1 miron staff 0 2006-11-06 14:47 hello.sh.e5184 -rw------- 1 miron staff 134 2006-11-06 14:47 hello.sh.o5184 7. > cat hello.sh.o5184 Hello World from thread = 0 Number of threads = 4 Hello World from thread = 3 Hello World from thread = 1 Hello World from thread = 2 8. Wykonaj go kilka razy!! PCSS 31

Mnoenie macierzy (ptle) 1. Zobacz plik:> cat multi.c 2. Kompilacja: > icc -openmp multi.c -omulti 3. Uruchamianie w systemie kolejkowym PBS: Przygotuj plik konfiguracyjny: > cat multi.sh #!/bin/bash #PBS -l ncpus=8 #PBS -l mem=3gb export OMP_NUM_THREADS=8 ulimit -s 9999999999 /home/staff/miron/progs/openmp/multi 4. Zlecenie do PBS: > qsub multi.sh 5184.guarana.man.poznan.pl 5. Status zadania w PBS: > qstat 5184.guarana.man.poznan.pl 6. Pliki wynikowe: -rw------- 1 miron staff 0 2006-11-06 14:47 hello.sh.e5184 -rw------- 1 miron staff 134 2006-11-06 14:47 hello.sh.o5184 7. > cat hello.sh.o5184 8. Historia zadania: Prosty accounting: tracejob -n <liczba_dni_wstecz> <nr_zadania> PCSS 32

Sekcje 1. Zobacz plik:> cat section.c 2. Kompilacja: > icc -openmp section.c -osection 3. Uruchamianie w systemie kolejkowym PBS: Przygotuj plik konfiguracyjny: > cat section.sh #!/bin/bash #PBS -l ncpus=8 #PBS -l mem=3gb export OMP_NUM_THREADS=8 /home/staff/miron/progs/openmp/section 4. Zlecenie do PBS: > qsub section.sh 5184.guarana.man.poznan.pl 5. Status zadania w PBS: > qstat 5184.guarana.man.poznan.pl 6. Pliki wynikowe: -rw------- 1 miron staff 0 2006-11-06 14:47 hello.sh.e5184 -rw------- 1 miron staff 134 2006-11-06 14:47 hello.sh.o5184 7. > cat hello.sh.o5184 8. Historia zadania: Prosty accounting: tracejob -n <liczba_dni_wstecz> <nr_zadania> PCSS 33

Błdy do znalezienia bug1.c PCSS 34

Błdy do znalezienia bug1.c Pomidzy PARALLEL FOR i for() nie powinny znale siadne instrukcje. PCSS 35

Błdy do znalezienia bug2.c PCSS 36

Błdy do znalezienia bug2.c Zasig zmiennych tid i total jest błdny. Tid i total powinny by prywatne. Co programista chciał przez to uzyska (for.. )? PCSS 37

Błdy do znalezienia bug3.c PCSS 38

Błdy do znalezienia bug3.c Z definicji dyrektywa omp_barrier nie moe by ulokowana na zewntrz bloku sekcji w obszrze SECTIONS. PCSS 39

Błdy do znalezienia bug4.c PCSS 40

Błdy do znalezienia bug4.c Stos wtku jest zbyt mały (SEGV). # This is for all systems limit stacksize unlimited (albo: ulimit -s 999999999 dua liczba) # This is for IBM AIX systems setenv XLSMPOPTS "stack=20000000" # This is for IA-32 Linux systems setenv KMP_STACKSIZE 20000000 PCSS 41

Błdy do znalezienia bug5.c PCSS 42

Błdy do znalezienia bug5.c deadlock > bug5fix.c PCSS 43

Błdy do znalezienia bug6.c PCSS 44

Błdy do znalezienia bug6.c Zły zasig zmiennej sum. PCSS 45