Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Programování v asembleru - multiprocesory Jakub Yaghob.

Podobné prezentace


Prezentace na téma: "Programování v asembleru - multiprocesory Jakub Yaghob."— Transkript prezentace:

1 Programování v asembleru - multiprocesory Jakub Yaghob

2 Programování na MP Problémy Atomické operace Zaručené atomické operace Zamykání sběrnice Cache Pořadí paměťových operací Serializující instrukce Samomodifikující se kód Spin-locky

3 Zaručené atomické operace i486+ R/W byte R/W word zarovnané na word R/W dword zarovnané na dword Pentium+ R/W qword zarovnané na qword R/W word z/do necachované paměti v rámci 32-bitové sběrnice Pentium Pro+ Nezarovnaný R/W word, dword, qword z/do jedné řádky cache

4 Zamykání sběrnice Automatické Instrukce XCHG s pamětí Pomocí prefixu LOCK Pouze pro povolené instrukce, jinak #UD BTS, BTC, BTR XADD, CMPXCHG, CMPXCHG8B INC, DEC, NOT, NEG, ADD, ADC, SUB, SBB, AND, OR, XOR

5 Terminologie cache Cache line fill R z cacheovatelné paměti R celé řádky cache Cache hit Adresa je v cache Cache miss Adresa není v cache Write hit Pokud je adresa v cache, jde zápis do cache Jinak je proveden cache line fill

6 Koherence cache MESI protokol Každá řádka cache má 2 bity na stav „Transparentní“ pro software Instrukční L1 má pouze SI stavy Přechody snoopingem CPU detekuje na sběrnici W do řádky s M Zruší transakci Přímý přepis řádky cache do druhého CPU s odbočkou do paměti Přepnutí do stavu I Stav řádky cacheM (Modified)E (Exclusive)S (Shared)I (Invalid) Je platná?ano ne Kopie v paměti je......stará...přesná N/A Kopie na jiných CPU?ne možná W do této řádky......nejde na sběrnici... Nejde na sběrnici, přesun do M...přesun do E...jde přímo do paměti

7 Pořadí paměťových operací Pořadí podle programu (silné pořadí) R/W na sběrnici ve stejném pořadí, v jakém se vyskytují v proudu instrukcí i386 Pořadí podle procesoru (slabé/spekulativní pořadí) Přesné chování záleží na modelu CPU Pentium Pro+ Pentium a i486 Většinou se chovají v pořadí podle programu R miss může předběhnout W, když jsou všechny nabufferované W cache hity I/O vždy v pořadí podle programu

8 Pořadí podle procesoru na WB paměti Jeden CPU R může být prováděn spekulativně v jakémkoliv pořadí R může předběhnout W, ale CPU se musí chovat konzistentně W do paměti jsou prováděny vždy v pořadí podle programu, kromě instrukcí CLFLUSH, MOVNTI, MOVNTQ, MOVNTDQ, MOVNTPS, MOVNTPD W mohou být bufferovány W nejsou spekulativní, provádí se pouze pro instrukce, které byly skutečně provedeny Data z bufferovaných W mohou být podstrčeny čekajícím R uvnitř CPU R/W nemohou předběhnout I/O, zamčené a serializující instrukce R nemůže předběhnout LFENCE a MFENCE W musí být proveden před SFENCE nebo MFENCE Více CPU Jednotlivé CPU se chovají samostatně jako jeden CPU W z jednoho CPU jsou pozorovány ve stejném pořadí všemi CPU W z jednotlivých CPU na sběrnici NEJSOU seřazeny vůči sobě

9 Pořadí podle procesoru

10 Serializující instrukce CPU dokončí všechny změny příznaků, registrů a paměti CPU vyčistí všechny bufferované W Pentium+ Některé privilegované instrukce Neprivilegované instrukce CPUID, IRET, RSM Neprivilegované pro zesílení pořadí paměťových operací LFENCE, SFENCE, MFENCE

11 Samomodifikující se kód Možnost 1 Zapsat modifikovaný kód pomocí datového segmentu Skok na modifikovaný kód nebo na mezilehlou adresu Vykonávání změněného kódu Možnost 2 Zapsat modifikovaný kód pomocí datového segmentu Provést serializující instrukci Vykonávání změněného kódu Velká výkonnostní ztráta Cross-modifikující kód Jeden CPU změní kód a druhý ho chce vykonat Sesynchronizovat CPU a vykonat serializující instrukci

12 Spin-locky Využití instrukce PAUSE Kódována jako REP NOP, potíže na starších AMD spin_lock: cmplockvar,0 jeget_lock pause jmpspin_lock get_lock: moveax,1 xchg eax,lockvar testeax,eax jnespin_lock spin_lock_end: movlockvar,0

13 TSX Transactional Synchronizations Extensions Haswell 2 SW rozhraní pro transakční zpracování HW Lock Elision (HLE)  Zpětná kompatibilita pro CPU bez TSX  Znovuvyužití prefixů REPE / REPNE u dalších instrukcí, kde jsou pak jako prefixy XACQUIRE / XRELEASE  Instrukce musí mít LOCK prefix (kromě XCHG )  ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCHG8B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, XCHG  Pro XRELEASE ještě MOV mem,reg a MOV mem,imm Restricted Transactional Memory (RTM)  Nová sada instrukcí XBEGIN, XEND, XABORT  Zanořené transakce  Fallback kód specifikován u XBEGIN s chybovým kódem v EAX Testování probíhajícího transakčního zpracování instrukcí XTEST


Stáhnout ppt "Programování v asembleru - multiprocesory Jakub Yaghob."

Podobné prezentace


Reklamy Google