Paralelní architektury se sdílenou pamětí
|
|
- Marta Novotná
- před 6 lety
- Počet zobrazení:
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í 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íceVí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íceParalení 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íceParalelní 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íceVlá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 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ícePokroč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ícePř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íceVlá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íceParalelní 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íceParalelní 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íceParalelní 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íceVlá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íceZá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íceArchitektura 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íceParalelní 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íceParalelní 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íceMezipamě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ícePokroč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íceParalelní 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íceOperač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
Ú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íceParalelní 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íceOpenMP (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íceIB109 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íceOPS 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íceMartin 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íceSbě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íce1. 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ícepř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íceObsah. 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íceCvič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íceProcesy 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íceTechnické 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íceSbě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íceOperač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ícePř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 Osnova Čím se budeme zabývat? Hodnocení předmětu Úvod do paralelního hardwaru a softwaru 1
VíceIUJCE 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ícePř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íceArchitektury 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íce1. 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
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ícePROGRAMOVÁ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ícePokroč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íceSysté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íceStandardní 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íceObecné 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 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íceIntel 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ícePROCESOR. 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íceProgramová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íceHlavní 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íceVý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íceOperač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í
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íceFaculty 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ícePř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íceFunkč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íceOperač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íceHardware - 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ícePolymorfismus. Č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íceOperač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íceIdentifiká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íceSprá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íceOperač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čů 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íce2.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íceGymná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íceFaculty 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íceProgramová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íceProcesor 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íceFaculty 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íceSemestrá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íceIUJCE 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íceZá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íceOperač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íceKoncepce (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íceAlgoritmizace 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íceProgramová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íceZá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ícePří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íceKonstruktory 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íceBlue 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íceMotivace. 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íceRoman 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íceProgramová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ícePrincipy 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ícePavel 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ícePamě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
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íceVÝ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íceProgramová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íceZá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íceParalelní 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íce09. 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íceARCHITEKTURA 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íceParalelní 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 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