Przykład: QS(tab,0,5); Sortowanie. Mnożenie macierzy. dr inż. Jarosław Forenc

Podobne dokumenty
Mnożenie macierzy Metody skrócenia czasu mnożenia macierzy. dr inż. Jarosław Forenc , K. metoda Strassena zmiana implementacji algorytmu

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów. dziedziczenie funkcje wirtualne

Algorytmy komputerowe. Złożoność obliczeniowa Sortowanie. Mnożenie macierzy. dr inż. Jarosław Forenc

Programowanie obiektowe w języku C++ Operacje na wektorach i macierzach. dr inż. Jarosław Forenc. Dziedziczenie. funkcje wirtualne (polimorfizm)

Algebra Boole a. ccc dr inŝ. Jarosław Forenc

dr inż. Jarosław Forenc

Połączenie (1) Optymalizacja poleceń SQL Część 3. Algorytm nested loops. Połączenie (2)

Wprowadzenie do Sieci Neuronowych Łańcuchy Markowa

Wprowadzenie do Sieci Neuronowych Łańcuchy Markowa

Semantyka i Weryfikacja Programów - Laboratorium 2 Działania na ułamkach, krotki i rekordy

WYZNACZNIKI. . Gdybyśmy rozważali układ dwóch równań liniowych, powiedzmy: Takie układy w matematyce nazywa się macierzami. Przyjmijmy definicję:

Elementy znajdujące się w opakowaniu mogą różnić się w zależności od kraju, w którym zakupiono urządzenie. Przewód zasilający do gniazdka ściennego

Rys Wyrównanie spostrzeżeń zawarunkowanych jednakowo dokładnych C. KRAKOWIANY

T W O R Z Y M Y. 15 godzin w cyklu 3-godzinnym

Całki oznaczone. wykład z MATEMATYKI

Co można zrobić za pomocą maszyny Turinga? Wszystko! Maszyna Turinga potrafi rozwiązać każdy efektywnie rozwiązywalny problem algorytmiczny!

dr inż. Jarosław Forenc

Wspomaganie obliczeń za pomocą programu MathCad

Algorytm selekcji Hoare a. Łukasz Miemus

FUNKCJA KWADRATOWA. RÓWNANIA I NIERÓWNOŚCI DRUGIEGO STOPNIA.

np. dla p=1 mamy T1(N) N/2 średni czas chybionego wyszukiwania z prawdopodobieństwem q:

ZADANIA Z ZAKRESU SZKOŁY PODSTAWOWEJ, GIMNAZJUM I SZKOŁY ŚREDNIEJ

Wektor kolumnowy m wymiarowy macierz prostokątna o wymiarze n=1 Wektor wierszowy n wymiarowy macierz prostokątna o wymiarze m=1

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

Podstawy programowania obiektowego

Algebra Boola i podstawy systemów liczbowych. Ćwiczenia z Teorii Układów Logicznych, dr inż. Ernest Jamro. 1. System dwójkowy reprezentacja binarna

Pierwiastek z liczby zespolonej

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

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

MODEL ODPOWIEDZI I SCHEMAT OCENIANIA ARKUSZA EGZAMINACYJNEGO II

4.6. Gramatyki regularne

Maciej Grzesiak. Iloczyn skalarny. 1. Iloczyn skalarny wektorów na płaszczyźnie i w przestrzeni. a b = a b cos ϕ. j) (b x. i + b y

G i m n a z j a l i s t ó w

Metoda List łańcuchowych

PODSTAWY BAZ DANYCH Wykład 3 2. Pojęcie Relacyjnej Bazy Danych

Programowanie z więzami (CLP) CLP CLP CLP. ECL i PS e CLP

2. Funktory TTL cz.2

dr inż. Jarosław Forenc

Iloczyn skalarny

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

KLUCZ PUNKTOWANIA ODPOWIEDZI

Informatyka 2. Wykład nr 4 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

ROZWIĄZYWANIE MAŁYCH TRÓJKĄTÓW SFERYCZNYCH

Instrukcja montażu i obsługi

Wybrane algorytmy tablicowe

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

XI. Rachunek całkowy funkcji wielu zmiennych. 1. Całka podwójna Całka podwójna po prostokącie. Oznaczenia:

wersja podstawowa (gradient)

Wyk lad 1 Podstawowe wiadomości o macierzach

4. RACHUNEK WEKTOROWY

Semantyka i Weryfikacja Programów - Laboratorium 7

a) b) Rys Schemat ideowo-konstrukcyjny układu do przykładu 6.1 a) i jego schemat blokowy

Spis treści JĘZYK C - TABLICE JEDNOWYMIAROWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05Z

4.3. Przekształcenia automatów skończonych

Architektury komputerów Architektury i wydajność. Tomasz Dziubich

Metody generowania skończonych modeli zachowań systemów z czasem

Działania wewnętrzne i zewnętrzne

WSTĘP DO INFORMATYKI

Strategia "dziel i zwyciężaj"

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Algorytmy sortujące i wyszukujące

a a a b M. Przybycień Matematyczne Metody Fizyki I

Gdyńskim Ośrodkiem Sportu i Rekreacji jednostka budżetowa

Zacznij tutaj. Podręcznik szybkiej obsługi DCP-7055 / DCP-7060D DCP-7065DN OSTRZEŻENIE CAUTION UWAGA

Przetwarzanie Równoległe i Rozproszone

Programowanie Współbieżne

Programowanie komputerowe. Zajęcia 2

JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Zacznij tutaj. a b. Podręcznik szybkiej obsługi DCP-J315W. urządzenie i sprawdź elementy OSTRZEŻENIE UWAGA OSTRZEŻENIE

Matematyczne Podstawy Informatyki

Z INFORMATYKI RAPORT

RBD Relacyjne Bazy Danych

Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe.

Programowanie Proceduralne

Zacznij tutaj. a b. Podręcznik szybkiej obsługi DCP-J140W OSTRZEŻENIE UWAGA OSTRZEŻENIE

Wyniki testów PassMark

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

Wymagania na ocenę dopuszczającą z matematyki klasa II Matematyka - Babiański, Chańko-Nowa Era nr prog. DKOS /02

Wykład 6. Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Jak Windows zarządza pamięcią?

Język ANSI C tablice wielowymiarowe

IX. Wskaźniki.(3 godz.)

Matematyka stosowana i metody numeryczne

Język C zajęcia nr 7. Uwagi dotyczące stylu programowania

Analiza matematyczna i algebra liniowa

Gdyńskim Ośrodkiem Sportu i Rekreacji jednostka budżetowa

Macierz. Wyznacznik macierzy. Układ równań liniowych

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

Wykªad 8. Pochodna kierunkowa.

Uzupełnienie dot. przekazywania argumentów

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Metodyki i Techniki Programowania 2

Przekształcenia automatów skończonych

P l a n s t u d i ó w

Spis treści JĘZYK C - TABLICE DWUWYMIAROWE, OPERACJE NA TABLICACH. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Stałe, tablice dynamiczne i wielowymiarowe

Minimalizacja automatu

Transkrypt:

Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 2/27 Pln wykłdu nr 7 Informtyk 1 Politehnik Biłostok - Wydził Elektryzny Elektrotehnik, semestr II, studi stjonrne I stopni Rok kdemiki 20/2014 Sortownie Quik Sort nożenie mierzy iliotek BLAS środowisko CUDA Wykłd nr 7 (09.06.2014) Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 3/27 Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 4/27 Sortownie szykie (Quik-Sort) - fz dzieleni Tli jest dzielon n dwie zęśi wokół pewnego elementu x (nzywnego elementem entrlnym) Jko element entrlny x njzęśiej wyierny jest element środkowy (hoć może to yć tkże element losowy) Przeglądmy tlię od lewej strony, ż znjdziemy element i x, nstępnie przeglądmy tlię od prwej strony, ż znjdziemy element j x Zmienimy elementy i i j miejsmi i kontynuujemy proes przeglądni i zminy, ż nstąpi spotknie w środku tliy W ten sposó otrzymujemy tlię podzieloną n lewą zęść z wrtośimi mniejszymi lu równymi x i n prwą zęść z wrtośimi większymi lu równymi x Sortownie szykie (Quik-Sort) - fz sortowni Zwier dw rekurenyjne wywołni tej smej funkji sortowni: dl lewej i dl prwej zęśi posortownej tliy Rekurenj ztrzymuje się, gdy wielkość tliy wynosi 1 Przykłd: Sortujemy 6-elementową tlię t: Wywołnie funkji QS() m postć: QS(t,0,5);

Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 5/27 Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 6/27 Sortownie szykie (Quik-Sort) - QS(t,0,5) Element środkowy: (0+5)/2 = 2, x = t[2] = 5 Sortownie szykie (Quik-Sort) - QS(t,0,3) Element środkowy: (0+3)/2 = 1, x = t[1] = 2 Od lewej szukmy t[i] x, od prwej szukmy t[j] x, zmienimy elementy miejsmi Od lewej szukmy t[i] x, od prwej szukmy t[j] x, zmienimy elementy miejsmi 0 1 2 3 1 2 4 3 i j zmin Poszukiwni końzymy, gdy indeksy i, j mijją się Poszukiwni końzymy, gdy indeksy i, j mijją się Wywołujemy rekurenyjnie funkję QS() dl elementów z zkresów [l,j] i [i,r]: Wywołnie QS() tylko dl elementów z zkresu [2,3], gdyż po lewej stronie rozmir tliy do posortowni wynosi 1: QS(t,0,3); QS(t,4,5); QS(t,2,3); Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 7/27 Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 8/27 Sortownie szykie (Quik-Sort) - QS(t,2,3) Element środkowy: (2+3)/2 = 2, x = t[2] = 3 Od lewej szukmy t[i] x, od prwej szukmy t[j] x, zmienimy elementy miejsmi Sortownie szykie (Quik-Sort) - QS(t,4,5) Element środkowy: (4+5)/2 = 4, x = t[4] = 6 Od lewej szukmy t[i] x, od prwej szukmy t[j] x, zmienimy elementy miejsmi Poszukiwni końzymy, gdy indeksy i, j mijją się Poszukiwni końzymy, gdy indeksy i, j mijją się Rozmir ou tli do posortowni wynosi 1 wię nie m nowyh wywołń funkji QS() Rozmir ou tli do posortowni wynosi 1 wię nie m nowyh wywołń funkji QS()

Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 9/27 Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 10/27 Sortownie szykie (Quik-Sort) Funkj qsort() w języku C Funkj w języku C: Quik-Sort zostł zimplementowny w języku C w funkji: void QuikSort(int t[], int l, int r) int i,j,x,y; i=l; j=r; x=t[(l+r)/2]; do while (t[i]<x) i++; while (x<t[j]) j--; if (i<=j) y=t[i]; t[i]=t[j]; t[j]=y; i++; j--; while (i<=j); if (l<j) QuikSort(t,l,j); if (i<r) QuikSort(t,i,r); QSORT stdli.h void qsort(void *z, size_t n, size_t size, (*funkj)(onst void *element1, onst void *element2)); funkj qsort() sortuje metodą Quik-Sort tlię wskzywną przez rgument z i zwierjąą n elementów o rozmirze size funkj qsort() posługuje się funkją porównująą funkj(), której rgumentmi są wskzni do elementów tliy z funkj() powinn zwrć wrtośi: < 0, gdy *element1 < *element2 == 0, gdy *element1 == *element2 > 0, gdy *element1 > *element2 Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 /27 Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 /27 Funkj qsort() w języku C - przykłd (1/2) Funkj qsort() w języku C - przykłd (2/2) #inlude <stdio.h> #inlude <stdli.h> #inlude <time.h> #define 10 void generuj(int t[]) int i; srnd(time(ull)); for (i=0;i<;i++) t[i]=rnd()%100; void drukuj(int t[]) int i; for (i=0;i<;i++) printf("%2d ",t[i]); printf("\n"); int funkj(onst void *element1, onst void *element2) if (*(int*)element1 < *(int*)element2) return -1; if (*(int*)element1 == *(int*)element2) return 0; if (*(int*)element1 > *(int*)element2) return 1; int min() int t[]; generuj(t); drukuj(t); printf("\nqsort:\n"); qsort((void*)t,(size_t),sizeof(int),funkj); drukuj(t); system("pause"); return (0);

Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 /27 Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 14/27 Funkj qsort() w języku C - przykłd (2/2) 6 7 66 89 27 26 52 int funkj(onst void *element1, onst void *element2) if (*(int*)element1 qsort: < *(int*)element2) return -1; if (*(int*)element16== *(int*)element2) 7 26 27 return 0; 52 66 89 if (*(int*)element1 > *(int*)element2) return 1; int min() int t[]; generuj(t); drukuj(t); printf("\nqsort:\n"); qsort((void*)t,(size_t),sizeof(int),funkj); drukuj(t); system("pause"); return (0); nożenie mierzy przez mierz = = = Operj: C = A B A[][] - mierz - elementow B[][K] - mierz K - elementow C[][K] - mierz K - elementow K 23 33 23 33 = = = = 23 33 23 33 23 33 K = = = 23 33 23 23 23 33 23 33 33 33 Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 15/27 Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 16/27 nożenie mierzy przez mierz nożenie mierzy przez mierz (i) Operj: C = A B (A[][],B[][K],C[][K]) = (i) 23 23 23 33 33 33 K (k) Progrm w języku C: for (k=0; k<k; k++) C[i][k] = 0.0; for (j=0; j<; j++) C[i][k] += A[i][j] * B[j][k]; (j) ik = j= K (k) (j) i = 1,2, K, ij jk, 1 k = 1,2, K, K Koszt lgorytmu: O( n 3 ) n szykość wykonywni olizeń wpływ nie tylko liz operji zmiennoprzeinkowyh, le tkże sposó poierni dnyh z pmięi komputer oene systemy komputerowe mją hierrhizną udowę pmięi: rejestry proesor pmięć podręzn (he) pmięć operyjn pmięć zewnętrzn olizeni są efektywnie wykonywne, gdy odywją się n zmiennyh znjdująyh się w jk njszyszej pmięi

Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 17/27 Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 18/27 nożenie mierzy przez mierz nożenie mierzy przez mierz rozptrzmy dw lgorytmy mnożeni mierzy: Algorytm nr 1 for (k=0; k<; k++) for (j=0; j<; j++) C[i][k] += A[i][j]*B[j][k]; Algorytm nr 2 for (j=0; j<; j++) for (k=0; k<; k++) C[i][k] += A[i][j]*B[j][k]; mierze: 2048 2048 proesor: Intel Core i5-2410 2,30 GHz kompiltor: irosoft Visul C++ 2008 Stndrd Edition Algorytm nr 1: ez optymlizji: 268,0 [s] z optymlizją: 92,053 [s] Algorytm nr 2: ez optymlizji: 49,409 [s] z optymlizją: 6,270 [s] etod przehowywni mierzy w pmięi liniowej [0][0] [0][1] [0][2] [0][3] [1][0] [1][1] [1][2] [1][3] [2][0] [2][1] [2][2] [2][3] mierz w pmięi liniowej (wektor) mierz Pmięć podręzn (he memory) Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 19/27 Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 20/27 nożenie mierzy przez mierz Biliotek numeryzn BLAS Algorytm nr 1 for (k=0; k<k; k++) for (j=0; j<; j++) C[i][k] += A[i][j] * B[j][k]; Algorytm nr 2 for (j=0; j<; j++) for (k=0; k<k; k++) C[i][k] += A[i][j] * B[j][k]; [0][0] [0][1] [0][2] [0][3] [1][0] [1][1] [1][2] [1][3] [2][0] [2][1] [2][2] [2][3] C A B C A B BLAS - Bsi Liner Alger Suprogrms Ziór proedur służąyh do wykonywni operji n podstwowyh oiekth lgery liniowej: sklrh wektorh mierzh Stron główn: http://www.netli.org/ls Rok pulikji: 1979 Oryginlnie npisn w języku Fortrn 77 Osługuje lizy: rzezywiste pojedynzej i podwójnej preyzji zespolone pojedynzej i podwójnej preyzji

Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 /27 Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 /27 Biliotek numeryzn BLAS BLAS - zwy proedur Wyróżni się 3 poziomy strkji lgorytmów BLAS BLAS Level 1 operje typu wektor-wektor (dodwnie wektorów, normy wektor, ilozyn sklrny wektorów) y α x + y BLAS Level 2 operje typu mierz-wektor (mnożenie mierzy przez wektor) y αax + y BLAS Level 3 operje typu mierz-mierz (mnożenie mierzy przez mierz) C αa B + C DGEV - mnożenie mierzy przez wektor, mierz i wektor zwierją lizy rzezywiste podwójnej preyzji y α A x + β y lu y α A x + β y SGE - mnożenie mierzy przez mierz, mierze zwierją lizy rzezywiste pojedynzej preyzji y α op( A) op( B) + β C op( X) = X, op( X) = X, op( X) = onjg( X SSWAP - zmin wektorów zwierjąyh lizy rzezywiste pojedynzej preyzji T x y T T ) Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 23/27 Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 24/27 BLAS - Implementje GPGPU i CUDA Stron główn: http://www.netli.org/ls Stron główn zwier niezoptymlizowną iliotekę BLAS KL (Intel) Intel th Kernel Lirry (Intel KL) v http://softwre.intel.om/en-us/intel-mkl ACL (AD) AD Core th Lirry http://developer.md.om/tools-nd-sdks/pu-development/ pu-lirries/md-ore-mth-lirry-ml/ ATLAS (open soure) Automtilly Tuned Liner Alger Softwre http://mth-tls.soureforge.net/ GPGPU - Generl Purpose omputing on Grphis Proessing Units CUDA (Compute Unified Devie Arhiteture) hrdwre - równoległ rhitektur olizeniow GPU softwre - kompiltor nv, ilioteki i inne nrrzędzi VIDIA Corportion (USA) Pierwsz wersj: luty 2007 Stron WWW: http://www.nvidi.pl/ojet/ud_home_new_pl.html Lienj: freewre

Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 25/27 Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 26/27 CUDA - Jk używć? CUBLAS Wymgni: krt grfizn firmy VIDIA osługują CUDA system operyjny: Windows XP, Vist, 7, 8, Server 2003 lu 2008 oprogrmownie VIDIA CUDA Toolkit irosoft Visul Studio 2008, 2010 lu 20 Biliotek CUBLAS - implementj BLAS (Bsi Liner Alger Suprogrms) dl krt grfiznyh VIDIA i środowisk CUDA Zstosownie CUBLAS w progrmie wymg: inijlizji ilioteki CUBLAS: ulscrete() przydzieleni pmięi GPU n mierze i wektory: udllo() Instlj: sprwdzić zy krt grfizn w komputerze osługuje CUDA - wszystkie nowe krty grfizne VIDIA są komptyilne z CUDA śiągnąć oprogrmownie The VIDIA CUDA Toolkit zinstlowć The VIDIA CUDA Toolkit przesłni mierzy i wektorów do pmięi GPU: ulssettrix() wywołni odpowiednih funkji CUBLAS: ulssgemm() przesłni wyników olizeń z pmięi GPU do pmięi RA komputer: ulsgettrix() zwolnieni pmięi GPU: udfree() Pisnie włsnyh progrmów: zkońzeni pry ilioteki CUBLAS: ulsdestroy() zstosowć w Visul Studio projekt: ew Projet VIDIA CUDA 5.5 CUDA 5.5 Runtime Informtyk 1, studi stjonrne I stopni Rok kdemiki 20/2014, Wykłd nr 7 27/27 Konie wykłdu nr 7 Dziękuję z uwgę!