Paralelní architektury se sdílenou pamětí

Rozměr: px
Začít zobrazení ze stránky:

Download "Paralelní architektury se sdílenou pamětí"

Transkript

1 Paralelní architektury se sdílenou pamětí Multiprocesory Multiprocesory se sdílenou pamětí SMP architektury Přístup do paměti OpenMP

2 Multiprocesorové architektury I. Multiprocesor se skládá z několika plnohodnotných procesorů sdíleného adresového prostoru stejné adresy u dvou různých CPU ukazují na stejné místo v adr. prostoru Dělí se na systémy s fyzicky sdílenou pamětí systémy s fyzicky distribuovanou pamětí

3 Multiprocesorové systémy se sdílenou pamětí I. CPU CPU CPU CPU CPU CPU CPU CPU M M M M M M M M Interconnection network (= BUS) Global RAM I/O

4 Multiprocesorové systémy se sdílenou pamětí II. Mainframe IBM S360 Model zřejmě první dvouprocesorový systém

5 Multiprocesorové systémy se sdílenou pamětí II. tyto systémy jsou odvozeny z jednoprocesorového systému pouhým přidáním dalších CPU propojených sběrnicí (BUS) všechny procesory jsou rovnocenné odtud název - symmetric multiprocessor - SMP přístup do globální paměti je vždy stejně rychlý odtud název - uniform memory acces multiprocessor - UMA Příkladem SMP jsou dnes běžné vícejádrové PC.

6 SMP architektury ukážeme si některé současné microarchitektury založené na architektuře se sdílenou pamětí Intel Nehalem a Haswell AMD-FX MIC Intel Xeon Phi

7 SMP architektury Intel Nehalem Zdroj:

8 SMP architektury Intel Haswell a chipset X99 Zdroj: x99-motherboard-roundup-asus-x99-deluxe-gigabyte-x99-ud7-ud5-asrock-x99-ws-msi-x99s-sli-plus-intel-haswell-e/ 8

9 SMP architektury Intel Haswell Die

10 SMP architektury Intel Haswell 8 Core

11 SMP architektury AMD FX-990 Zdroj: 990fx-motherboard-roundup-with-thuban-and-bulldozer-a-second-wind-for-asus-gigabyte-msi-and-biostar

12 SMP architektury AMD Bulldozer 8 Core Zdroj: architektura Bulldozer nemá všechna jádra plnohodnotná, ale každá dvojice jader sdílí jednotky pro výpočty s pohyblivou desetinnou čárkou

13 SMP architektury AMD Bulldozer 8 Core

14 SMP architektury AMD Bulldozer 8 Core Die

15 SMP architektury MIC Intel Xeon Phi (MIC = Many Integrated Cores)

16 SMP architektury MIC Intel Xeon Phi Die

17 SMP architektury jde o urychlovač výpočtů v HPC podobný grafickým urychlovačům má vlastní pamět o velikosti až 16 GB obsahuje až 61 jader podobných Pentiu P5 efektivně dokáže zpracovávat až 244 vláken podporuje instrukce AVX současná architektura nese název Knights Corner připravuje se nástupce zvaný Knights Landing 72 jader Intel Atom až 384 GB DDR4 RAM a 8-16 GB stacked 3D MCDRAM rozšířená sada instrukcí AVX512F (=AVX3.1)

18 SMP architektury přístup do paměti již víme, že pamět ové moduly jsou až 200x pomalejší než processor i jedno jádro tak dokáže plně vytížit pamět ový subsystém pro efektivní využití více jader je (až na výjimky) nezbytné optimalizovat přístupy do paměti vše se nyní výrazně komplikuje tzv. cache coherence problémem

19 SMP architektury přístup do paměti Cache coherence problem RAM X 7 Cache Cache CPU A CPU B

20 SMP architektury přístup do paměti CPU A načítá proměnnou X RAM X 7 7 CPU A CPU B

21 SMP architektury přístup do paměti CPU B načítá proměnnou X RAM X CPU A CPU B

22 SMP architektury přístup do paměti CPU B zapisuje 2 do X, což se neprojevuje v cache procesoru A RAM X CPU A CPU B

23 SMP architektury přístup do paměti Cache coherence problem je řešen hardwarově. Existují dva způsoby řešení: update protocol invalidate protocol

24 SMP architektury přístup do paměti Update protocol - X je sdílená proměnná RAM X CPU A CPU B

25 SMP architektury přístup do paměti Procesor B zapisuje 2 do X ve své cache,... RAM X CPU A CPU B

26 SMP architektury přístup do paměti... současně mění hodnotu X i v RAM... RAM X CPU A CPU B

27 SMP architektury přístup do paměti... a v cache procesoru A. RAM X CPU A CPU B

28 SMP architektury přístup do paměti Nevýhody update protokolu: pokud procesor A načte proměnnou X jen jednou na začátku, a potom s ní pracuje pouze procesor B, zbytečně pokaždé posílá novou hodnotu

29 SMP architektury přístup do paměti Nevýhody update protokolu: pokud procesor A načte proměnnou X jen jednou na začátku, a potom s ní pracuje pouze procesor B, zbytečně pokaždé posílá novou hodnotu V současnosti se častěji používá invalidate protokol. Nazývá se také MESI protocol podle stavů cache lines: 1. Modified 2. Exclusive proměnná není sdílena více procesory 3. Shared 4. Invalid

30 SMP architektury přístup do paměti Invalidate protocol - X je sdílená proměnná, tj. označená jako SHARED RAM X CPU A CPU B

31 SMP architektury přístup do paměti Procesor B zapisuje 2 do X ve své cache a označuje X jako MODIFIED,... RAM X CPU A CPU B

32 SMP architektury přístup do paměti... současně označuje hodnotu X v RAM za neplatnou - INVALID... RAM X CPU A CPU B

33 SMP architektury přístup do paměti... a stejně tak označí i hodnotu X v cache procesoru B. RAM X CPU A CPU B

34 SMP architektury přístup do paměti Nakonec je X MODIFIED v cache CPU B a INVALID v RAM a cache CPU A. RAM X CPU A CPU B

35 SMP architektury přístup do paměti CPU A načítá X ze své cache a vidí ji označenou jako INVALID. RAM X CPU A CPU B

36 SMP architektury přístup do paměti CPU A se tedy dotazuje CPU B, které má X označenou jako MODIFIED. RAM X CPU A CPU B

37 SMP architektury přístup do paměti CPU B kopíruje hodnotu X do RAM... RAM X CPU A CPU B

38 SMP architektury přístup do paměti... a do cache CPU A. RAM X CPU A CPU B

39 SMP architektury přístup do paměti Proměnná X je nakonec všude označena jako sdílená - SHARED. RAM X CPU A CPU B

40 SMP architektury přístup do paměti Nevýhody invalidate protokolu - tzv. false sharing: protokoly update/invalidate se ve skutečnosti vždy vztahují na celou cache line dva procesory mohou měnit dvě různé proměnné uložené ve stejné cache line (přitom každý jednu a tu samou), např. dvě vlákna ukládají mezivýsledky do sdíleného pole systém to nepozná a stejně se pokaždé provádí update režie spojená s invalidate protokolem je tu zbytečná update protokol je v takové situaci lepší

41 SMP architektury přístup do paměti Snoopy cache system každý procesor odposlouchává všechnu komunikaci tj. i ostatních CPU podle toho pak nastavuje stavy SHARE, INVALID a MODIFIED u sdílených proměnných

42 SMP architektury přístup do paměti Příklad: provedeme stejný test, který jsme dělali pro sekvenční architektury nyní ale využijeme více vláken Pro připomenutí: 1 template < i nt Size > 2 class ArrayElement 3 { 4 ArrayElement next ; 5 long in t data [ Size ] ; 6 } všechny prvky seznamu se alokují jako velké pole následně se propojí bud sekvenčně nebo náhodně

43 SMP architektury přístup do paměti Test budeme provádět na následujících systémech: AMD Phenom 2 X6 1075T 6 jader 6 x 64 kb L1 cache 6 x 512 kb L2 cache 1 x 6 MB L3 cache sdílená všemi jádry Intel i7 3770K 4 jádra + hypethreading = 8 vláken 4 x 32 kb L1 cache 4 x 256 kb L2 cache 8 MB L3 cache sdílená AMD Opteron 6172 x2 dvouprocesorovy systém s až 24 vlákny každé CPU má 12 jader 12 x 128 kb L1 cache 12 x 512 kb L2 cache 1 x 12 MB L3 cache sdílená

44 SMP architektury přístup do paměti velikost Size nastavíme na 1 nejprve budeme testovat náhodný přístup do paměti při N vláknech vytvoříme N disjunktních stejně dlouhých spojových seznamů i-tý seznam začíná na i-tém prvku pole a je zakončen nulovým ukazatelem seznamy procházíme opakovaně

45 SMP architektury náhodný přístup do paměti CPU tics/element kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size Array size CPU tics/element Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size 0 1 kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size Obrázek : Vícevláknové náhodné čtení (nahoře) a zapisování (dole) na AMD Phenom 2 X6 1075T - až 6 vláken.

46 SMP architektury náhodný přístup do paměti CPU tics/element kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size Array size CPU tics/element Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size 0 1 kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size Obrázek : Vícevláknové náhodné čtení (nahoře) a zapisování (dole) na Intel i7 3770K s čtyřmi jádry a hyperthreadingem - až 8 vláken.

47 SMP architektury náhodný přístup do paměti CPU tics/element kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size Array size CPU tics/element Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size 0 1 kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size Obrázek : Vícevláknové náhodné čtení (nahoře) a zapisování (dole) na 2x AMD Opteron 6172 s dvanácti jádry - až 24 vláken.

48 SMP architektury sekvenční přístup do paměti dále provedeme test sekvenčního přístupu porovnáme dva způsoby: vlákna prochází pole na přeskáčku při N vláknech bude i-té vlákno procházet prvky i + jn, pro j = 1, 2,... každé vlákno prochází svůj blok při N vláknech rozdělíme celé pole na N disjunktních stejně velkých souvislých bloků a každé vlákno prochází jeden blok pole procházíme opakovaně

49 SMP architektury sekvenční přístup do paměti CPU tics/element Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size 0 1 kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size CPU tics/element Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size 0 1 kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size Obrázek : Vícevláknové sekvenční čtení na AMD Phenom 2 X6 1075T - až 6 vláken. Nahoře je procházení vlákny na přeskáčku dole prochází každé vlákno svůj blok.

50 SMP architektury sekvenční přístup do paměti CPU tics/element Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size 0 1 kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size CPU tics/element Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size 0 1 kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size Obrázek : Vícevláknové sekvenční zapisování na AMD Phenom 2 X6 1075T - až 6 vláken. Nahoře je procházení vlákny na přeskáčku dole prochází každé vlákno svůj blok.

51 SMP architektury sekvenční přístup do paměti CPU tics/element Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size 0 1 kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size CPU tics/element Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size 10 1 kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size Obrázek : Vícevláknové sekvenční čtení na Intel i7 3770K s čtyřmi jádry a hyperthreadingem - až 8 vláken. Nahoře je procházení vlákny na přeskáčku dole prochází každé vlákno svůj blok.

52 SMP architektury sekvenční přístup do paměti CPU tics/element Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size 0 1 kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size CPU tics/element Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size 0 1 kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size Obrázek : Vícevláknové sekvenční zapisování na Intel i7 3770K s čtyřmi jádry a hyperthreadingem - až 8 vláken. Nahoře je procházení vlákny na přeskáčku dole prochází každé vlákno svůj blok.

53 SMP architektury sekvenční přístup do paměti CPU tics/element Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB 0 1 kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size Array size CPU tics/element kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size Array size Obrázek : Vícevláknové sekvenční čtení na 2x AMD Opteron 6172 s dvanácti jádry - až 24 vláken. Nahoře je procházení vlákny na přeskáčku dole prochází každé vlákno svůj blok.

54 SMP architektury sekvenční přístup do paměti CPU tics/element Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB 0 1 kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size Array size CPU tics/element kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Bandwidth in GB/sec kb 4 kb 16 kb 64 kb 256 kb 1 MB 4 MB 16 MB 64 MB Array size Array size Obrázek : Vícevláknové sekvenční zapisování na 2x AMD Opteron 6172 s dvanácti jádry - až 24 vláken. Nahoře je procházení vlákny na přeskáčku dole prochází každé vlákno svůj blok.

55 Programování systémů se sdílenou pamětí opět vidíme, že sekvenční přístup je mnohem efektivnější než náhodný je výhodnější, když má každé vlákno svůj vlastní blok paměti, odpadá tak náročné řešení cache coherence problému zapisování do paměti může být výrazně pomalejší než čtení, obzvlášt, když vlákna přistupují do stejné oblasti v paměti

56 Programování systémů se sdílenou pamětí Programy pro architektury se sdílenou pamětí spouštějí několik souběžných vláken. Standardy: POSIX - standard pro manipulaci s vlákny OpenMP - standard pro podporu vláken na úrovni překladače u gcc překladače je pro zapnutí podpory OpenMP potřeba použít přepínač -fopenmp linkeru je potřeba předat -lgomp

57 OpenMP - základní direktiva OpenMP využívá direktivy preprocesoru. #pragma omp directive [clause list] Direktiva parallel způsobí, že následující blok instrukcí bude zpracován více vlákny. #pragma omp parallel [clause list] {... }

58 OpenMP - identifikace vláken Funkce pro identifikaci vláken: omp_get_num_threads() - vrací počet vláken omp_get_thread_num() - vrací celočíselný identifikátor vlákna

59 OpenMP - Hello 1 1 #include <omp. h> 2 #include < s t d l i b. h> 3 #include <iostream > 4 5 i n t main ( i n t argc, char argv ) 6 { 7 #pragma omp p a r a l l e l 8 { 9 std : : cout << "Hello from thread number " 10 << omp_get_thread_num ( ) << " of " 11 << omp_get_num_threads ( ) << " threads." 12 << std : : endl ; 13 } 14 return EXIT_SUCCESS ; 15 } Výstup: 1 Hello from thread number Hello from thread number 04 of 12 threads. Hello from thread nu of 2 Hello from thread number 3 of 12 threads. 3 Hello from thread number 5 of 12 threads. 4 Hello from thread number 11 of 12 threads. 5 Hello from thread number 1 of 12 threads of 12 threads. 7 Hello from thread number 2 of 12 threads. 8 Hello from thread number 6 of 12 threads threads. 10 Hello from thread number 9 of 12 threads. 11 Hello from thread number 8 of 12 threads. 12 Hello from thread number 7 of 12 threads.

60 Kritické bloky výstupy na konzoli mohou být chaotické je potřeba zařídit, aby současně nerpovádělo výpis více vláken to lze pomocí kritické sekce

61 Kritické bloky Kritické bloky obsahují kód, který může současně provádět jen jedno vlákno. #pragma omp critical [(name)]

62 Bloky pro jedno vlákno #pragma omp single {... } Tento blok bude zpracován jen jedním (prvním) vláknem. Pokud není uvedeno nowait, ostatní vlákna čekají na konci bloku. #pragma omp master {... } Tento blok bude zpracován jen vláknem s ID = 0, ostatní vlákna nečekají.

63 OpenMP - Hello s kritickou sekcí 1 std : : cout << std : : endl << "Now with critical section:" << std : : endl ; 2 #pragma omp p a r a l l e l 3 { 4 #pragma omp c r i t i c a l 5 std : : cout << "Hello from thread number " 6 << omp_get_thread_num ( ) << " of " 7 << omp_get_num_threads ( ) << " threads." 8 << std : : endl ; 9 } Výstup: 1 Now with c r i t i c a l s e c t i o n : 2 Hello from thread number 0 of 12 threads. 3 Hello from thread number 9 of 12 threads. 4 Hello from thread number 10 of 12 threads. 5 Hello from thread number 5 of 12 threads. 6 Hello from thread number 8 of 12 threads. 7 Hello from thread number 2 of 12 threads. 8 Hello from thread number 1 of 12 threads. 9 Hello from thread number 3 of 12 threads. 10 Hello from thread number 4 of 12 threads. 11 Hello from thread number 7 of 12 threads. 12 Hello from thread number 6 of 12 threads. 13 Hello from thread number 11 of 12 threads.

64 OpenMP - Hello se single sekcí 1 std : : cout << std : : endl << "Now with single section:" << std : : endl ; 2 #pragma omp p a r a l l e l 3 { 4 #pragma omp s i n g l e 5 std : : cout << "Hello from thread number " 6 << omp_get_thread_num ( ) << " of " 7 << omp_get_num_threads ( ) << " threads." 8 << std : : endl ; 9 } Výstup: 1 Now w ith s i n g l e s e c t i o n : 2 Hello from thread number 10 of 12 threads.

65 OpenMP - Hello se master sekcí 1 std : : cout << std : : endl << "Now with master section:" << std : : endl ; 2 #pragma omp p a r a l l e l 3 { 4 #pragma omp master 5 std : : cout << "Hello from thread number " 6 << omp_get_thread_num ( ) << " of " 7 << omp_get_num_threads ( ) << " threads." 8 << std : : endl ; 9 } Výstup: 1 Now w ith master s e c t i o n : 2 Hello from thread number 0 of 12 threads.

66 OpenMP - 2x Hello s kritickou sekcí 1 std : : cout << std : : endl << "Now two greetings:" << std : : endl ; 2 #pragma omp p a r a l l e l 3 { 4 #pragma omp c r i t i c a l ( p r i n t ) 5 std : : cout << "Hello number ONE from thread number " 6 << omp_get_thread_num ( ) << " of " 7 << omp_get_num_threads ( ) << " threads." 8 << std : : endl ; 9 10 #pragma omp c r i t i c a l ( p r i n t ) 11 std : : cout << "Hello number TWO from thread number " 12 << omp_get_thread_num ( ) << " of " 13 << omp_get_num_threads ( ) << " threads." 14 << std : : endl ; } Výstup: 1 Now two greetings : 2 Hello number ONE from thread number 0 of 12 threads. 3 Hello number TWO from thread number 0 of 12 threads. 4 Hello number ONE from thread number 3 of 12 threads. 5 Hello number TWO from thread number 3 of 12 threads. 6 Hello number ONE from thread number 9 of 12 threads. 7 Hello number ONE from thread number 11 of 12 threads. 8 Hello number TWO from thread number 11 of 12 threads. 9 Hello number TWO from thread number 9 of 12 threads. 10 Hello number ONE from thread number 4 of 12 threads. 11 Hello number TWO from thread number 4 of 12 threads. 12 Hello number ONE from thread number 7 of 12 threads. 13 Hello number TWO from thread number 7 of 12 threads. 14 Hello number ONE from thread number 5 of 12 threads

67 OpenMP - 2x Hello s kritickou sekcí a bariérou 1 std : : cout << std : : endl << "Now two greetings:" << std : : endl ; 2 #pragma omp p a r a l l e l 3 { 4 #pragma omp c r i t i c a l ( p r i n t ) 5 std : : cout << "Hello number ONE from thread number " 6 << omp_get_thread_num ( ) << " of " 7 << omp_get_num_threads ( ) << " threads." 8 << std : : endl ; 9 #pragma omp b a r r i e r 10 #pragma omp c r i t i c a l ( p r i n t ) 11 std : : cout << "Hello number TWO from thread number " 12 << omp_get_thread_num ( ) << " of " 13 << omp_get_num_threads ( ) << " threads." 14 << std : : endl ; } Výstup: 1... and now two g r e e t i n g s with b a r r i e r : 2 Hello number ONE from thread number 11 of 12 threads. 3 Hello number ONE from thread number 3 of 12 threads. 4 Hello number ONE from thread number 8 of 12 threads. 5 Hello number ONE from thread number 6 of 12 threads. 6 Hello number ONE from thread number 4 of 12 threads. 7 Hello number ONE from thread number 7 of 12 threads. 8 Hello number ONE from thread number 0 of 12 threads. 9 Hello number ONE from thread number 5 of 12 threads. 10 Hello number ONE from thread number 9 of 12 threads. 11 Hello number ONE from thread number 10 of 12 threads. 12 Hello number ONE from thread number 1 of 12 threads. 13 Hello number ONE from thread number 2 of 12 threads. 14 Hello number TWO from thread number 8 of 12 threads. 15 Hello number TWO from thread number 3 of 12 threads. 16 Hello number TWO from thread number 9 of 12 threads. 17 Hello number TWO from thread number 0 of 12 threads

68 OpenMP - bariéra do kódu je potřeba vložit bariéru to je bod v programu, kde na sebe všechna vlánka počkají až když každé z vláken dosáhne bariery, mohou vlákna pokračovat dále

69 OpenMP - proměnné Přístup více CPU do paměti rozlišujeme dva typy proměnných soukromé (private) - jsou přístupné jen jednomu procesoru sdílené (shared) - může k nim přistupovat více procesorů Ošetření sdílených proměnných multiprocesor se sdílenou pamětí neumožňuje, aby současně přistupovalo více procesorů na stejné místo v paměti pokud se tak stane výsledek je nepředvídatelný většinou je nutné se této situaci vyhnout dobře napsaným kódem

70 OpenMP - proměnné Pomocí [clause list] lze udat: podmínku (pouze jednu) paralelizace: if(... ) počet vláken: num_threads( integer expression ) zacházení s daty private( variable list ) Určuje lokální proměnné = každé vlákno má svou vlastní kopii. firstprivate( variable list ) Stejně jako private, ale u všech kopii se nastaví hodnota, kterou měla proměnná před rozvětvením běhu programu na vlákna. shared( variable list ) Tyto proměnné budou sdílené mezi vlákny. reduction( operator:variable list ) Dané proměnné budou mít lokální kopie a nakonec se provede redukce pomocí asociativní operace: +,*,&,,&&,.

71 Příklady #pragma omp parallel if( is_parallel == true ) num_threads(8) private(a) firstprivate(b) {... } #pragma omp parallel if( size > 1000 ) num_threads( MIN( size/1000+1,8) ) reduction(+:sum) {... }

72 OpenMP - proměnné 1 i n t main ( i n t argc, char argv ) 2 { 3 i n t shared_int ( 1 ), p r i v a t e _ i n t ( 1 ), f i r s t p r i v a t e _ i n t ( 1 ) ; 4 #pragma omp p a r a l l e l shared ( shared_int ), private ( p r i v a t e _ i n t ), 5 f i r s t p r i v a t e ( f i r s t p r i v a t e _ i n t ) 6 { 7 #pragma omp c r i t i c a l 8 std : : cout << "Variables of thread " 9 << omp_get_thread_num ( ) << " are" 10 << " shared_int = " << shared_int 11 << " private_int = " << p r i v a t e _ i n t 12 << " firstprivate_int = " << f i r s t p r i v a t e _ i n t 13 << std : : endl ; 14 #pragma omp b a r r i e r 15 shared_int ++; 16 p r i v a t e _ i n t ++; 17 f i r s t p r i v a t e _ i n t ++; 18 #pragma omp b a r r i e r 19 #pragma omp s i n g l e 20 std : : cout << "=======================================" << std : : endl ; 21 #pragma omp c r i t i c a l 22 std : : cout << "Variables of thread " 23 << omp_get_thread_num ( ) << " are" 24 << " shared_int = " << shared_int 25 << " private_int = " << p r i v a t e _ i n t 26 << " firstprivate_int = " << f i r s t p r i v a t e _ i n t 27 << std : : endl ; 28 } 29 return EXIT_SUCCESS ; 30 }

73 OpenMP - proměnné Výstup: 1 Variables of thread 0 are shared_int = 1 p r i v a t e _ i n t = 0 f i r s t p r i v a t e _ i n t = 1 2 Variables of thread 4 are shared_int = 1 p r i v a t e _ i n t = 0 f i r s t p r i v a t e _ i n t = 1 3 Variables of thread 6 are shared_int = 1 p r i v a t e _ i n t = 0 f i r s t p r i v a t e _ i n t = 1 4 Variables of thread 2 are shared_int = 1 p r i v a t e _ i n t = 0 f i r s t p r i v a t e _ i n t = 1 5 Variables of thread 7 are shared_int = 1 p r i v a t e _ i n t = 0 f i r s t p r i v a t e _ i n t = 1 6 Variables of thread 3 are shared_int = 1 p r i v a t e _ i n t = 0 f i r s t p r i v a t e _ i n t = 1 7 Variables of thread 8 are shared_int = 1 p r i v a t e _ i n t = 0 f i r s t p r i v a t e _ i n t = 1 8 Variables of thread 10 are shared_int = 1 p r i v a t e _ i n t = 0 f i r s t p r i v a t e _ i n t = 1 9 Variables of thread 9 are shared_int = 1 p r i v a t e _ i n t = 0 f i r s t p r i v a t e _ i n t = 1 10 Variables of thread 1 are shared_int = 1 p r i v a t e _ i n t = 0 f i r s t p r i v a t e _ i n t = 1 11 Variables of thread 11 are shared_int = 1 p r i v a t e _ i n t = 0 f i r s t p r i v a t e _ i n t = 1 12 Variables of thread 5 are shared_int = 1 p r i v a t e _ i n t = 0 f i r s t p r i v a t e _ i n t = 1 13 ======================================= 14 Variables of thread 0 are shared_int = 6 p r i v a t e _ i n t = 1 f i r s t p r i v a t e _ i n t = 2 15 Variables of thread 8 are shared_int = 6 p r i v a t e _ i n t = 1 f i r s t p r i v a t e _ i n t = 2 16 Variables of thread 9 are shared_int = 6 p r i v a t e _ i n t = 1 f i r s t p r i v a t e _ i n t = 2 17 Variables of thread 2 are shared_int = 6 p r i v a t e _ i n t = 1 f i r s t p r i v a t e _ i n t = 2 18 Variables of thread 1 are shared_int = 6 p r i v a t e _ i n t = 1 f i r s t p r i v a t e _ i n t = 2 19 Variables of thread 10 are shared_int = 6 p r i v a t e _ i n t = 1 f i r s t p r i v a t e _ i n t = 2 20 Variables of thread 11 are shared_int = 6 p r i v a t e _ i n t = 1 f i r s t p r i v a t e _ i n t = 2 21 Variables of thread 3 are shared_int = 6 p r i v a t e _ i n t = 1 f i r s t p r i v a t e _ i n t = 2 22 Variables of thread 5 are shared_int = 6 p r i v a t e _ i n t = 1 f i r s t p r i v a t e _ i n t = 2 23 Variables of thread 7 are shared_int = 6 p r i v a t e _ i n t = 1 f i r s t p r i v a t e _ i n t = 2 24 Variables of thread 4 are shared_int = 6 p r i v a t e _ i n t = 1 f i r s t p r i v a t e _ i n t = 2 25 Variables of thread 6 are shared_int = 6 p r i v a t e _ i n t = 1 f i r s t p r i v a t e _ i n t = 2 Kde je chyba?

74 OpenMP - proměnné 1 i n t main ( i n t argc, char argv ) 2 { 3 i n t shared_int ( 1 ), p r i v a t e _ i n t ( 1 ), f i r s t p r i v a t e _ i n t ( 1 ) ; 4 #pragma omp p a r a l l e l shared ( shared_int ), private ( p r i v a t e _ i n t ), 5 f i r s t p r i v a t e ( f i r s t p r i v a t e _ i n t ) 6 { 7 #pragma omp c r i t i c a l 8 std : : cout << "Variables of thread " 9 << omp_get_thread_num ( ) << " are" 10 << " shared_int = " << shared_int 11 << " private_int = " << p r i v a t e _ i n t 12 << " firstprivate_int = " << f i r s t p r i v a t e _ i n t 13 << std : : endl ; 14 #pragma omp b a r r i e r 15 #pragma omp c r i t i c a l 16 shared_int ++; 17 p r i v a t e _ i n t ++; 18 f i r s t p r i v a t e _ i n t ++; 19 #pragma omp b a r r i e r 20 #pragma omp s i n g l e 21 std : : cout << "=======================================" << std : : endl ; 22 #pragma omp c r i t i c a l 23 std : : cout << "Variables of thread " 24 << omp_get_thread_num ( ) << " are" 25 << " shared_int = " << shared_int 26 << " private_int = " << p r i v a t e _ i n t 27 << " firstprivate_int = " << f i r s t p r i v a t e _ i n t 28 << std : : endl ; 29 } 30 return EXIT_SUCCESS ; 31 }

75 OpenMP - proměnné 1 i n t main ( i n t argc, char argv ) 2 { 3 i n t shared_int ( 1 ), p r i v a t e _ i n t ( 1 ), f i r s t p r i v a t e _ i n t ( 1 ) ; 4 #pragma omp p a r a l l e l shared ( shared_int ), private ( p r i v a t e _ i n t ), 5 f i r s t p r i v a t e ( f i r s t p r i v a t e _ i n t ) 6 { 7 #pragma omp c r i t i c a l 8 std : : cout << "Variables of thread " 9 << omp_get_thread_num ( ) << " are" 10 << " shared_int = " << shared_int 11 << " private_int = " << p r i v a t e _ i n t 12 << " firstprivate_int = " << f i r s t p r i v a t e _ i n t 13 << std : : endl ; 14 #pragma omp b a r r i e r 15 #pragma omp atomic 16 shared_int ++; 17 p r i v a t e _ i n t ++; 18 f i r s t p r i v a t e _ i n t ++; 19 #pragma omp b a r r i e r 20 #pragma omp s i n g l e 21 std : : cout << "=======================================" << std : : endl ; 22 #pragma omp c r i t i c a l 23 std : : cout << "Variables of thread " 24 << omp_get_thread_num ( ) << " are" 25 << " shared_int = " << shared_int 26 << " private_int = " << p r i v a t e _ i n t 27 << " firstprivate_int = " << f i r s t p r i v a t e _ i n t 28 << std : : endl ; 29 } 30 return EXIT_SUCCESS ; 31 }

76 OpenMP - atomické instrukce pragma atomic způsobí použití atomických instrukcí pro přístup do paměti není to tak obecné jako kritická sekce, ale je to efektivnější Atomické instrukce jde o instrukce procesoru, jejichž zpracování nemůže přerušit jiné vlákno

77 OpenMP - určení souběžných úloh Po spuštění více vláken je nutné říci, co mají jednotlivá vlákna provádět. všechna vlákna provádějí stejnou úlohu = dělí se o for cyklus každé vlákno provádí jinou úlohu = zpracovávají sekce (sections) různého kódu

78 OpenMP - paralelizace for cyklů #pragma omp for[clause list] Klauzule pro ošetření proměnných: private firstprivate reduction lastprivate = hodnota proměnné je nastavena v posledním průběhu for cyklu

79 OpenMP - paralelizace for cyklů Klausule pro rozdělení iterací mezi vlákny - schedule schedule( schedulling_class[,parameter]) Třídy: static dynamic guided runtime

80 OpenMP - statické přidělování iterací schedule( static[, chunk-size] ) Každé vlákno postupně dostává stejný počet iterací daný pomocí chunk-size. Není-li chunk-size uvedeno, jsou všechny iterace rozděleny na n stejných částí, kde n je počet vláken. Příklad: 128 iterací, 4 vlákna schedule( static ) = 4 32 iterací schedule( static, 16 ) = 8 16 iterací

81 OpenMP - dynamické přidělování iterací schedule( dynamic[, chunk-size] ) Funguje podobně jako dynamické přidělovaní iterací. Nové iterace jsou ale přidány vláknu, které skončí svou práci jako první. Některá vlákna tak mohou provést více iterací, než ostatní.

82 OpenMP - řízené přidělování iterací schedule( guided[, chunk-size] ) Příklad: 100 iterací rozdělených po 5 20 kousků pro 16 vláken. guided s každým přidělením nových iterací exponenciálně zmenšuje chunk size. chunk-size udává dolní mez pro počet přidělených iterací.

83 OpenMP - přidělování iterací určené za chodu programu schedule(runtime) Podle systémové proměnné OMP_SCHEDULE se určí, zda se má použít static, dynamic nebo guided. Vhodné při vývoji programu pro zjištění nejvhodnější volby.

84 OpenMP - synchronizace mezi jednotlivými for cykly Standardně se nezačíná nový cyklus, dokud všechna vlákna neskončila práci na předchozím cyklu - bariéra mezi cykly. Pokud to není nutné, lze použít klauzuli nowait. #pragma omp parallel { #pragma omp for nowait for( i = 0; i < nmax; i ++ ){... } #pragma omp for for( i = 0; i < mmax; i ++ ){... } }

85 OpenMP - zpracování různých úloh každým vláknem Provádí se pomocí direktivy omp sections: #pragma omp parallel { #pragma omp sections { #pragma omp section { TaskA(); } #pragma omp section { TaskB(); } } }

86 OpenMP - zkrácené psaní direktiv Lze psát: #pragma omp parallel for shared(n) #pragma omp parallel sections

87 OpenMP - vložení direktivy parallel Musí být nastavena systémová proměnná OMP_NESTED = TRUE. #pragma omp parallel for... for( i = 0; i < N; i ++ ) #pragma omp parallel for... for( j = 0; j < N; j ++ ) #pargma omp paralle for... for( k = 0; k < N; k ++ ) #pragma omp parallel for...

88 OpenMP - kritické bloky Příklad: Částečné úlohy pro jednotlivá vlákna lze distribuovat pomocí centrální struktury (fronty). Přístup k ní pak může mít v daný okamžik jen jedno vlákno.

89 OpenMP - kritické bloky - příklad #pragma omp parallel sections { #pragma omp section { /* producer thread */ task = producer_task(); #pragma omp critical (task_queu) { insert_into_queu( task ); } } #pragma omp parallel section { /* consumer thread */ #pragma omp critical (task_queu) { task = extract_from_queu(); } } }

90 Funkce knihovny OpenMP Je nutné použít hlavičkový soubor #include <omp.h> void omp_set_num_threads( int num_threads); int omp_get_num_threads(); int omp_get_thread_num(); int omp_get_num_procs(); int omp_in_paralle();

91 Systémové proměnné OMP_NUM_THREADS setenv OMP_NUM_THREADS 8 OMP_DYNAMIC umožňuje použití funkci omp_set_num_threads nebo klauzuli num_threads setenv OMP_DYNAMIC TRUE OMP_NESTED OMP_SCHEDULE setenv OMP_SCHEDULE static,4 setenv OMP_SCHEDULE dynamic setenv OMP_SCHEDULE guided

92 Ošetření dat v OpenMP všechny proměnné, které používá jen jedno vlákno, by měly být označené jako private při častém čtení proměnné nastavené již dříve v programu je vhodné označit ji jako firstprivate přístup všech vláken ke stejným datům je vhodné provádět pomocí lokálních proměnných (vzhledem k vláknu) a nakonec použít redukci přistupují-li vlákna k různým částem velkého bloku dat, je dobré je předem explicitně rozdělit zbývající typ proměnných již musí být zřejmě sdílen

93 OpenMP - skalární součin Ukázka paralelizace skalárního součinu: 1 double scalarproductsequential ( const double v1, 2 const double v2, 3 const i n t size ) 4 { 5 double res ( 0.0 ) ; 6 for ( i n t i = 0; i < size ; i ++ ) 7 res += v1 [ i ] v2 [ i ] ; 8 return res ; 9 } double s c a l a r P r o d u c t P a r a l l e l ( const double v1, 12 const double v2, 13 const i n t size ) 14 { 15 double res ( 0.0 ) ; 16 #pragma omp p a r a l l e l for r e d u c t i o n ( + : res ), 17 schedule ( s t a t i c ), 18 f i r s t p r i v a t e ( v1, v2 ) 19 for ( i n t i = 0; i < size ; i ++ ) 20 res += v1 [ i ] v2 [ i ] ; 21 return res ; 22 }

94 OpenMP - skalární součin Parallel speed-up 2 Parallel speed-up k 4k 16k 64k 256k 1M 4M 16M 64M 256M k 4k 16k 64k 256k 1M 4M 16M 64M 256M Array size Array size Obrázek : Paralelní urychlení získané při výpočtu skalárního součinu na Intel i7 5820K (2x6 vlaken) a 2x Intel Xeon E (2x2x8 vláken).

Paralelní architektury se sdílenou pamětí

Paralelní architektury se sdílenou pamětí Paralelní architektury se sdílenou pamětí Multiprocesory Multiprocesory se sdílenou pamětí SMP architektury Přístup do paměti OpenMP Multiprocesorové architektury I. Multiprocesor se skládá z několika

Více

Vícevláknové programování na CPU: POSIX vlákna a OpenMP I. Šimeček

Vícevláknové programování na CPU: POSIX vlákna a OpenMP I. Šimeček Vícevláknové programování na CPU: POSIX vlákna a OpenMP I. Šimeček xsimecek@fit.cvut.cz Katedra počítačových systémů FIT České vysoké učení technické v Praze Ivan Šimeček, 2011 MI-PRC, LS2010/11, Predn.2

Více

Paralení programování pro vícejádrové stroje s použitím OpenMP. B4B36PDV Paralelní a distribuované výpočty

Paralení programování pro vícejádrové stroje s použitím OpenMP. B4B36PDV Paralelní a distribuované výpočty Paralení programování pro vícejádrové stroje s použitím OpenMP B4B36PDV Paralelní a distribuované výpočty Minulé cvičení: Vlákna a jejich synchronizace v C++ 11... 1 Minulé cvičení: Vlákna a jejich synchronizace

Více

Paralelní architektury se sdílenou pamětí typu NUMA. NUMA architektury

Paralelní architektury se sdílenou pamětí typu NUMA. NUMA architektury Paralelní architektury se sdílenou pamětí typu NUMA NUMA architektury Multiprocesorové systémy s distribuovanou pamětí I. úzkým hrdlem multiprocesorů se sdílenou pamětí je datová komunikace s rostoucím

Více

Vláknové programování část V

Vláknové programování část V Vláknové programování část V Lukáš Hejmánek, Petr Holub {xhejtman,hopet}@ics.muni.cz Laboratoř pokročilých síťových technologií PV192 2012 04 17 1/46 Přehled přednášky Open MP 2/46 Open MP Standard pro

Více

Úvod do OpenMP. Jiří Fürst

Úvod do OpenMP. Jiří Fürst Úvod do OpenMP Jiří Fürst Osnova: Úvod do paralelního programování Počítače se sdílenou pamětí Základy OpenMP Sdílené a soukromé proměnné Paralelizace cyklů Příklady Úvod do paralelního programování Počítač

Více

Pokročilé architektury počítačů

Pokročilé architektury počítačů Pokročilé architektury počítačů 03 Programování paralelních systémů Část II. OpenMP a MPI České vysoké učení technické, fakulta elektrotechnická A4M36PAP Pokročilé architektury počítačů Ver.1.00 1 Přehled:

Více

Přehled paralelních architektur. Dělení paralelních architektur Flynnova taxonomie Komunikační modely paralelních architektur

Přehled paralelních architektur. Dělení paralelních architektur Flynnova taxonomie Komunikační modely paralelních architektur Přehled paralelních architektur Přehled paralelních architektur Dělení paralelních architektur Flynnova taxonomie Komunikační modely paralelních architektur Přehled I. paralelní počítače se konstruují

Více

Vlákna a přístup ke sdílené paměti. B4B36PDV Paralelní a distribuované výpočty

Vlákna a přístup ke sdílené paměti. B4B36PDV Paralelní a distribuované výpočty Vlákna a přístup ke sdílené paměti B4B36PDV Paralelní a distribuované výpočty Minulé cvičení: Paralelizace nám může pomoct... 1 Minulé cvičení: Paralelizace nám může pomoct... B4B36PDV: Ale ne všechny

Více

Paralelní a distribuované výpočty (B4B36PDV)

Paralelní a distribuované výpočty (B4B36PDV) Paralelní a distribuované výpočty (B4B36PDV) Branislav Bošanský, Michal Jakob bosansky@fel.cvut.cz Artificial Intelligence Center Department of Computer Science Faculty of Electrical Engineering Czech

Více

Paralelní architektury - úvod

Paralelní architektury - úvod Paralelní architektury - úvod Úvod do paralelních architektur Příklady paralelních architektur Processor arrays Multiprocesory Multiprocesory se sdílenou pamětí Multiprocesory s distribuovanou pamětí Multipočítače

Více

Paralelní výpočetní jádro matematického modelu elektrostatického zvlákňování

Paralelní výpočetní jádro matematického modelu elektrostatického zvlákňování Paralelní výpočetní jádro matematického modelu elektrostatického zvlákňování Milan Šimko Technická univerzita v Liberci Interní odborný seminář KO MIX 19. prosince 2011 Obsah prezentace 1 MOTIVACE 2 VLÁKNOVÝ

Více

Vláknové programování část V

Vláknové programování část V Vláknové programování část V Lukáš Hejmánek, Petr Holub {xhejtman,hopet}@ics.muni.cz Laboratoř pokročilých síťových technologií PV192 2010 04 08 1/60 Přehled přednášky Open MP 2/60 Open MP Standard pro

Více

Základní operace. Prefix sum. Segmentovaný prefix-sum

Základní operace. Prefix sum. Segmentovaný prefix-sum Základní operace Paralelní redukce Paralelní redukce na architekturách se sdílenou pamětí Paralelní redukce na architekturách s distribuovanou pamětí Paralelní redukce na GPU v CUDA Prefix sum Segmentovaný

Více

Architektura Intel Atom

Architektura Intel Atom Architektura Intel Atom Štěpán Sojka 5. prosince 2008 1 Úvod Hlavní rysem Atomu je podpora platformy x86, která umožňuje spouštět a běžně používat řadu let vyvíjené aplikace, na které jsou uživatelé zvyklí

Více

Paralelní architektury - úvod

Paralelní architektury - úvod Paralelní architektury - úvod Úvod do paralelních architektur Příklady paralelních architektur Processor arrays Multiprocesory Multiprocesory se sdílenou pamětí Multiprocesory s distribuovanou pamětí Multipočítače

Více

Paralelní a distribuované výpočty (B4B36PDV)

Paralelní a distribuované výpočty (B4B36PDV) Paralelní a distribuované výpočty (B4B36PDV) Branislav Bošanský, Michal Jakob bosansky@fel.cvut.cz Artificial Intelligence Center Department of Computer Science Faculty of Electrical Engineering Czech

Více

Mezipaměti počítače. L2 cache. L3 cache

Mezipaměti počítače. L2 cache. L3 cache Mezipaměti počítače Cache paměť - mezipaměť Hlavní paměť procesoru je typu DRAM a je pomalá. Proto se mezi pomalou hlavní paměť a procesor vkládá menší, ale rychlá vyrovnávací (cache) paměť SRAM. Rychlost

Více

Pokročilé architektury počítačů

Pokročilé architektury počítačů Pokročilé architektury počítačů Tutoriál 3 CUDA - GPU Martin Milata Výpočetní model CUDA Organizace kódu Sériově organizovaný kód určený pro CPU Paralelní kód prováděný na GPU Označuje se jako kernel GPU

Více

Paralelní a distribuované výpočty (B4B36PDV)

Paralelní a distribuované výpočty (B4B36PDV) Paralelní a distribuované výpočty (B4B36PDV) Branislav Bošanský, Michal Jakob bosansky@fel.cvut.cz Artificial Intelligence Center Department of Computer Science Faculty of Electrical Engineering Czech

Více

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit Jednoduché stránkování Operační systémy Přednáška 8: Správa paměti II Hlavní paměť rozdělená na malé úseky stejné velikosti (např. 4kB) nazývané rámce (frames). Program rozdělen na malé úseky stejné velikosti

Více

Ústav technické matematiky FS ( Ústav technické matematiky FS ) / 35

Ústav technické matematiky FS ( Ústav technické matematiky FS ) / 35 Úvod do paralelního programování 2 MPI Jakub Šístek Ústav technické matematiky FS 9.1.2007 ( Ústav technické matematiky FS ) 9.1.2007 1 / 35 Osnova 1 Opakování 2 Představení Message Passing Interface (MPI)

Více

Paralelní programování

Paralelní programování Paralelní programování přednášky Jan Outrata únor květen 2011 Jan Outrata (KI UP) Paralelní programování únor květen 2011 1 / 15 Simulátor konkurence abstrakce = libovolné proložení atom. akcí sekvenčních

Více

OpenMP (Open Specification for Multi Processing)

OpenMP (Open Specification for Multi Processing) OpenMP (Open Specification for Multi Processing) OpenMP je rozhraní (application programming interface, API) pro (explicitní) programování paralelních aplikací na (jednom) počítači s více procesory (jádry)

Více

IB109 Návrh a implementace paralelních systémů. Organizace kurzu a úvod. RNDr. Jiří Barnat, Ph.D.

IB109 Návrh a implementace paralelních systémů. Organizace kurzu a úvod. RNDr. Jiří Barnat, Ph.D. IB109 Návrh a implementace paralelních systémů Organizace kurzu a úvod RNDr. Jiří Barnat, Ph.D. Sekce B109 Návrh a implementace paralelních systémů: Organizace kurzu a úvod str. 2/25 Organizace kurzu Organizace

Více

OPS Paralelní systémy, seznam pojmů, klasifikace

OPS Paralelní systémy, seznam pojmů, klasifikace Moorův zákon (polovina 60. let) : Výpočetní výkon a počet tranzistorů na jeden CPU chip integrovaného obvodu mikroprocesoru se každý jeden až dva roky zdvojnásobí; cena se zmenší na polovinu. Paralelismus

Více

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016 ZPRO cvičení 2 Martin Flusser Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague October 17, 2016 Outline I 1 Outline 2 Proměnné 3 Proměnné - cvičení 4 Funkce 5 Funkce

Více

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC Informační systémy 2 Obsah: Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC ROM RAM Paměti typu CACHE IS2-4 1 Dnešní info: Informační systémy 2 03 Informační systémy

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

přetížení operátorů (o)

přetížení operátorů (o) přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního

Více

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21 Stručný obsah 1. Hardware, procesory a vlákna... 19 2. Programování s ohledemna výkon... 45 3. Identifikování příležitostí pro paralelizmus... 93 4. Synchronizace a sdílení dat... 123 5. Vlákna v rozhraní

Více

Cvičení předmětu MI-PAR P. Tvrdík, I. Šimeček, M. Šoch

Cvičení předmětu MI-PAR P. Tvrdík, I. Šimeček, M. Šoch Cvičení předmětu MI-PAR P Tvrdík, I Šimeček, M Šoch paveltvrdik,xsimecek,soch@fitcvutcz Katedra počítačových systémů FIT České vysoké učení technické v Praze 2011 MI-PAR, ZS2011/12, Cv1-6 Příprava studijního

Více

Procesy a vlákna (Processes and Threads)

Procesy a vlákna (Processes and Threads) ÚVOD DO OPERAČNÍCH SYSTÉMŮ Ver.1.00 Procesy a vlákna (Processes and Threads) Správa procesů a vláken České vysoké učení technické Fakulta elektrotechnická 2012 Použitá literatura [1] Stallings, W.: Operating

Více

Technické prostředky počítačové techniky

Technické prostředky počítačové techniky Počítač - stroj, který podle předem připravených instrukcí zpracovává data Základní části: centrální procesorová jednotka (schopná řídit se posloupností instrukcí a ovládat další části počítače) zařízení

Více

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC Informatika 2 Technické prostředky počítačové techniky - 2 Přednáší: doc. Ing. Jan Skrbek, Dr. - KIN Přednášky: středa 14 20 15 55 Spojení: e-mail: jan.skrbek@tul.cz 16 10 17 45 tel.: 48 535 2442 Obsah:

Více

Operační systémy. Cvičení 3: Programování v C pod Unixem

Operační systémy. Cvičení 3: Programování v C pod Unixem Operační systémy Cvičení 3: Programování v C pod Unixem 1 Obsah cvičení Editace zdrojového kódu Překlad zdrojového kódu Základní datové typy, struktura, ukazatel, pole Načtení vstupních dat Poznámka: uvedené

Více

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012 Přednáška Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012 Příprava studijního programu Informatika je podporována projektem financovaným z Evropského

Více

Úvod do B4B36PDV. Organizace předmětu a seznámení se s paralelizací. B4B36PDV Paralelní a distribuované výpočty

Úvod do B4B36PDV. Organizace předmětu a seznámení se s paralelizací. B4B36PDV Paralelní a distribuované výpočty Úvod do B4B36PDV Organizace předmětu a seznámení se s paralelizací B4B36PDV Paralelní a distribuované výpočty Osnova Čím se budeme zabývat? Hodnocení předmětu Úvod do paralelního hardwaru a softwaru 1

Více

IUJCE 07/08 Přednáška č. 6

IUJCE 07/08 Přednáška č. 6 Správa paměti Motivace a úvod v C (skoro vždy) ručně statické proměnné o datový typ, počet znám v době překladu o zabírají paměť po celou dobu běhu programu problém velikosti definovaných proměnných jak

Více

Přednáška 1. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Přednáška 1. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012 Přednáška 1 Úvod do HW a OS. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012 Příprava studijního programu Informatika je podporována projektem financovaným z Evropského

Více

Architektury paralelních počítačů I.

Architektury paralelních počítačů I. Architektury paralelních počítačů I. Úvod, Koherence a konzistence u SMP Ing. Miloš Bečvář s použitím slajdů Prof. Ing. Pavla Tvrdíka, CSc. Osnova přednášky Typy paralelismu a jejich využití v arch. poč.

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

Šablony, kontejnery a iterátory

Šablony, kontejnery a iterátory 11. března 2015, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 31 Obsah přednášky 1 Šablony 2 Abstraktní datové struktury 3 Iterátory 4 Array

Více

PROGRAMOVÁNÍ V C++ CVIČENÍ

PROGRAMOVÁNÍ V C++ CVIČENÍ PROGRAMOVÁNÍ V C++ CVIČENÍ INFORMACE Michal Brabec http://www.ksi.mff.cuni.cz/ http://www.ksi.mff.cuni.cz/~brabec/ brabec@ksi.mff.cuni.cz gmichal.brabec@gmail.com PODMÍNKY ZÁPOČTU Základní podmínky společné

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro

Více

Systém adresace paměti

Systém adresace paměti Systém adresace paměti Základní pojmy Adresa fyzická - adresa, která je přenesena na adresní sběrnici a fyzicky adresuje hlavní paměť logická - adresa, kterou má k dispozici proces k adresaci přiděleného

Více

Standardní algoritmy vyhledávací.

Standardní algoritmy vyhledávací. Standardní algoritmy vyhledávací. Vyhledávací algoritmy v C++ nám umožňují vyhledávat prvky v datových kontejnerech podle různých kritérií. Také se podíváme na vyhledávání metodou půlením intervalu (binární

Více

Obecné výpočty na GPU v jazyce CUDA. Jiří Filipovič

Obecné výpočty na GPU v jazyce CUDA. Jiří Filipovič Obecné výpočty na GPU v jazyce CUDA Jiří Filipovič Obsah přednášky motivace architektura GPU CUDA programovací model jaké algoritmy urychlovat na GPU? optimalizace Motivace Moorův zákon stále platí pro

Více

Úvod do GPGPU J. Sloup, I. Šimeček

Úvod do GPGPU J. Sloup, I. Šimeček Úvod do GPGPU J. Sloup, I. Šimeček xsimecek@fit.cvut.cz Katedra počítačových systémů FIT České vysoké učení technické v Praze Ivan Šimeček, 2011 MI-PRC, LS2010/11, Predn.3 Příprava studijního programu

Více

Intel 80486 (2) Intel 80486 (1) Intel 80486 (3) Intel 80486 (4) Intel 80486 (6) Intel 80486 (5) Nezřetězené zpracování instrukcí:

Intel 80486 (2) Intel 80486 (1) Intel 80486 (3) Intel 80486 (4) Intel 80486 (6) Intel 80486 (5) Nezřetězené zpracování instrukcí: Intel 80486 (1) Vyroben v roce 1989 Prodáván pod oficiálním názvem 80486DX Plně 32bitový procesor Na svém čipu má integrován: - zmodernizovaný procesor 80386 - numerický koprocesor 80387 - L1 (interní)

Více

PROCESOR. Typy procesorů

PROCESOR. Typy procesorů PROCESOR Procesor je ústřední výkonnou jednotkou počítače, která čte z paměti instrukce a na jejich základě vykonává program. Primárním úkolem procesoru je řídit činnost ostatních částí počítače včetně

Více

Programování inženýrských aplikací

Programování inženýrských aplikací Výchova studentů pro aplikace řešené na výkonných počítačích České vysoké učení technické v Praze Fakulta strojní Programování inženýrských aplikací Jiří Fürst TENTO PROJEKT JE SPOLUFINANCOVÁN EVROPSKÝM

Více

Hlavní využití počítačů

Hlavní využití počítačů Úvod Hlavní využití počítačů Počítače jsou výkonné nástroje využívané pro zpracování dat. Provádějí: načtení a binární kódování dat provedení požadovaného výpočtu zobrazení výsledku Hlavní využití počítačů

Více

Výkonnost mikroprocesoru ovlivňují nejvíce dvě hlediska - architektura mikroprocesoru a tzv. taktovací frekvence procesoru.

Výkonnost mikroprocesoru ovlivňují nejvíce dvě hlediska - architektura mikroprocesoru a tzv. taktovací frekvence procesoru. Úvod Mikroprocesor Mikroprocesor je srdcem počítače. Provádí veškeré výpočty a operace. Je to složitý integrovaný obvod, uložený do vhodného pouzdra. Dnešní mikroprocesory vyžadují pro spolehlivou činnost

Více

Operační systémy. Přednáška 8: Správa paměti II

Operační systémy. Přednáška 8: Správa paměti II Operační systémy Přednáška 8: Správa paměti II 1 Jednoduché stránkování Hlavní paměť rozdělená na malé úseky stejné velikosti (např. 4kB) nazývané rámce (frames). Program rozdělen na malé úseky stejné

Více

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií 1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední

Více

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague Tomáš Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague Správa paměti v z/os 1 2 3 4 5 6 7 8 Data se ukládají do: REAL STORAGE = "rychlá" pamět např. RAM AUXILIARY

Více

Přidělování paměti II Mgr. Josef Horálek

Přidělování paměti II Mgr. Josef Horálek Přidělování paměti II Mgr. Josef Horálek Techniky přidělování paměti = Přidělování jediné souvislé oblasti paměti = Přidělování paměti po sekcích = Dynamické přemisťování sekcí = Stránkování = Stránkování

Více

Funkční objekty v C++.

Funkční objekty v C++. Funkční objekty v C++. Funkční objekt je instance třídy, která má jako svou veřejnou metodu operátor (), tedy operátor pro volání funkce. V dnešním článku si ukážeme jak zobecnit funkci, jak používat funkční

Více

Operační systémy. Správa paměti (SP) Požadavky na SP. Spojování a zavedení programu. Spojování programu (linking) Zavádění programu (loading)

Operační systémy. Správa paměti (SP) Požadavky na SP. Spojování a zavedení programu. Spojování programu (linking) Zavádění programu (loading) Správa paměti (SP) Operační systémy Přednáška 7: Správa paměti I Memory Management Unit (MMU) hardware umístěný na CPU čipu např. překládá logické adresy na fyzické adresy, Memory Manager software, který

Více

Hardware - komponenty počítačů Von Neumannova koncepce počítače. Von Neumannova koncepce počítače

Hardware - komponenty počítačů Von Neumannova koncepce počítače. Von Neumannova koncepce počítače V roce 1945 vystoupil na přednášce v USA matematik John von Neumann a představil architekturu samočinného univerzálního počítače (von Neumannova koncepce/schéma/architektura). Základy této koncepce se

Více

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března Polymorfismus Cíle lekce Cílem lekce je vysvětlit význam pojmu polymorfismus jako základní vlastnosti objektově orientovaného programování. Lekce objasňuje vztah časné a pozdní vazby a jejich využití.

Více

Operační systémy. Přednáška 1: Úvod

Operační systémy. Přednáška 1: Úvod Operační systémy Přednáška 1: Úvod 1 Organizace předmětu Přednášky každé úterý 18:00-19:30 v K1 Přednášející Jan Trdlička email: trdlicka@fel.cvut.z kancelář: K324 Cvičení pondělí, úterý, středa Informace

Více

Identifikátor materiálu: ICT-1-08

Identifikátor materiálu: ICT-1-08 Identifikátor materiálu: ICT-1-08 Předmět Informační a komunikační technologie Téma materiálu Motherboard, CPU a RAM Autor Ing. Bohuslav Nepovím Anotace Student si procvičí / osvojí základní desku počítače.

Více

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje f1(&pole[4]); funkci f1 předáváme hodnotu 4. prvku adresu 4. prvku adresu 5. prvku hodnotu 5. prvku symbolická konstanta pro konec souboru je eof EOF FEOF feof Správné vytvoření a otevření textového souboru

Více

Operační systémy. Přednáška 4: Komunikace mezi procesy

Operační systémy. Přednáška 4: Komunikace mezi procesy Operační systémy Přednáška 4: Komunikace mezi procesy 1 Časově závislé chyby Dva nebo několik procesů používá (čte/zapisuje) společné sdílené prostředky (např. sdílená paměť, sdílení proměnné, sdílené

Více

Úvod do architektur personálních počítačů

Úvod do architektur personálních počítačů Úvod do architektur personálních počítačů 1 Cíl přednášky Popsat principy proudového zpracování informace. Popsat principy zřetězeného zpracování instrukcí. Zabývat se způsoby uplatnění tohoto principu

Více

2.8 Procesory. Střední průmyslová škola strojnická Vsetín. Ing. Martin Baričák. Název šablony Název DUMu. Předmět Druh učebního materiálu

2.8 Procesory. Střední průmyslová škola strojnická Vsetín. Ing. Martin Baričák. Název šablony Název DUMu. Předmět Druh učebního materiálu Název školy Číslo projektu Autor Název šablony Název DUMu Tematická oblast Předmět Druh učebního materiálu Anotace Vybavení, pomůcky Ověřeno ve výuce dne, třída Střední průmyslová škola strojnická Vsetín

Více

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115 Číslo projektu: Číslo šablony: 3 CZ.1.07/1.5.00/34.0410 Název materiálu: Ročník: Identifikace materiálu: Jméno autora: Předmět: Tématický celek:

Více

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague Tomáš Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague Zjednodušené schéma systému z základ hardware pro mainframe tvoří: operační pamět - MAIN / REAL STORAGE jeden

Více

Programování v C++ 1, 1. cvičení

Programování v C++ 1, 1. cvičení Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených

Více

Procesor Intel Pentium (1) Procesor Intel Pentium (3) Procesor Intel Pentium Pro (1) Procesor Intel Pentium (2)

Procesor Intel Pentium (1) Procesor Intel Pentium (3) Procesor Intel Pentium Pro (1) Procesor Intel Pentium (2) Procesor Intel Pentium (1) 32-bitová vnitřní architektura s 64-bitovou datovou sběrnicí Superskalární procesor: obsahuje více než jednu (dvě) frontu pro zřetězené zpracování instrukcí (značeny u, v) poskytuje

Více

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague Tomáš Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague Správa paměti v zos 1 2 3 4 5 6 7 Data se ukládají do: REAL STORAGE = "rychlá" pamět např. RAM AUXILIARY

Více

Semestrální práce KIV/PC Řešení kolizí frekvencí sítě vysílačů Zdeněk Bečvář A14B0466P 10. ledna 2016

Semestrální práce KIV/PC Řešení kolizí frekvencí sítě vysílačů Zdeněk Bečvář A14B0466P 10. ledna 2016 Semestrální práce KIV/PC Řešení kolizí frekvencí sítě vysílačů Zdeněk Bečvář A14B0466P 10. ledna 2016 Obsah 1 Zadání 1 2 Analýza úlohy 2 2.1 Uložení dat ze vstupního souboru................ 2 2.2 Graf

Více

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí Velké projekty v C velký = 100ky a více řádek udržovatelnost, bezpečnost, přehlednost kódu rozdělení programu do více souborů další prvky globální proměnné, řízení viditelnosti proměnných, funkcí Globální

Více

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Základy programování Úloha: Eratosthenovo síto Autor: Josef Hrabal Číslo: HRA0031 Datum: 28.11.2009 Předmět: ZAP Obsah 1 Zadání úkolu: 3 1.1 Zadání:............................... 3 1.2 Neformální zápis:.........................

Více

Operační systémy. Přednáška 7: Správa paměti I

Operační systémy. Přednáška 7: Správa paměti I Operační systémy Přednáška 7: Správa paměti I 1 Správa paměti (SP) Memory Management Unit (MMU) hardware umístěný na CPU čipu např. překládá logické adresy na fyzické adresy, Memory Manager software, který

Více

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr Koncepce (větších) programů Základy programování 2 Tomáš Kühr Parametry a návratová hodnota main Již víme, že main je funkce A také tušíme, že je trochu jiná než ostatní funkce v programu Funkce main je

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Strukturované proměnné Struktura, union Jazyk C České vysoké učení technické Fakulta elektrotechnická A8B14ADP Jazyk C - Strukturované proměnné Ver.1.10 J. Zděnek 20151 Struktura

Více

Programování v C++ 3, 3. cvičení

Programování v C++ 3, 3. cvičení Programování v C++ 3, 3. cvičení úvod do objektově orientovaného programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Dokončení spojového

Více

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2 Základy informatiky 2. Přednáška HW Lenka Carr Motyčková February 22, 2011 Základy informatiky 1 February 22, 2011 Základy informatiky 2 February 22, 2011 Základy informatiky 3 February 22, 2011 Základy

Více

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky - Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky - Preprocesor je možné ovládat pomocí příkazů - řádky začínající

Více

Konstruktory a destruktory

Konstruktory a destruktory Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,

Více

Blue Gene 24. 11. 2009. Vysoká škola báňská-technická univerzita Ostrava. Blue Gene. Karel Chrastina. Úvod. Blue Gene L. Blue Gene P.

Blue Gene 24. 11. 2009. Vysoká škola báňská-technická univerzita Ostrava. Blue Gene. Karel Chrastina. Úvod. Blue Gene L. Blue Gene P. Blue Gene Vysoká škola báňská-technická univerzita Ostrava 24. 11. 2009 Obsah prezentace 1 2 3 4 5 Trocha pojmů a historie FLOPS FLoating point Operations Per Second. Někdy se zapisuje jako flop, flop/s.

Více

Motivace. Software. Literatura a odkazy

Motivace. Software. Literatura a odkazy Využití paralelních výpočtů ve stavební mechanice Motivace Paralelní počítače Software Možnosti využití ve stavební mechanice Příklady Literatura a odkazy 1 Motivace Časová náročnost výpočtů Rozsáhlé úlohy

Více

Roman Výtisk, VYT027

Roman Výtisk, VYT027 Roman Výtisk, VYT027 Ohlédnutí za architekturou AMD K8 Představení architektury procesoru AMD K10 Přínos Struktura cache IMC, HyperTransport sběrnice Použitá literatura Ohlášení x86-64 architektury 5.

Více

Programování bez vláken. OpenMP

Programování bez vláken. OpenMP Programování bez vláken Tradiční přístup je vytvoření vícevláknového programu, kde se řekne, co má které vlákno dělat Ale jde to i jinak, lze vytvořit program tak, že se řekne, co se má udělat paralelně

Více

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna Principy operačních systémů Lekce 5: Multiprogramming a multitasking, vlákna Multiprogramování předchůdce multitaskingu Vzájemné volání: Implementován procesem (nikoliv OS) Procesu je přidělen procesor,

Více

Pavel Procházka. 3. prosince 2014

Pavel Procházka. 3. prosince 2014 Jazyk C# (seminář 11) Pavel Procházka KMI 3. prosince 2014 Motivace Dnes už se prakticky nedělají jednojádrové procesory pokud potřebujeme výkon, musíme zapojit všechna jádra Často potřebujeme dělat více

Více

Paměti. Paměť je zařízení, které slouží k ukládání programů a dat, s nimiž počítač pracuje

Paměti. Paměť je zařízení, které slouží k ukládání programů a dat, s nimiž počítač pracuje Paměti Paměť je zařízení, které slouží k ukládání programů a dat, s nimiž počítač pracuje Paměti počítače lze rozdělit do tří základních skupin: registry paměťová místa na čipu procesoru jsou používány

Více

Šablony, kontejnery a iterátory

Šablony, kontejnery a iterátory 7. října 2010, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 21 Šablona funkce/metody Šablona je obecný popis (třídy, funkce) bez toho, že by

Více

VÝUKOVÝ MATERIÁL. 3. ročník učebního oboru Elektrikář Přílohy. bez příloh. Identifikační údaje školy

VÝUKOVÝ MATERIÁL. 3. ročník učebního oboru Elektrikář Přílohy. bez příloh. Identifikační údaje školy VÝUKOVÝ MATERIÁL Identifikační údaje školy Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková

Více

Programování v C++ 2, 8. cvičení

Programování v C++ 2, 8. cvičení Programování v C++ 2, 8. cvičení návrhový vzor iterátor 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené látky

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Páté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 5. týden

Více

Paralelní programování

Paralelní programování Paralelní programování přednáška 5 Michal Krupka 15. března 2011 Michal Krupka (KI UP) Paralelní programování 15. března 2011 1 / 13 Ještě ke kritickým sekcím Použití v praxi obvykle pomocí zámků (locks)

Více

09. Memory management. ZOS 2006, L.Pešička

09. Memory management. ZOS 2006, L.Pešička 09. Memory management ZOS 2006, L.Pešička Správa paměti paměťová pyramida absolutní adresa relativní adresa počet bytů od absolutní adresy fyzický prostor adres fyzicky k dispozici výpočetnímu systému

Více

ARCHITEKTURA PROCESORŮ

ARCHITEKTURA PROCESORŮ ARCHITEKTURA PROCESORŮ Základními jednotkami, které tvoří vnitřní strukturu procesorů, jsou: řadič, který má za úkol číst operandy (data, čísla) a instrukce z operační paměti, dekódovat je a na základě

Více

Paralelní a distribuované výpočty (B4B36PDV)

Paralelní a distribuované výpočty (B4B36PDV) Paralelní a distribuované výpočty (B4B36PDV) Branislav Bošanský, Michal Jakob bosansky@fel.cvut.cz Artificial Intelligence Center Department of Computer Science Faculty of Electrical Engineering Czech

Více

Část 2 POROVNÁNÍ VÝKONNOSTI A POUŽITELNOSTI ARCHITEKTUR V TYPICKÝCH APLIKACÍCH

Část 2 POROVNÁNÍ VÝKONNOSTI A POUŽITELNOSTI ARCHITEKTUR V TYPICKÝCH APLIKACÍCH Část 2 POROVNÁNÍ VÝKONNOSTI A POUŽITELNOSTI ARCHITEKTUR V TYPICKÝCH APLIKACÍCH Paralelizace kódu Rozdíl v přístupu k paralelizaci kódu si ukážeme na operaci násobení matice maticí: Mějme tři čtvercové

Více