Transactional Synchronization Extensions: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nuova pagina tradotta da Transactional Synchronization Extensions |
+ citazioni |
||
Riga 1:
'''Transactional Synchronization Extensions''' ('''TSX-NI''') è un'estensione all'architettura del [[Instruction set|set di istruzioni x86]] (ISA) che aggiunge il supporto alla [[memoria transazionale]] hardware, velocizzando l'esecuzione di software multi-threaded attraverso l'elisione della serratura. In base a diversi benchmark, TSX è in grado di fornire circa il 40% di esecuzione più veloce delle applicazioni in specifici carichi di lavoro, e 4-5 volte di più di [[Transazioni al secondo|transazioni di database al secondo]] (TPS).<ref>{{Cita web|url=http://pcl.intel-research.net/publications/SC13-TSX.pdf|titolo=Performance Evaluation of Intel R Transactional Synchronization Extensions for High-Performance Computing|cognome=Yoo|nome=Richard M.|editore=[[Intel]]|data=novembre 2013|lingua=en|formato=PDF|accesso=15 novembre 2018|urlarchivio=https://web.archive.org/web/20161110144922/http://pcl.intel-research.net/publications/SC13-TSX.pdf|dataarchivio=10 novembre 2016|urlmorto=sì|cognome2=Hughes|nome2=Christopher J.|cognome3=Lai|nome3=Konrad|cognome4=Rajwar|nome4=Ravi}}</ref><ref>{{Cita web|url=https://software.intel.com/sites/default/files/managed/4d/2a/hpca_TSX.pdf|titolo=Improving In-Memory Database Index Performance with Intel R Transactional Synchronization Extensions|cognome=Karnagel|nome=Tomas|cognome2=Dementiev|nome2=Roman|cognome3=Rajwar|nome3=Ravi|cognome4=Lai|nome4=Konrad|cognome5=Legler|nome5=Thomas|cognome6=Schlegel|nome6=Benjamin|cognome7=Lehner|nome7=Wolfgang|editore=[[Intel]]|data=febbraio 2014|lingua=en|formato=PDF|accesso=15 novembre 2018}}</ref><ref>{{Cita conferenza|titolo=Performance Evaluation of Intel Transactional Synchronization Extensions for High Performance Computing|conferenza=SC13|data=21 novembre 2013|url=https://web.archive.org/web/20130927105131/http://sc13.supercomputing.org/schedule/event_detail.php?evid=pap260|lingua=en|accesso=15 novembre 2018|cognome=Yoo|nome=Richard|cognome2=Hughes|nome2=Christopher|cognome3=Lai|nome3=Konrad|cognome4=Rajwar|nome4=Ravi}}</ref>
TSX è stato documentato da Intel nel febbraio 2012, e ha debuttato nel giugno 2013 su [[Microprocessore|microprocessori]] [[Intel]] selezionati basati sulla microarchitettura [[Haswell (hardware)|Haswell]].<ref>{{Cita web|url=http://software.intel.com/en-us/blogs/2012/02/07/transactional-synchronization-in-haswell|titolo=Transactional Synchronization in Haswell|cognome=R.|nome=James|editore=[[Intel]]|data=7 febbraio 2012|lingua=en|accesso=15 novembre 2018}}</ref><ref>{{Cita news|lingua=en|nome=Peter|cognome=Bright|url=https://arstechnica.com/information-technology/2012/02/transactional-memory-going-mainstream-with-intel-haswell/|titolo=Transactional memory going mainstream with Intel Haswell|pubblicazione=[[Ars Technica]]|data=9 febbraio 2012|accesso=15 novembre 2018}}</ref><ref>{{Cita news|lingua=en|nome=Chris|cognome=Angelini|url=https://www.tomshardware.com/reviews/core-i7-4770k-haswell-review,3521.html|titolo=The Core i7-4770K Review: Haswell Is Faster; Desktop Enthusiasts Yawn|pubblicazione=[[Tom's Hardware]]|data=1 giugno 2013|accesso=15 novembre 2018}}</ref> Nei processori Haswell inferiori a 45xx così come le serie R e K (con moltiplicatore sbloccato) non supportano TSX.<ref>{{Cita web|url=https://ark.intel.com/compare/77773,77775,77777,77480,77769,77771,75036,75037,75043,76640,75044,75045,75047,75048,76641,75049,75050,75121,75122,75123,76642,75124,75125|titolo=Intel Comparison Table of Haswell Pentium, i3, i5, and i7 models|editore=[[Intel]]|lingua=en|accesso=15 novembre 2018}}</ref> Nell'agosto 2014, Intel ha annunciato un bug nell'implementazione del TSX sulle attuali ottimizzazioni di Haswell, Haswell-E, Haswell-EP e delle prime cpu [[Broadwell (hardware)|Broadwell]], che ha portato alla disabilitazione della funzione TSX sulle cpu interessate tramite un aggiornamento del [[microcodice]].<ref name=":0">{{Cita news|lingua=en|nome=Scott|cognome=Wasson|url=https://techreport.com/news/26911/errata-prompts-intel-to-disable-tsx-in-haswell-early-broadwell-cpus|titolo=Errata prompts Intel to disable TSX in Haswell, early Broadwell CPUs|pubblicazione=[[The Tech Report]]|data=12 agosto 2014|accesso=15 novembre 2018}}</ref><ref name=":1">{{Cita web|url=https://www.intel.com/content/dam/www/public/us/en/documents/specification-updates/4th-gen-core-family-desktop-specification-update.pdf|titolo=Desktop 4th Generation Intel Core Processor Family, Desktop Intel Pentium Processor Family, and Desktop Intel Celeron Processor Family|editore=[[Intel]]|data=marzo 2017|lingua=en|formato=PDF|p=46|accesso=15 novembre 2018}}</ref>
Il supporto per l'emulazione TSX è fornito come parte dell'emulatore di sviluppo software di Intel.<ref>{{Cita web|url=https://software.intel.com/en-us/blogs/2013/07/25/fun-with-intel-transactional-synchronization-extensions|titolo=Fun with Intel Transactional Synchronization Extensions|cognome=Wooyoung|nome=Kim|editore=[[Intel]]|data=25 luglio 2013|lingua=en|accesso=15 novembre 2015}}</ref> C'è anche un supporto sperimentale per l'emulazione TSX in [[QEMU]].<ref>{{Cita web|url=http://people.csail.mit.edu/stephentu/papers/tsx.pdf|titolo=Supporting Intel Transactional Synchronization Extensions in QEMU|cognome=Dabdoub|nome=Sebastien|editore=[[Massachusetts Institute of Technology]]|lingua=en|formato=PDF|accesso=15 novembre 2018|cognome2=Tu|nome2=Stephen}}</ref>
== Caratteristiche ==
TSX fornisce due interfacce software per la designazione delle regioni di codice per l'esecuzione transazionale. '''Hardware Lock Elision''' (HLE) è un'interfaccia basata su prefisso di istruzioni progettata per essere compatibile con i processori senza supporto TSX. '''Restricted Transactional Memory''' (RTM) è una nuova interfaccia per set di istruzioni che offre una maggiore flessibilità ai programmatori.<ref name=":2">{{Cita news|lingua=en|nome=Johan De|cognome=Gelas|url=https://www.anandtech.com/show/6290/making-sense-of-intel-haswell-transactional-synchronization-extensions/2|titolo=Making Sense of the Intel Haswell Transactional Synchronization eXtensions|pubblicazione=[[AnandTech]]|data=20 settembre 2012|accesso=15 novembre 2018}}</ref>
TSX consente l'[[esecuzione speculativa]] delle regioni di codice transazionale. L'hardware monitora i thread multipli per rilevare eventuali conflitti di accesso alla memoria, insieme all'interruzione e l'annullamento delle transazioni che non possono essere completate con successo. Sono previsti meccanismi per il software per il rilevamento e la gestione delle transazioni non riuscite.<ref name=":2" />
In altre parole, l'elisione del blocco attraverso l'esecuzione transazionale utilizza le transazioni in memoria come percorso veloce dove possibile, mentre il percorso lento (fallback) è ancora un normale blocco.
=== {{anchor|HLE}}Hardware Lock Elision ===
'''Hardware Lock Elision''' (HLE) aggiunge due nuovi prefissi di istruzioni, <code>XACQUIRE</code> e <code>XRELEASE</code>. Questi due prefissi riutilizzano gli [[opcode]] dei prefissi <code>REPNE</code> / <code>REPE</code> esistenti (<code>F2H</code> / <code>F3H</code>). Sui processori che non supportano TSX, i prefissi <code>REPNE</code> / <code>REPE</code> vengono ignorati sulle istruzioni per le quali sono validi i prefissi <code>XACQUIRE</code> / <code>XRELEASE</code>, consentendo così una retrocompatibilità.<ref>{{Cita web|url=http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/cpp-win/GUID-A462FBC8-37F2-490F-A68B-2FFA8010DEBC.htm|titolo=Hardware Lock Elision Overview|editore=[[Intel]]|lingua=en|accesso=15 novembre 2018|urlarchivio=https://web.archive.org/web/20131029205123/http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/cpp-win/GUID-A462FBC8-37F2-490F-A68B-2FFA8010DEBC.htm|dataarchivio=29 ottobre 2013|urlmorto=sì}}</ref>
Il suggerimento del prefisso <code>XACQUIRE</code> può essere utilizzato solo con le seguenti istruzioni con un esplicito prefisso <code>LOCK</code>: <code>ADD</code>, <code>ADC</code>, <code>AND</code>, <code>BTC</code>, <code>BTR</code>, <code>BTS</code>, <code>CMPXCHG</code>, <code>CMPXCHG8B</code>, <code>DEC</code>, <code>INC</code>, <code>NEG</code>, <code>NOT</code>, <code>OR</code>, <code>SBB</code>, <code>SUB</code>, <code>XOR</code>, <code>XADD</code> e <code>XCHG</code>. L'istruzione <code>XCHG</code> può essere utilizzata anche senza il prefisso <code>LOCK</code>.
Riga 22:
=== {{anchor|RTM}}Restricted Transactional Memory ===
La '''Restricted Transactional Memory''' (RTM) è un'implementazione alternativa a HLE che offre al programmatore la flessibilità di specificare un percorso del codice di riserva che viene eseguito quando una transazione non può essere eseguita correttamente.
RTM aggiunge tre nuove istruzioni: <code>XBEGIN</code>, <code>XEND</code> and <code>XABORT</code>. Le istruzioni <code>XBEGIN</code> e <code>XEND</code> segnano l'inizio e la fine di una regione di codice transazionale; l'istruzione <code>XABORT</code> interrompe esplicitamente una transazione. Il fallimento della transaizone reindirizza il processore al percorso del codice di riserva specificato dall'istruzione <code>XBEGIN</code>, con lo stato di interruzione restituito nel registro <code>EAX</code>.
Riga 59:
== Implementazione ==
{{vedi anche|Memoria transazionale}}
La specifica TSX di Intel descrive come la memoria transazionale è esposta ai programmatori, ma trattiene i dettagli sull'effettiva implementazione della memoria transazionale.<ref name=":3">{{Cita news|lingua=en|nome=David|cognome=Kanter|url=https://www.realworldtech.com/haswell-tm/|titolo=Analysis of Haswell’s Transactional Memory|pubblicazione=Real World Technologies|data=15 febbraio 2012|accesso=15 novembre 2018}}</ref> Intel specifica nei suoi manuali di sviluppo e ottimizzazione che Haswell mantiene sia i set di lettura e scrittura alla granularità di una linea di cache, tracciando gli indirizzi nella cache dei dati L1 del processore.<ref>{{Cita web|url=https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf|titolo=Intel 64 and IA-32 Architectures Software Developer’s Manual|editore=[[Intel]]|data=settembre 2016|lingua=en|formato=PDF|p=342|accesso=15 novembre 2018}}</ref><ref name=":4">{{Cita web|url=https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf|titolo=Intel 64 and IA-32 Architectures Optimization Reference Manual|editore=[[Intel]]|data=giugno 2016|lingua=en|formato=PDF|p=446|accesso=15 novembre 2018}}</ref><ref>{{Cita web|url=https://software.intel.com/en-us/forums/intel-moderncode-for-parallel-architectures/topic/402412|titolo=Intel TSX implementation properties|editore=[[Intel]]|data=23 luglio 2013|lingua=en|accesso=15 novembre 2018}}</ref><ref>{{Cita news|lingua=en|nome=Johan De|cognome=Gelas|url=https://www.anandtech.com/show/6290/making-sense-of-intel-haswell-transactional-synchronization-extensions/4|titolo=Making Sense of the Intel Haswell Transactional Synchronization eXtensions|pubblicazione=[[AnandTech]]|data=20 settembre 2012|accesso=15 novembre 2018}}</ref> Intel afferma inoltre che i conflitti di dati sono rilevati attraverso il protocollo di [[coerenza della cache]].<ref name=":4" />
La cache dati L1 di Haswell ha un'associatività di otto. Questo significa che in questa implementazione, un'esecuzione transazionale che scrive su nove posizioni distinte mappando sullo stesso set di cache si interrompe. Tuttavia, a causa delle implementazioni delle microarchitetture, questo non significa che un minor numero di accessi allo stesso set non sia garantito per non essere mai interrotto. Inoltre, nelle configurazioni cpu con tecnogia [[Hyper-Threading]], la cache L1 è condivisa tra i due thread sullo stesso core, per cui le operazioni in un processore logico dello stesso core possono causare evasioni.<ref name=":4" />
Una ricerca indipendente indica che la memoria transazionale di Haswell è molto probabilmente un sistema di aggiornamento differito che utilizza le cache per-core per i dati transazionali e i checkpoint di registro.<ref name=":3" /> In altre parole, Haswell ha maggiori probabilità di utilizzare il sistema di memoria transazionale basato sulla cache, in quanto si tratta di una scelta di implementazione molto meno rischiosa. D'altra parte, i processori [[Skylake]] e successivi potrebbero combinare questo approccio basato sulla cache con il ''memory ordering buffer'' (MOB) per lo stesso scopo, eventualmente fornendo anche una memoria transazionale multi-versione che è più adatta al [[multithreading speculativo]].<ref>{{Cita news|lingua=en|nome=David|cognome=Kanter|url=https://www.realworldtech.com/haswell-tm-alt/|titolo=Haswell Transactional Memory Alternatives|pubblicazione=Real World Technologies|data=21 agosto 2012|accesso=15 novembre 2018}}</ref>
Nell'agosto 2014, Intel ha annunciato l'esistenza di un bug nell'implementazione del TSX su Haswell, Haswell-E, Haswell-EP e le prime cpu Broadwell, che ha portato alla disabilitazione della funzione TSX sulle cpu interessate tramite un aggiornamento del microcodice.<ref name=":0" /><ref name=":1" /><ref>{{Cita news|lingua=en|nome=Ian|cognome=Cutress|url=https://www.anandtech.com/show/8376/intel-disables-tsx-instructions-erratum-found-in-haswell-haswelleep-broadwelly|titolo=Intel Disables TSX Instructions: Erratum Found in Haswell, Haswell-E/EP, Broadwell-Y|pubblicazione=[[AnandTech]]|data=12 agosto 2014|accesso=15 novembre 2018}}</ref> Il bug è stato risolto nello stepping F-0 del vPro abititato sui processori Core M-5Y70 nel novembre 2014.<ref>{{Cita web|url=https://www.intel.com/content/dam/www/public/us/en/documents/specification-updates/core-m-processor-family-spec-update.pdf|titolo=Intel Core M Processor Family|editore=[[Intel]]|data=dicembre 2014|lingua=en|formato=PDF|p=10|accesso=15 novembre 2018}}</ref>
== Applicazioni ==
|