Quali compiti impone una barriera di memoria oltre a impedire il riordino delle istruzioni?

3

So che una barriera di memoria impedisce il riordino delle istruzioni da prima a dopo e da dopo a prima della barriera di memoria, ad esempio se ho le seguenti istruzioni:

instruction 1
instruction 2
instruction 3
memory barrier
instruction 4
instruction 5
instruction 6

Queste istruzioni possono essere eseguite nel seguente ordine:

instruction 3
instruction 1
instruction 2
memory barrier
instruction 6
instruction 5
instruction 4

Ma non verranno mai eseguiti nel seguente ordine:

instruction 1
instruction 2
instruction 5
memory barrier
instruction 4
instruction 3
instruction 6

Ma non sono sicuro che le seguenti attività vengano applicate anche da una barriera di memoria:

  • Tutte le operazioni in sospeso prima che la barriera di memoria sia completata.
  • Tutti i dati che sono ancora nella cache dalle operazioni di scrittura prima che la barriera di memoria venga scaricata.

Nota: sto parlando dell'architettura x86.

    
posta Christopher 10.05.2018 - 22:52
fonte

1 risposta

1

La fonte definitiva è Manuale di riferimento Intel Optimization . Guarda le varie istruzioni di recinzione nel Capitolo 7 e la discussione sul multithreading nel Capitolo 9.

Dal Capitolo 7: "L'istruzione MFENCE (MEMORY FENCE) rende possibile che tutte le istruzioni LOAD / STORE precedenti a MFENCE nell'ordine del programma siano globalmente visibili prima di qualsiasi LOAD / STORE dopo MFENCE."

C'è una interessante discussione su y-combinator su questo. Il commento più interessante, per me, è stato scritto da un (presunto) autore di una libreria di strutture dati simultanee, Concurrency Kit : "Nella mia esperienza, non esiste alcun motivo correlato correlato alla concorrenza per usare mfence su x86. Infatti, vedrete che abbiamo il codice che controlla x86oids e usa un RMW atomico invece di un recinto non atomico / RMW +. " Questo pone la domanda, quando hai bisogno delle istruzioni di recinzione? Penso che sia principalmente per semplificare il codice.

    
risposta data 11.05.2018 - 18:36
fonte

Leggi altre domande sui tag