Architektury se sílenou pamětí
Transkript
Paralelní architektury se sdílenou pamětí Multiprocesory Multiprocesory se sdílenou pamětí OpenMP SMP architektury Přístup do paměti Multiprocesorové architektury I. Multiprocesor se skládá z I I několika plnohodnotných procesorů sdíleného adresového prostoru I stejné adresy u dvou různých CPU ukazují na stejné místo v adr. prostoru Dělí se na I systémy s fyzicky sdílenou pamětí I systémy s fyzicky distribuovanou pamětí 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 Multiprocesorové systémy se sdílenou pamětí II. Mainframe IBM S360 Model 65 – 1965 I zřejmě první dvouprocesorový systém Multiprocesorové systémy se sdílenou pamětí II. I I 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é I I odtud název - symmetric multiprocessor - SMP přístup do globální paměti je vždy stejně rychlý I odtud název - uniform memory acces multiprocessor UMA Příkladem SMP jsou dnes běžné vícejádrové PC. Multiprocesorové systémy se sdílenou pamětí III. Přístup více CPU do paměti I rozlišujeme dva typy proměnných I I 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 I multiprocesor se sdílenou pamětí neumožňuje, aby současně přistupovalo více procesorů na stejné místo v paměti I I 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 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: I POSIX - standard pro manipulaci s vlákny I OpenMP - standard pro podporu vláken na úrovni překladače I u gcc překladače je pro zapnutí podpory OpenMP potřeba použít přepínač -fopenmp I linkeru je potřeba předat -lgomp Základní direktiva OpenMP 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 [clouse list] { ... } Direktiva parallel Pomocí [clouse list] lze udat: I podmínku (pouze jednu) paralelizace: if( ... ) I počet vláken: num_threads( integer expression ) zacházení s daty I I I I I 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: +,*,&, |,&&, ||. 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) { ... } Pomocné funkce (1) 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 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. I všechna vlákna provádějí stejnou úlohu = dělí se o for cyklus I každé vlákno provádí jinou úlohu = zpracovávají sekce (sections) různého kódu Paralelizace for cyklů #pragma omp for[clause list] Klauzule pro ošetření proměnných: I private I firstprivate I reduction I lastprivate = hodnota proměnné je nastavena v posledním průběhu for cyklu Paralelizace for cyklů Klausule pro rozdělení iterací mezi vlákny - schedule schedule( schedulling_class[,parameter]) Třídy: I static I dynamic I guided I runtime 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í 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í. Ří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í. 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. 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 ++ ){ ... } } 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(); } } } Zkrácené psaní direktiv Lze psát: #pragma omp parallel for shared(n) #pragma omp parallel sections 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 ... Synchronizace Bariéra = žádné vlákno nesmí pokračovat, dokud všechna ostatní nedosáhnou bariéry. #pragma omp barriere 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í. Kritické bloky Kritické bloky obsahují kód, který může současně provádět jen jedno vlákno. #pragma omp critical [(name)] 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. 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(); } } } 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(); Systémové proměnné I OMP_NUM_THREADS I I OMP_DYNAMIC I I I I setenv OMP_NUM_THREADS 8 umožňuje použití funkci omp_set_num_threads nebo klauzuli num_threads setenv OMP_DYNAMIC ”TRUE” OMP_NESTED OMP_SCHEDULE I I I setenv OMP_SCHEDULE ”static,4” setenv OMP_SCHEDULE ”dynamic” setenv OMP_SCHEDULE ”guided” SMP architektury I ukážeme si některé současné microarchitektury založené na architektuře se sdílenou pamětí I I I Intel Nehalem a Haswell AMD-FX MIC Intel Xeon Phi SMP architektury Intel Nehalem Zdroj: http://www.ni.com/white-paper/11266/en/ SMP architektury Intel Haswell a chipset X99 Zdroj: http://www.anandtech.com/show/8557/ x99-motherboard-roundup-asus-x99-deluxe-gigabyte-x99-ud7-ud5-asrock-x99-ws-msi-x99s-sli-plus-intel-haswell-e/ 8 SMP architektury Intel Haswell Die SMP architektury Intel Haswell 8 Core SMP architektury AMD FX-990 Zdroj: http://www.anandtech.com/show/5714/ 990fx-motherboard-roundup-with-thuban-and-bulldozer-a-second-wind-for-asus-gigabyte-msi-and-biostar SMP architektury AMD Bulldozer 8 Core Zdroj: http://www.anandtech.com/show/2881/2 I architektura Bulldozer nemá všechna jádra plnohodnotná, ale každá dvojice jader sdílí jednotky pro výpočty s pohyblivou desetinnou čárkou SMP architektury AMD Bulldozer 8 Core SMP architektury AMD Bulldozer 8 Core Die SMP architektury MIC Intel Xeon Phi (MIC = Many Integrated Cores) SMP architektury MIC Intel Xeon Phi Die SMP architektury I I I I I I I 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 I I I 72 jader Intel Atom až 384 GB DDR4 RAM a 8-16 GB stacked 3D MCDRAM rozšířená sada instrukcí AVX512F (=AVX3.1) SMP architektury – přístup do paměti I již víme, že pamět’ové moduly jsou až 70x pomalejší než processor I i jedno jádro tak dokáže plně vytížit pamět’ový subsystém I pro efektivní využití více jader je (až na výjimky) nezbytné optimalizovat přístupy do paměti I vše se nyní výrazně komplikuje tzv. cache coherence problémem SMP architektury – přístup do paměti Cache coherence problem RAM X 7 Cache Cache CPU A CPU B SMP architektury – přístup do paměti CPU A načítá proměnnou X RAM X 7 7 CPU A CPU B SMP architektury – přístup do paměti CPU B načítá proměnnou X RAM X 7 7 7 CPU A CPU B SMP architektury – přístup do paměti CPU B zapisuje 2 do X , což se neprojevuje v cache procesoru A RAM X 2 7 2 CPU A CPU B SMP architektury – přístup do paměti Cache coherence problem je řešen hardwarově. Existují dva způsoby řešení: I update protocol I invalidate protocol SMP architektury – přístup do paměti Update protocol - X je sdílená proměnná RAM X 7 7 7 CPU A CPU B SMP architektury – přístup do paměti Procesor B zapisuje 2 do X ve své cache, ... RAM X 7 7 2 CPU A CPU B SMP architektury – přístup do paměti ... současně mění hodnotu X i v RAM ... RAM X 2 2 2 CPU A CPU B SMP architektury – přístup do paměti ... a v cache procesoru A. RAM X 2 2 2 CPU A CPU B SMP architektury – přístup do paměti Nevýhody update protokolu: I 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 SMP architektury – přístup do paměti Nevýhody update protokolu: I 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 SMP architektury – přístup do paměti Invalidate protocol - X je sdílená proměnná, tj. označená jako SHARED RAM X 7 7 7 CPU A CPU B SMP architektury – přístup do paměti Procesor B zapisuje 2 do X ve své cache a označuje X jako MODIFIED, ... RAM X 7 7 2 CPU A CPU B SMP architektury – přístup do paměti ... současně označuje hodnotu X v RAM za neplatnou INVALID ... RAM X 7 7 2 CPU A CPU B SMP architektury – přístup do paměti ... a stejně tak označí i hodnotu X v cache procesoru B. RAM X 7 7 2 CPU A CPU B 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 7 7 2 CPU A CPU B SMP architektury – přístup do paměti CPU A načítá X ze své cache a vidí ji označenou jako INVALID. RAM X 7 7 2 CPU A CPU B SMP architektury – přístup do paměti CPU A se tedy dotazuje CPU B, které má X označenou jako MODIFIED. RAM X 7 7 2 CPU A CPU B SMP architektury – přístup do paměti CPU B kopíruje hodnotu X do RAM ... RAM X 2 7 2 CPU A CPU B SMP architektury – přístup do paměti ... a do cache CPU A. RAM X 2 2 2 CPU A CPU B SMP architektury – přístup do paměti Proměnná X je nakonec všude označena jako sdílená SHARED. RAM X 2 2 2 CPU A CPU B SMP architektury – přístup do paměti Nevýhody invalidate protokolu - tzv. false sharing: I I 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), I např. dvě vlákna ukládají mezivýsledky do sdíleného pole I systém to nepozná a stejně se pokaždé provádí update I režie spojená s invalidate protokolem je tu zbytečná I update protokol je v takové situaci lepší SMP architektury – přístup do paměti Snoopy cache system I každý procesor odposlouchává všechnu komunikaci tj. i ostatních CPU I podle toho pak nastavuje stavy SHARE, INVALID a MODIFIED u sdílených proměnných SMP architektury – přístup do paměti Příklad: I I provedeme stejný test, který jsme dělali pro sekvenční architektury nyní ale využijeme více vláken Pro připomenutí: 1 2 3 4 5 6 template < i n t Size > class ArrayElement { ArrayElement ∗ n e x t ; long i n t data [ Size ] ; } I I všechny prvky seznamu se alokují jako velké pole následně se propojí bud’ sekvenčně nebo náhodně SMP architektury – přístup do paměti Test budeme provádět na následujících systémech: I AMD Phenom 2 X6 1075T I I I I I Intel i7 3770K I I I I I 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 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 I I I I I 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á SMP architektury – přístup do paměti I I I I I 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ě SMP architektury – náhodný přístup do paměti CPU tics/element 250 1 2 3 4 5 6 Bandwidth in GB/sec 300 200 150 100 50 0 1 kB CPU tics/element 250 16 kB 64 kB 256 kB 1 MB Array size 4 MB 16 MB 64 MB 1 2 3 4 5 6 4 kB 16 kB 64 kB 256 kB 1 MB Array size 15 1 2 3 4 5 6 Bandwidth in GB/sec 300 4 kB 75 70 65 60 55 50 45 40 35 30 25 20 15 10 5 0 1 kB 200 150 100 4 MB 16 MB 64 MB 1 2 3 4 5 6 10 5 50 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB Array size 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 Obrázek : Vícevláknové náhodné čtení (nahoře) a zapisování (dole) na AMD Phenom 2 X6 1075T - až 6 vláken. SMP architektury – náhodný přístup do paměti CPU tics/element 200 150 1 2 3 4 5 6 7 8 Bandwidth in GB/sec 250 100 50 0 1 kB CPU tics/element 200 150 16 kB 64 kB 256 kB 1 MB Array size 4 MB 16 MB 64 MB 1 2 3 4 5 6 7 8 4 kB 16 kB 64 kB 256 kB 1 MB Array size 10 1 2 3 4 5 6 7 8 Bandwidth in GB/sec 250 4 kB 110 105 100 95 90 85 80 75 70 65 60 55 50 45 40 35 30 25 20 15 10 5 0 1 kB 100 4 MB 16 MB 64 MB 1 2 3 4 5 6 7 8 5 50 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB Array size 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 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. SMP architektury – náhodný přístup do paměti CPU tics/element 150 1 2 4 8 12 16 20 24 Bandwidth in GB/sec 200 100 50 0 1 kB CPU tics/element 150 16 kB 64 kB 256 kB 1 MB Array size 4 MB 16 MB 64 MB 1 2 4 8 12 16 20 24 4 kB 16 kB 64 kB 256 kB 1 MB Array size 25 1 2 4 8 12 16 20 24 100 4 MB 16 MB 64 MB 1 2 4 8 12 16 20 24 20 Bandwidth in GB/sec 200 4 kB 90 85 80 75 70 65 60 55 50 45 40 35 30 25 20 15 10 5 0 1 kB 15 10 50 5 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB Array size 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 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. SMP architektury – sekvenční přístup do paměti I I dále provedeme test sekvenčního přístupu porovnáme dva způsoby: I vlákna prochází pole na přeskáčku I I každé vlákno prochází svůj blok I I při N vláknech bude i-té vlákno procházet prvky i + jN, pro j = 1, 2, . . . 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ě SMP architektury – sekvenční přístup do paměti 1 2 3 4 5 6 CPU tics/element 20 15 10 80 1 2 3 4 5 6 70 60 Bandwidth in GB/sec 25 50 40 30 20 5 10 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB 0 1 kB 4 MB 16 MB 64 MB 4 kB Array size 16 kB 64 kB 256 kB 1 MB 4 MB 16 MB 64 MB Array size 1 2 3 4 5 6 10 5 80 1 2 3 4 5 6 70 60 Bandwidth in GB/sec CPU tics/element 15 50 40 30 20 10 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB Array size 4 MB 16 MB 64 MB 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB Array size 4 MB 16 MB 64 MB 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. SMP architektury – sekvenční přístup do paměti 1 2 3 4 5 6 50 45 CPU tics/element 40 35 30 25 20 15 20 Bandwidth in GB/sec 55 1 2 3 4 5 6 10 10 5 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB 0 1 kB 4 MB 16 MB 64 MB 4 kB Array size CPU tics/element 4 MB 16 MB 64 MB Array size 1 2 3 4 5 6 15 16 kB 64 kB 256 kB 1 MB 10 5 80 1 2 3 4 5 6 70 60 Bandwidth in GB/sec 20 50 40 30 20 10 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB Array size 4 MB 16 MB 64 MB 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB Array size 4 MB 16 MB 64 MB 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. SMP architektury – sekvenční přístup do paměti 1 2 3 4 5 6 7 8 5 110 1 2 3 4 5 6 7 8 100 90 Bandwidth in GB/sec CPU tics/element 10 80 70 60 50 40 30 20 10 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB 0 1 kB 4 MB 16 MB 64 MB 4 kB Array size 4 MB 16 MB 64 MB Array size 1 2 3 4 5 6 7 8 CPU tics/element 16 kB 64 kB 256 kB 1 MB 120 1 2 3 4 5 6 7 8 110 100 Bandwidth in GB/sec 5 90 80 70 60 50 40 30 20 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB Array size 4 MB 16 MB 64 MB 10 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB Array size 4 MB 16 MB 64 MB 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. SMP architektury – sekvenční přístup do paměti 1 2 3 4 5 6 7 8 CPU tics/element 15 10 20 Bandwidth in GB/sec 20 1 2 3 4 5 6 7 8 10 5 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB 0 1 kB 4 MB 16 MB 64 MB 4 kB Array size 16 kB 64 kB 256 kB 1 MB 4 MB 16 MB 64 MB Array size 1 2 3 4 5 6 7 8 5 70 1 2 3 4 5 6 7 8 60 Bandwidth in GB/sec CPU tics/element 10 50 40 30 20 10 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB Array size 4 MB 16 MB 64 MB 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB Array size 4 MB 16 MB 64 MB 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. SMP architektury – sekvenční přístup do paměti 1 2 4 8 12 16 20 24 30 CPU tics/element 25 20 15 10 120 1 2 4 8 12 16 20 24 110 100 90 Bandwidth in GB/sec 35 80 70 60 50 40 30 20 5 10 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB 0 1 kB 4 MB 16 MB 64 MB 4 kB CPU tics/element 10 1 2 4 8 12 16 20 24 5 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB Array size 16 kB 64 kB 256 kB 1 MB 4 MB 16 MB 64 MB Array size 4 MB 16 MB 64 MB Bandwidth in GB/sec Array size 270 260 250 240 230 220 210 200 190 180 170 160 150 140 130 120 110 100 90 80 70 60 50 40 30 20 10 0 1 kB 1 2 4 8 12 16 20 24 4 kB 16 kB 64 kB 256 kB 1 MB Array size 4 MB 16 MB 64 MB 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. SMP architektury – sekvenční přístup do paměti 1 2 4 8 12 16 20 24 35 CPU tics/element 30 25 20 15 30 Bandwidth in GB/sec 40 1 2 4 8 12 16 20 24 20 10 10 5 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB 0 1 kB 4 MB 16 MB 64 MB 4 kB 25 1 2 4 8 12 16 20 24 CPU tics/element 20 15 10 5 0 1 kB 4 kB 16 kB 64 kB 256 kB 1 MB Array size 16 kB 64 kB 256 kB 1 MB 4 MB 16 MB 64 MB Array size 4 MB 16 MB 64 MB Bandwidth in GB/sec Array size 260 250 240 230 220 210 200 190 180 170 160 150 140 130 120 110 100 90 80 70 60 50 40 30 20 10 0 1 kB 1 2 4 8 12 16 20 24 4 kB 16 kB 64 kB 256 kB 1 MB Array size 4 MB 16 MB 64 MB 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. Ošetření dat v OpenMP I opět vidíme, že sekvenční přístup je mnohem efektivnější než náhodný I 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 I 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
Podobné dokumenty
Apple iPhone 4S: za tajemstvím hardwaru - Živě.cz
Po ročním čekání Apple nakonec neuvedl bájný iPhone 5, ale pouze vylepšenou verzi iPhonu 4 s označením iPhone 4S.
Tento postup se udál i při přechodu z minulé generace, kdy se po iPhone 3G objevil ...
ONLY IN BATTLEFIELD 3
„záznam ze hry“). Soutěţní video se musí týkat hry BATTLEFIELD 3, jak na základě
vlastního rozhodnutí určil sponzor. Do soutěţe nebudou přijata díla skupin, týmů či více
autorů. Pro účely soutěţe b...
Ukázka knihy - Computer Media sro
u grafického rozhraní různých operačních systémů - tj. pokud se uživatel naučí orientovat například ve
Windows, nebude mu činit velké potíže přejít například na operační systém Linux. Podstatné prvk...
Slidy - InstallFest
● Zarovnání na erase block nedává smysl
Vytvářejte FS s velikostí bloku rovnou stránce
● mkfs.ext4/mkfs.xfs -b 8k
● mkfs.btrfs -n 8k
Plánování - Aldebaran
může reagovat na některé I/O události – vstup z klávesnice, čtení z disku, apod.
– čekající vlákno je aktivováno a ještě je mu zvýšena priorita např. o 2);
• po proběhnutí prvního časového kvanta j...
DATABÁZOVÉ A INFORMAˇCNÍ SYSTÉMY
Tyto proměnné mají stejný efekt jako bychom na databázi
poslali totožné dotazy, přestože za proměnou dosazujeme
Výběr z ceníku komponent
WD20EARX
ATX
64MB SATAIII/ 600 IntelliPower2730
3RZ
Core i5-680, 3.6GHz, 2.5 GT/s, 4MB, LGA1156, 32nm, BOX
6780 GA-990FXA-D3, 990FX , DualDDR3-1866, 6x SATA2,2632
RAID, WD
ATX30EZRX 3TB HDD, SATA/6...