Extensii de sincronizare tranzacțională

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Extensiile de sincronizare tranzacțională ( TSX-NI ) este o extensie a arhitecturii setului de instrucțiuni x86 (ISA) care adaugă suport pentru memoria tranzacțională hardware, accelerând execuția software-ului multi-threaded prin elizia blocării. Pe baza diferitelor etaloane, TSX este capabil să ofere o execuție a aplicației cu aproximativ 40% mai rapidă în anumite sarcini de lucru și de 4-5 ori mai multe tranzacții de baze de date pe secundă (TPS). [1] [2] [3]

TSX a fost documentat de Intel în februarie 2012 și a debutat în iunie 2013 pe anumite microprocesoare Intel bazate pe microarhitectura Haswell . [4] [5] [6] Procesoarele Haswell sub 45xx, precum și seriile R și K (cu multiplicator deblocat) nu acceptă TSX. [7] În august 2014, Intel a anunțat o eroare în implementarea TSX cu privire la optimizările actuale ale Haswell, Haswell-E, Haswell-EP și cpus timpuriu Broadwell , care au dus la dezactivarea caracteristicii TSX pe cpus-ul afectat printr-o actualizare de microcod. . [8] [9]

Suportul pentru emularea TSX este furnizat ca parte a emulatorului de dezvoltare software Intel. [10] Există, de asemenea, suport experimental pentru emularea TSX în QEMU . [11]

Caracteristici

TSX oferă două interfețe software pentru desemnarea regiunilor de cod pentru executarea tranzacțională. Hardware Lock Elision (HLE) este o interfață bazată pe prefixuri de instrucțiuni concepută pentru a fi compatibilă cu procesoarele fără suport TSX. Memoria tranzacțională restricționată (RTM) este o nouă interfață de seturi de instrucțiuni care oferă o mai mare flexibilitate programatorilor. [12]

TSX permite executarea speculativă a regiunilor codului tranzacțional. Hardware-ul monitorizează mai multe fire pentru conflicte de acces la memorie, împreună cu oprirea și anularea tranzacțiilor care nu pot fi finalizate cu succes. Există mecanisme pentru ca software-ul să detecteze și să gestioneze tranzacțiile eșuate. [12]

Cu alte cuvinte, elizia blocurilor prin executarea tranzacțională folosește tranzacțiile în memorie ca cale rapidă acolo unde este posibil, în timp ce calea lentă (alternativă) este încă un bloc normal.

Hardware Lock Elision

Hardware Lock Elision (HLE) adaugă două noi prefixe de instrucțiuni, XACQUIRE și XRELEASE . Aceste două prefixe reutilizează prefixurile opcode REPNE / REPE existente ( F2H / F3H ). Pe procesoare care nu acceptă TSX, de REPNE / REPE prefixele sunt ignorate în conformitate cu instrucțiunile pentru care XACQUIRE / XRELEASE prefixele sunt valabile, permițând astfel compatibilitatea cu versiunile anterioare. [13]

XACQUIRE prefix XACQUIRE poate fi utilizată numai cu următoarele instrucțiuni cu un prefix LOCK explicit: ADD , ADC , AND , BTC , BTR , BTS , CMPXCHG , CMPXCHG8B , DEC , INC , NEG , NOT , OR , SBB , SUB , XOR , XADD și XCHG . Instrucțiunea XCHG poate fi utilizată și fără prefixul LOCK .

XRELEASE prefix XRELEASE poate fi utilizată atât cu instrucțiunile enumerate mai sus, cât și cu instrucțiunile MOV mem, reg și MOV mem, imm .

Hardware Lock Elision permite executarea optimă a unei secțiuni critice prin anularea scrierii pe o blocare, astfel încât aceasta să pară liberă pentru alte fire. O tranzacție eșuată determină repornirea execuției din XACQUIRE prefixată, tratând instrucțiunea ca și XACQUIRE prefixul XACQUIRE nu ar fi fost prezent.

Memorie tranzacțională restricționată

Memoria tranzacțională restricționată (RTM) este o implementare alternativă la HLE care oferă programatorului flexibilitatea de a specifica o cale de cod alternativă care se execută atunci când o tranzacție nu poate fi executată corect.

RTM adaugă trei instrucțiuni noi: XBEGIN , XEND și XABORT . Instrucțiunile XBEGIN și XEND marchează începutul și sfârșitul unei regiuni a codului tranzacțional; declarația XABORT întrerupe în mod explicit o tranzacție. Eșecul tranzacției redirecționează procesorul către calea codului de rezervă specificată de instrucțiunea XBEGIN , cu starea de anulare returnată în registrul EAX .

Poziția bitului de registru EAX Sens
0 Setați dacă avortul este cauzat de instrucțiunea XABORT .
1 Dacă este setată, operația poate avea succes la reîncercare. Acest bit este întotdeauna liber dacă bitul 0 este setat.
2 Setați dacă un alt procesor logic era în conflict cu o adresă de memorie care făcea parte din tranzacția pe care a întrerupt-o.
3 Setați dacă un buffer intern este în exces.
4 Setați dacă a fost atins punctul de întrerupere pentru depanare.
5 Setați dacă a avut loc o anulare în timpul executării unei tranzacții imbricate.
23: 6 Rezervat.
31:24 Argument XABORT (valabil numai dacă bitul 0 este setat, altfel rezervat).

XTEST

TSX oferă o nouă instrucțiune XTEST care returnează dacă procesorul execută o regiune tranzacțională.

Implementare

Pictogramă lupă mgx2.svg Același subiect în detaliu: Memoria tranzacțională .

Specificațiile TSX ale Intel descriu modul în care memoria tranzacțională este expusă programatorilor, dar păstrează detalii despre implementarea efectivă a memoriei tranzacționale. [14] Intel specifică în manualele sale de dezvoltare și optimizare că Haswell menține atât seturi de citire cât și scriere la granularitatea unei linii cache, urmărind adresele din memoria cache L1 a procesorului. [15] [16] [17] [18] Intel susține, de asemenea, că conflictele de date sunt detectate prin protocolul de consistență a cache - ului . [16]

Cache-ul de date L1 al lui Haswell are o asociativitate de opt. Acest lucru înseamnă că, în această implementare, o execuție tranzacțională care scrie în nouă locații distincte mapate pe același set de cache eșuează. Cu toate acestea, datorită implementărilor de microarhitecturi, acest lucru nu înseamnă că mai puține accesări la același set nu sunt garantate să nu fie întrerupte niciodată. De asemenea, în configurațiile CPU cu tehnologia Hyper-Threading , memoria cache L1 este partajată între două fire pe același nucleu, astfel încât operațiunile pe un procesor logic din același nucleu pot provoca evaziune. [16]

Cercetări independente indică faptul că memoria tranzacțională a lui Haswell este cel mai probabil un sistem de actualizare amânată care utilizează cache-uri per-core pentru date tranzacționale și puncte de control jurnal. [14] Cu alte cuvinte, Haswell este mai probabil să utilizeze sistemul de memorie tranzacțională bazat pe cache, deoarece este o alegere de implementare mult mai puțin riscantă. Pe de altă parte, Skylake și procesorele ulterioare ar putea combina această abordare bazată pe cache cu memoria de comandă a memoriei (MOB) în același scop, oferind, de asemenea, memorie tranzacțională multi-versionată, care este mai potrivită pentru multithreading speculativ . [19]

În august 2014, Intel a anunțat existența unei erori în implementarea TSX pe Haswell, Haswell-E, Haswell-EP și cpus timpuriu Broadwell, ceea ce a dus la dezactivarea caracteristicii TSX pe cpus afectat printr-o actualizare a microcodului. [8] [9] [20] Bugul a fost remediat în etapa F-0 a vPro locuită pe procesoarele Core M-5Y70 în noiembrie 2014. [21]

Aplicații

  • RPCS3 (emulator PlayStation 3)

Notă

  1. ^ (EN) Richard M. Yoo, Christopher J. Hughes, Konrad Lai și Ravi Rajwar, Evaluarea performanței extensiilor de sincronizare tranzacțională R Intel pentru calcul de înaltă performanță (PDF) pe pcl.intel-research.net, Intel , noiembrie 2013. Adus la 15 noiembrie 2018 (Arhivat din original la 10 noiembrie 2016) .
  2. ^ (EN) Tomas Karnagel, Roman Dementiev, Ravi Rajwar, Konrad Lai, Thomas Legler, Benjamin Schlegel și Wolfgang Lehner, Îmbunătățirea performanței indexului bazei de date în memorie cu extensiile de sincronizare tranzacțională Intel R (PDF), pe software.intel.com, Intel Februarie 2014. Adus la 15 noiembrie 2018 .
  3. ^ (EN) Richard Yoo, Christopher Hughes, Konrad Lai și Ravi Rajwar, Evaluarea performanței extensiilor de sincronizare tranzacțională Intel pentru calcul de înaltă performanță , SC13, 21 noiembrie 2013. Accesat la 15 noiembrie 2018 (depus de „Adresa URL originală 27 septembrie 2013) ) .
  4. ^ (EN) James R., Transactional Synchronization in Haswell , of software.intel.com, Intel , 7 februarie 2012. Accesat la 15 noiembrie 2018.
  5. ^ (EN) Peter Bright, Transactional memory going mainstream with Intel Haswell , în Ars Technica , 9 februarie 2012. Accesat la 15 noiembrie 2018.
  6. ^ (EN) Chris Angelini, The Core i7-4770K Review: Haswell Is Faster; Entuziaștii desktopului Yawn , în Tom's Hardware , 1 iunie 2013. Adus 15 noiembrie 2018 .
  7. ^ (RO) Tabel comparativ Intel Pentium al modelelor Haswell, i3, i5 și i7 de pe ark.intel.com, Intel . Adus la 15 noiembrie 2018 .
  8. ^ A b (EN) Scott Wasson, Errata solicită Intel să dezactiveze TSX în procesorele Haswell, Broadwell la începutul The Tech Report , 12 august 2014. Accesat la 15 noiembrie 2018.
  9. ^ A b (EN) Desktop Generation 4th Generation Intel Core Processor Family, Desktop Intel Pentium Processor Family, and Intel Celeron Desktop Processor Family (PDF) on intel.com, Intel , March 2017, p. 46. Accesat la 15 noiembrie 2018 .
  10. ^ (EN) Wooyoung Kim, Fun with Intel Transactional Synchronization Extensions , pe software.intel.com, Intel , 25 iulie 2013. Accesat la 15 noiembrie 2015.
  11. ^ (EN) Sebastien Dabdoub și Stephen You, care susțin extensiile de sincronizare tranzacțională Intel în QEMU (PDF) pe people.csail.mit.edu, Massachusetts Institute of Technology . Adus la 15 noiembrie 2018 .
  12. ^ a b ( EN ) Johan De Gelas, Making Sense of the Intel Haswell Transactional Synchronization eXtensions , în AnandTech , 20 septembrie 2012. Accesat la 15 noiembrie 2018 .
  13. ^ (EN) Prezentare generală a blocării hardware-ului Elision pe software.intel.com, Intel . Adus la 15 noiembrie 2018 (arhivat din original la 29 octombrie 2013) .
  14. ^ A b (EN) David Kanter, Analiza memoriei tranzacționale a lui Haswell în tehnologiile lumii reale, 15 februarie 2012. Accesat la 15 noiembrie 2018.
  15. ^ (RO) Intel 64 și IA-32 Architectures Software Developer's Manual (PDF) pe intel.com, Intel , septembrie 2016, p. 342. Adus la 15 noiembrie 2018 .
  16. ^ a b c ( EN ) Intel 64 și IA-32 Architectures Optimization Reference Manual ( PDF ), intel.com , Intel , iunie 2016, p. 446. Adus la 15 noiembrie 2018 .
  17. ^ (EN) Proprietăți TSX de implementare Intel pe software.intel.com, Intel , 23 iulie 2013. Accesat la 15 noiembrie 2018.
  18. ^ (EN) Johan De Gelas, Making Sense of the Intel Haswell Transactional Synchronization eXtensions in AnandTech , 20 septembrie 2012. Accesat la 15 noiembrie 2018.
  19. ^ (EN) David Kanter, Alternative de memorie tranzacțională Haswell în tehnologiile lumii reale, 21 august 2012. Accesat la 15 noiembrie 2018.
  20. ^ (EN) Ian Cutress, Intel Disables TSX Instructions: Found Erratum in Haswell, Haswell-E / EP, Broadwell-Y , în AnandTech , 12 august 2014. Adus pe 15 noiembrie 2018.
  21. ^ (EN) Familia de procesoare Intel Core M (PDF) pe intel.com, Intel , decembrie 2014, p. 10. Accesat la 15 noiembrie 2018 .

Bibliografie

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT