Domanda

Ho fatto il check out di Intel "whatif" del sito e la loro Memoria Transazionale compilatore (ogni thread ha a che fare atomica il commit o il rollback di un sistema di memoria, come un Database).

Sembra un modo promettente per sostituire le serrature e i mutex, ma non riesco a trovare molte testimonianze.Qualcuno di voi qui ha qualche input?

È stato utile?

Soluzione

Non ho usato Intel compiler, tuttavia, Herb Sutter aveva alcuni commenti interessanti su di esso...

Da Sutter Parla:Il Futuro della Concorrenza

Non si vede un sacco di interesse e di utilizzo di memoria transazionale, o è un concetto troppo difficile per la maggior parte degli sviluppatori di cogliere?

Non è ancora possibile rispondere a chi la utilizza, perché non è stato portato al mercato di sicurezza.Intel ha un software transazionale memoria compilatore prototipo.Ma se la domanda è "È troppo difficile per gli sviluppatori di utilizzare?" la risposta è che io di certo non la speranza.Il punto è che il modo più facile di serrature.È l'unica cosa importante, sulla ricerca di un orizzonte che detiene la speranza di ridurre notevolmente il nostro uso dei blocchi.Non potrà mai sostituire blocca completamente, ma è la nostra unica grande speranza per la sostituzione parziale.

Ci sono alcune limitazioni.In particolare, alcuni di I/O è intrinsecamente non transazionale—non è possibile prendere un atomic blocco che richiede all'utente di inserire il suo nome e leggere il nome dal console, e solo automaticamente annulla e riprova il blocco in caso di conflitto con un'altra transazione;l'utente può dire la differenza se si prompt di lui due volte.Transazionale memoria è grande per le cose che si toccano solo la memoria, però.

Tutti i principali fornitori di hardware e software conosco ha più memoria transazionale strumenti in R&D.Ci sono conferenze e pubblicazioni accademiche teorica risposte alle domande di base.Non siamo al Modello T in fase di sicurezza dove si può spedire fuori.Probabilmente vedrete presto, limitata prototipi dove non si può fare unbounded transazionale memoria, dove si può solo leggere e scrivere, dire, 100 posizioni di memoria.Che è ancora molto utile per rendere più lock-free algoritmi, però.

Altri suggerimenti

Dr.Dobb era un articolo sul concetto dello scorso anno:La Programmazione transazionale da Calum Concedere -- http://www.ddj.com/cpp/202802978

Esso comprende alcuni esempi, confronti e conclusioni utilizzando la sua libreria di esempio.

Ho costruito il combinatoria STM libreria di programmazione funzionale idee.Non richiede il supporto del compilatore (tranne che utilizza C++17), non portare una nuova sintassi.In generale, si adotta l'interfaccia del STM biblioteca da Haskell.

Così, la mia libreria ha ottime proprietà:

  • Monadically combinatoria.Ogni transazione è un programma di calcolo all'interno del modulo di monade denominato STML.È possibile combinare monadico operazioni più grande monadico transazioni.
  • Transazioni sono separati dal modello di dati.Costruisci i tuoi dati simultanei modello transazionale variabili (TVars) ed eseguire operazioni su di esso.
  • C'è retry combinator.Esso consente di eseguire nuovamente l'operazione.Molto utile per costruire breve e comprensibile transazioni.
  • Ci sono diversi monadico combinatori per esprimere i calcoli a breve.
  • C'è Context.Ogni calcolo deve essere eseguito in un contesto, non globale di esecuzione.Così si può avere molti contesti diversi, se avete bisogno di diverse indipendente STM cluster.
  • La realizzazione è abbastanza semplice concettualmente.Almeno, l'implementazione di riferimento in Haskell è così, ma ho dovuto reinventare diversi approcci per l'implementazione di C++ per la mancanza di un buon supporto della Programmazione Funzionale.

La biblioteca mostra molto bello stabilità e robustezza, anche se la consideriamo sperimentale.Inoltre, il mio approccio si apre un sacco di possibilità per migliorare la libreria di prestazioni, funzionalità, completezza, etc.

Per dimostrare il suo lavoro, io ho risolto il Dining Philosophers attività.Puoi trovare il codice nel link qui sotto.Transazione esempio:

STML<bool> takeFork(const TVar<Fork>& tFork)
{
    STML<bool> alreadyTaken = withTVar(tFork, isForkTaken);
    STML<Unit> takenByUs    = modifyTVar(tFork, setForkTaken);
    STML<bool> success      = sequence(takenByUs, pure(true));
    STML<bool> fail         = pure(false);
    STML<bool> result       = ifThenElse(alreadyTaken, fail, success);
    return result;
};

AGGIORNAMENTO Ho scritto un tutorial, lo si può trovare qui.

Sun Microsystems ha annunciato che sta rilasciando un nuovo processore, il prossimo anno, con il nome in codice di Roccia, che ha il supporto hardware per transazionale di memoria.Con alcune limitazioni, ma è un buon primo passo che dovrebbe rendere più facile per i programmatori di sostituire le serrature/mutex con operazioni e aspettiamo buone prestazioni fuori di esso.

Per un interessante discorso sull'argomento, dato da Mark Moir, uno dei ricercatori della Sun di lavoro sulla Memoria Transazionale e Rock, check out questo link.

Per ulteriori informazioni e annunci da Sole su Roccia e Transazionale la Memoria in generale, questo link.

Obbligatorio voce di wikipedia :)

Infine, questo link, presso l'Università del Wisconsin-Madison, contiene una bibliografia della maggior parte della ricerca che è stata e che è stato fatto in merito Transazionale Memoria, che sia legato all'hardware o al software correlato.

In alcuni casi posso vedere questo come essere utile e anche necessario.

Tuttavia, anche se il processore ha istruzioni particolari che rendono questo processo più semplice, c'è ancora una grande lavagna rispetto ad un mutex o un semaforo.A seconda di come è implementato potrebbe influire anche sulle prestazioni di editing (devo smettere di interrupt, o impedire loro di scrivere nel tuo aree comuni).

La mia aspettativa è che se questo è stato implementato, è solo bisogno di parti di un dato spazio di memoria, però, e quindi l'impatto potrebbe essere limitata.

-Adam

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top