Architektury se sílenou pamětí

Transkript

Architektury se sílenou pamětí
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

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 ...

Více

ONLY IN BATTLEFIELD 3

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...

Více

Ukázka knihy - Computer Media sro

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...

Více

Slidy - InstallFest

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

Více

Plánování - Aldebaran

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...

Více

DATABÁZOVÉ A INFORMAˇCNÍ SYSTÉMY

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íce

Výběr z ceníku komponent

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...

Více