Użytkowanie i programowanie Matlaba

Slides:



Advertisements
Podobne prezentacje
Funkcje w PHP ABK.
Advertisements

PRAM.
C++ wykład 2 ( ) Klasy i obiekty.
C++ wykład 4 ( ) Przeciążanie operatorów.
Język C/C++ Funkcje.
1 Dzisiejszy wykład Wzorce funkcji Wzorce klas Tablica asocjacyjna Składowe statyczne.
Programowanie w języku Visual Basic
Język ANSI C Funkcje Wykład: Programowanie komputerów
Programowanie I Rekurencja.
Języki programowania C++
PROGRAMOWANIE STRUKTURALNE
formatowanie kodu źródłowego
Nośniki sygnałów - przykład Nośniki sygnałów – przykład.
ZŁOŻONOŚĆ OBLICZENIOWA
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Instrukcje Instrukcja : definicja obliczenia i określenie sposobu wykonania tego obliczenia. Program : ciąg instrukcji wykonywanych kolejno od pierwszej.
Podstawy informatyki Informatyka stosowana Prowadzący: Grzegorz Smyk
Kurs Pascala – spis treści
Wykład nr 1: Wprowadzenie. Pojęcia podstawowe
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
Instrukcje 1 Definicje wstępne Formalny opis akcji wykonywanej przez komputer nazywamy instrukcją ( statement), Każda instrukcja kończona jest średnikiem.
AUTOMATYZACJA OBLICZEŃ INŻYNIERSKICH
Wykład 2 struktura programu elementy języka typy zmienne
PASCAL (2) dr Anna Kwiatkowska.
Podstawy programowania
Podstawy programowania II
Podstawy programowania
Podstawy programowania
Programowanie w języku Matlab
A ctive S erver P ages Technologia dostępu do danych.
Wykład 2 Dr Aneta Polewko-Klim
Programowanie w języku Matlab
PHP: warunki, pętle, switch, break, continue
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
POŚREDNIK Jak reprezentowana jest informacja w komputerze? liczby – komputer został wymyślony jako zaawansowane urządzenie służące do wykonywania.
Podstawy informatyki 2013/2014
Programowanie Matlaba
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Informatyka MZT1 Wykład 6 Iteracje while i repeat Tablice Rekordy
MOiPP Matlab Sortowanie Obliczenia symboliczne - Symbolic ToolBox
MOiPP Wykład 3 Matlab Przykłady prostych metod obliczeniowych.
Wykład 10 typ zbiorowy rekurencja.
Programowanie Matlaba Przedmiot wykładów na Studia doktoranckie Instytut Geofizyki PAN Warszawa 2013/2014.
Systemy rozproszone  Rozdzielenie obliczeń między wiele fizycznych procesorów.  Systemy luźno powiązane – każdy procesor ma lokalną pamięć; procesory.
Algorytmika.
MOiPP Matlab Przykłady metod obliczeniowych Obliczenia symboliczne
Użytkowanie i programowanie Matlaba
Derekursywacja i optymalizacja kodu
Iteracje w C# Informatyka Cele lekcji: Wiadomości: Uczeń potrafi:
Kurs języka C++ – wykład 4 ( )
PWSW Mechatronika Wykład 7 Matlab cd.
Procesy, wątki Program a proces Proces: Przestrzeń adresowa, kod, dane, stos (część pamięci do przechowania zmiennych lokalnych i niektórych adresów) Otwarte.
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Pętle – instrukcje powtórzeń
Instrukcje warunkowe w php. Pętla FOR Czasem zachodzi potrzeba wykonania jakiejś czynności określoną ilość razy. Z pomocą przychodzi jedna z najczęściej.
PHP jest językiem skryptowym służącym do rozszerzania możliwości stron internetowych. Jego składnia jest bardzo podobna do popularnych języków programowania.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Wstęp do programowania Wykład 7
Pakiety numeryczne Skrypty, funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Pakiety numeryczne Operatory, instrukcje sterujące, operacje bitowe Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Osoby prowadzące zajęcia z Informatyki (II część): Prof. Mirosław Czarnecki (W+L) Konsultacje:piątek (p. 302a)
Osoby prowadzące zajęcia z Informatyki (II część): Prof. Mirosław Czarnecki (W+L) Konsultacje:piątek (p. 302a)
Czym jest PHP? ● Językiem programowania przeznaczonym do tworzenia i generowania dynamicznych stron WWW. Działa po stronie serwera: Klient Żądanie strony.
Kompilacja iteracyjna Piotr Błaszyński. Szybkie programy Prawa ograniczające:  prawo Moore'a (jego granice),  prawo Gatesa,  prawo Amdahla,  prawo.
Oprogramowanie w eksperymentach fizyki Wykład 3, Paweł Staszel.
Informacje ogólne.
Dane, zmienne, instrukcje
Zapis prezentacji:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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

Pętla parfor Działanie: clear A clear A for i = 1:8 parfor i = 1:8 A(i) = i; end A clear A parfor 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

Pętla parfor clear A clear A for i = 1:8 parfor i = 1:8 A(i) = A(i-1); end A clear A parfor 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…

Pętla parfor A = zeros(4, 11); parfor i = 1:4 for j = 1:10 A(i,j+1) = i+j; end A = zeros(4, 11); parfor i = 1:4 for j = 2:11 A(i,j+1) = i+j-1; 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

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)) 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; Nie wolno stosować indeksowanej tablicy poza pętlami

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; 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 Nie wolno stosować różnego indeksowania

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; 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 Nie wolno stosować różnego indeksowania

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 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 Podpętla loop musi być indeksowana stałą wartością

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

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

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

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

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

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

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

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

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

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

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

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

Reduction Variables 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)

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

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

SPMD Single Program Multiple Data – spmd Zastosowanie 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

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

Single Program Multiple Data – spmd spmd(n) <polecenia> 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

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

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 codist = codistributor1d(3, [4, 12]); Z = codistributed.zeros(3, 3, 16, codist); Z = Z + labindex;

Pmode

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 <options> <filenames> np. mex funkcja.c mex procedura.F funkcje.F

Kompilator Matlaba Kompilacja M-plików i tworzenie: 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