Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Użytkowanie i programowanie Matlaba Metody optymalizacji i przyspieszania obliczeń. Obliczenia równoległe.

Podobne prezentacje


Prezentacja na temat: "Użytkowanie i programowanie Matlaba Metody optymalizacji i przyspieszania obliczeń. Obliczenia równoległe."— Zapis prezentacji:

1 Użytkowanie i programowanie Matlaba Metody optymalizacji i przyspieszania obliczeń. Obliczenia równoległe

2 Metody optymalizacji i przyspieszania obliczeń Wektoryzacja obliczeń - Jak najmniej pętli for Prealokacja (rezerwowanie) pamięci dla macierzy/tablic Nie modyfikować w kodzie funkcji dużych zmiennych przekazywanych jako parametry wywołania

3 Metody optymalizacji i przyspieszania obliczeń Pisać funkcje niż skrypty Używać load/save zamiast funkcji I/O Stosować numeryczne typy danych m. in. double logical Nie stosować bez potrzeby cell, sparce, structure Stosować skalary logiczne w operatorach if, elseif, while Nie pisać więcej niż jednej operacji w linii Unikać zmiany typu danych dla zmiennej lub kształtu zmiennej Wywoływać wbudowane funkcje Matlaba Stosować małe tablice Dołączać kod skompilowany

4 Metody optymalizacji i przyspieszania obliczeń Stosować obliczenia równoległe

5 Kiedy stosować obliczenia równoległe/rozproszone Długi czas wykonywania obliczeń Duże zbiory danych

6 Obliczenia równoległe Materiały z wykładu Obliczenia równoległe i rozproszone wśrodowisku MATLAB, Miłosz Augustyński, ONT Kraków

7 Obliczenia równoległe Obliczenia na wielu rdzeniach/procesorach komputera Obliczenia na klastrze Oblicznia na karcie graficznej

8 Trzy poziomy wykorzystania obliczeń równoległych Prosty Umiarkowany Zaawansowany

9 Prosty poziom wykorzystania obliczeń równoległych Włączenie obliczeń równoległych matlabpool open Wiele funkcji w Matlabie ma wbudowane wsparcie dla obliczeń równoległych i rozproszonych Na koniec matlabpool close

10 Przykładowe narzędzia z wsparciem obliczeń równoległych Optimization Toolbox Global Optimization Toolbox Statistics Toolbox Simulink

11 Umiarkowany poziom wykorzystania obliczeń równoległych Proste operatory i funkcje w skryptach MATLAB parfor batch spmd pmode

12 Zaawansowany poziom wykorzystania obliczeń równoległych Przydzielanie klastrów obliczeniowych Definiowanie zadań job, ich wykonywanie i kontrola Definiowanie wątków task MATLAB Distributed Computing Server

13 Rodzaje obliczeń równoległych Materiały z wykładu Obliczenia równoległe i rozproszone wśrodowisku MATLAB, Miłosz Augustyński, ONT Kraków

14 Wykorzystanie licencji przy obliczeniach równoległych Parallel Computing Toolbox – 1 licencja: Obliczenia równoległe na maszynie lokalnej (do 8 procesorów) Obliczenia z wykorzystaniem karty grafiki (NVIDIA CUDA) Połączenie z klastrem obliczeniowym MATLAB Distributed Computing Server Osobna licencja na workery Licencjonowanie dynamiczne

15 Obliczenia równoległe - definicje Scheduler – system zarządzający zadaniami Matlabowymi w systemie wieloprocesorowym. Worker – środowisko obliczeniowe Matlaba pracujące na pojedynczym procesorze. Klient – interaktywna sesja Matlaba, z poziomu której definiowane są zadania. Job – zadanie. Task – podzadanie

16 Obliczenia równoległe - definicje Zadanie – job – to program rozwiązujący określony problem. Zadanie rozdzielane jest na równolegle wykonywane podzadania. Podzadanie – task – to fragment programu, np. funkcja, działający na określonym zestawie danych. Podzadania mogą być niezależne. Tworzą program rozproszony – distributed job. Odpowiada to trywialnej równoległości. Podzadania mogą być od siebie wzajemnie zależne. Tworzą program równoległy – parallel job. Programy równoległe pracują najczęściej w trybie SPMD. Wszystkie podzadania są takie same. Różnią się prywatnymi danymi. Podzadania zależne od siebie mogą wymieniać się danymi.

17 Tryby wieloprocesorowe w MATLAB Tryb interakcyjny matlabpool Tryb wsadowy matlabpool Tryb interakcyjny pmode Tryb równoległy – parallel Tryb rozproszony – distributed

18 Pętla parfor clear A for i = 1:8 A(i) = i; end A Działanie: Zakres zmienności zmiennej sterującej dzielony pomiędzy workerów Dane konieczne dla poszczególnych iteracji są rozsyłane do workerów Każdy worker wykonuje swoją pulę iteracji Wyniki są zwracane do klienta clear A parfor i = 1:8 A(i) = i; end A

19 Pętla parfor clear A for i = 1:8 A(i) = A(i-1); end A Iteracje pętli muszą być wzajemnie niezależne! Kolejność wykonywania iteracji jest niedeterministyczna Wykonanie iteracji jest niesynchronizowane. Błąd pojedynczej iteracji powoduje zakończenie działania wszystkich iteracji… clear A parfor i = 1:8 A(i) = A(i-1); end A

20 Pętla parfor A = zeros(4, 11); parfor i = 1:4 for j = 1:10 A(i,j+1) = i+j; end Nie wolno stosować podwójnych indeksowań w wyrażeniach Nie można zagnieżdżać pętli parfor ani spmd Nie można stosować zmiennych globalnych i statycznych Nie wolno stosować wyrażeń break i return Nie wolno używać funkcji typu clear, who, whos, save, load Nie wolno wykonywać operacji graficznych A = zeros(4, 11); parfor i = 1:4 for j = 2:11 A(i,j+1) = i+j-1; end

21 Pętla parfor A = zeros(4, 10); parfor i = 1:4 for j = 1:10 A(i,j)=i+j; end disp(A(i, 1)) end Nie wolno stosować indeksowanej tablicy poza pętlami A = zeros(4, 10); parfor i = 1:4 v = zeros(1, 10); for j = 1:10 v(j) = i + j; end disp(v(1)) A(i, :) = v; end

22 Pętla parfor A = zeros(4, 10); parfor i = 1:4 for j = 1:5 A(i,j) = i+j; end for k = 6:10 A(i, k) = pi; end Nie wolno stosować różnego indeksowania A = zeros(4, 10); parfor i = 1:4 for j = 1:10 if j < 6 A(i, j) = i+j; else A(i, j) = pi; end

23 Pętla parfor A = zeros(4, 10); parfor i = 1:4 for j = 1:5 A(i,j) = i+j; end for k = 6:10 A(i, k) = pi; end Nie wolno stosować różnego indeksowania A = zeros(4, 10); parfor i = 1:4 for j = 1:10 if j < 6 A(i, j) = i+j; else A(i, j) = pi; end

24 Pętla parfor A=zeros(100, 200); parfor i=1:size(A,1) for j=1:size(A,2) A(i,j)=plus(i,j); end Podpętla loop musi być indeksowana stałą wartością A = zeros(100, 200); n = size(A, 2); parfor i=1:size(A,1) for j = 1:n A(i,j)=plus(i,j); end

25 Pętla parfor B for ii = 1:100 A(ii) = B(ii); end Nie można korzystać z referencji do funkcji B parfor ii = 1:100 A(ii)=feval(B,ii); end

26 Rodzaje zmiennych Loop variables Sliced variables Broadcast variables Reduction variables Temporary variables

27 Loop variables parfor i = 1:n i = i + 1; a(i) = i; end

28 Sliced Variables parfor i = 1:length(A) B(i) = f(A(i)); end

29 Sliced Variables A.q{i,12} Wymagany pierwszy poziom indeksowania A{i,12}.q

30 Sliced Variables parfor i = 1:k B(:) = h(A(i),A(i+1)); end Wymagana jednakowa wartość indeksu parfor i = 1:k B(:) = f(A(i)); C(:) = g(A{i}); end

31 Praca domowa parfor i = 1:k B(:) = h(A(i),A(i+1)); end Co napisać, aby można było w wykonywać tą czynność w pętli

32 Sliced Variables A(i+f(k),j,:,3) A(i,20:30,end) A(i,:,s.field1) Prawidłowe i nieprawidłowe indeksowanie A(i+k,j,:,3) A(i,:,end) A(i,:,k)

33 Sliced Variables A(i,:) = []; A(end + 1) = 1; Nie można zmieniać kształtu/rozmiaru

34 Broadcast Variables Jest rozsyłany do wszystkich wątków

35 Reduction Variables Akumulują wartości po wszystkich pętlach

36 Reduction Variables x = 0; parfor i = 1:10 x = x + i; end x x2 = []; n = 10; parfor i = 1:n x2 = [x2, i]; end x2

37 Reduction Variables X = X.* exprX = expr.* X X = X * expr X = expr * X X = X & expr X = expr & X X = X | expr X = expr | X X = [X, expr] X = [expr, X] X = [X; expr] X = [expr; X] X = {X, expr} X = {expr, X} X = {X; expr} X = {expr; X} X = min(X, expr) X = min(expr, X) X = max(X, expr) X = max(expr, X) X = union(X, expr) X = union(expr, X) X = intersect(X, expr) X = intersect(expr, X)

38 Reduction Variables parfor i = 1:n if testLevel(k) A = [A, 4+i]; else A = [r(i), A]; end parfor i = 1:n if testLevel(k) A = [A, 4+i]; else A = [A, r(i)]; end

39 Przykład a = 0 ; r = rand(1,10) ; z = 0 ; c = 4 ; parfor i = 1 : 10 a = i ; z = z + i ; b(i) = r(i) ; if i <= c d = 2*a ; end

40 SPMD Single Program Multiple Data – spmd Równoległe wykonanie tego samego kodu Spmd umożliwia łączenie kodu seryjnego z kodem równoległym Bloki kodu zamknięte w ramy spmd wykonywane są jednocześnie na kilku wątkach Zmienne pochodzące z wnętrza bloku spmd są dostepnew kliencie (zmienne typu Composite) Zastosowanie Długotrwałe programy – spmd pozwala na obliczenia jednoczesne Programy operujące na dużych zbiorach danych – spmd pozwala na rozproszenie danych pomiędzy laby

41 Single Program Multiple Data – spmd Single Program…Jeden kod programu Uruchamiany na kliencie – część seryjna wykonywana na kliencie, część równoległa wykonywana na zasobach matlabpool …MultipleData Pomimo jednego kodu każdy lab może pracować na innych danych

42 Single Program Multiple Data – spmd spmd(n) end Spmd wymaga działającego trybu matlabool n –liczba labów na których ma się uruchomić dany blok spmd (opcjonalne) n <= matlabpool(size) Działanie blok spmd na każdym labie uruchamia polecenia zawarte w bloku każdy lab ma własną przestrzeń roboczą (w pamięci workera) każdy lab jest unikalny i identyfikowalny możliwa jest komunikacja między labami

43 Single Program Multiple Data – spmd labindex zmienna przechowująca numer labu, na którym wykonywany jest program rozróżnia laby wykorzystywana np. do wczytywania różnych danych lub wyliczania zakresu pracy numer labu adresuje komunikację numlabs zmienna przechowująca liczbę wszystkich labów wykonujących dany program

44 SPMD -tablice rozproszone Tablice podzielone pomiędzy zasoby pamięciowe labów Ze strony klienta – DistributedArray matlabpool open local 2 W = ones(6,6); W = distributed(W); spmd T = W*2; end matlabpool close Ze strony labu – CodistributedArray matlabpool open local 2 spmd codist = codistributor1d(3, [4, 12]); Z = codistributed.zeros(3, 3, 16, codist); Z = Z + labindex; end matlabpool close

45 Pmode

46 GPU Rg = gpuArray.rand(1,4) G = gpuArray(ones(100, 'uint32')); D = gather(G); X = rand(1000); G = gpuArray(single(X)); result = arg1, arg2); gpuDeviceCount gpuDevice(2)

47 Współpraca Matlaba z innymi programami Matlab plik program Program plik (ASCII, EXEL) Matlab Matlab plik MAT Program (C lub Fortran) Matlab plik program plik Matlab Matlab funkcja (C/C++, Fortran lub Java) Program (C/C++, Fortran lub Java) Matlab

48 Matlab plik program plik Matlab Przykład m-pliku z funkcją interfejsu do zewnętrznego programu topar.m

49 Współpraca z innymi programami Matlab plik program Program plik (ASCII, EXEL) Matlab Matlab plik MAT Program (C lub Fortran) Matlab plik program plik Matlab Matlab funkcja (C lub Fortran) Program (C lub Fortran) Matlab

50 Rodzaje funkcji bibliotecznych mx* – operacje na typach Matlaba mex* – komunikacja ze środowiskiem Matlaba eng* – korzystanie z mechanizmów Matlaba mat* – operacje na plikach z danymi Matlaba

51 Dodawanie kodu w C i Fortranie – tworzenie MEX-funkcji Standardowa nazwa funkcji Biblioteka mx* do operacji na tablicach/strukturach Matlabowskich Biblioteka mex* do komunikacji ze środowiskiem Matlaba

52 Operowanie na plikach MAT Biblioteka mat* do czytania i pisania do pliku tablic Matlabowskich Biblioteka mx* do operacji na tablicach Matlabowskich

53 Eksploatacja mechanizmu Matlaba z programu Biblioteka mx* do operacji na tablicach/strukturach Matlabowskich Bibloteka eng* do otwarcia silnika Matlaba, exportu i importu danych oraz wykonywania polecen w Matlabie

54 Dodawanie kodu w C i Fortranie – tworzenie MEX-funkcji Standardowa nazwa funkcji Biblioteka mx* do operacji na tablicach Matlabowskich Biblioteka mex* do komunikacji ze środowiskiem Matlaba

55 Standardowa funkcja MEX w C void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { /* program... */ }

56 Standardowa funkcja MEX w Fortranie subroutine mexFunction(nlhs, plhs, nrhs, prhs) integer nlhs, nrhs integer plhs(*), prhs(*) C program C...

57 Przykłady biblioteki mx* mxMalloc, mxFree – przydzielanie i zwalnianie pamięci na zmienne (w C ) Typy danych/struktury Matlaba, np. mxArray mxCreateDoubleMatrix, mxCreateDoubleScalar – tworzenie tablicy Matlaba mxDestroyArray – usuwanie tablicy Matlaba mxGetM, mxGetN – określanie rozmiarów tablic mxIsClass, mxIsDouble, itd. – badanie typu danych mxGetPr, mxGetPi, mxGetScalar – dostęp do danych double

58 Przykłady biblioteki mex* mexEvalString, mexCallMatlab – wykonywanie polecenia i funkcji z matlaba mexWarnMsgTxt, mexErrMsgTxt, mexPrintf – wypisywanie komunikatów w Matlabie mexLock – zatrzymanie MEX pliku w pamięci mexSet – ustawienie właściwości np. grafiki mexIsGlobal – badanie czy istnieje dana zmienna globalna mexFunctionName – odczytanie nazwy bieżącej funkcji

59 Kody przykładowych funkcji MEX w C trgmtst.c trgtitch.c tstumss6.c (umss6.m)

60 Kompilacja MEX funkcji Można stosować własny kompilator powszechny kompilator, np. Visual C++, Borland C, Watkom Matlab posiada własny kompilator. Wywoływany poleceniem mex np. mex funkcja.c mex procedura.F funkcje.F

61 Kompilator Matlaba kodów źródłowych w C dla MEX plików kodów źródłowych w C i C++ dla samodzielnych programów kodów w C z S-funkcjami dla Simulinka pluginów EXEL-a obiektów COM Kompilacja M-plików i tworzenie:


Pobierz ppt "Użytkowanie i programowanie Matlaba Metody optymalizacji i przyspieszania obliczeń. Obliczenia równoległe."

Podobne prezentacje


Reklamy Google