Domanda

Secondo Intel 64 e IA-32 Architetture Software Sviluppatore Manuale Il blocco Signal prefisso "assicura che il processore ha uso esclusivo di qualsiasi memoria condivisa mentre il segnale viene asserito". Che può essere un sotto forma di una serratura autobus o cache.

Ma - e questa è la ragione per cui mi sto chiedendo questa domanda -. Non è chiaro per me, se questo prefisso fornisce anche qualsiasi memoria barriere

sto sviluppando con NASM in un ambiente multi-processore e necessità di attuare operazioni atomiche con acquisiscono opzionale e / o semantica di rilascio.

Così, ho bisogno di usare il MFENCE, SFENCE e LFENCE istruzioni o questo sarebbe ridondante?

È stato utile?

Soluzione

No, non c'è alcun bisogno di istruzioni per l'uso MFENCE, SFENCE and LFENCE in relazione con il prefisso LOCK.

garanzia di visibilità

istruzioni MFENCE, SFENCE and LFENCE della memoria in tutti i core della CPU. Sul esempio l'istruzione MOV non può essere utilizzata con il prefisso LOCK, quindi per essere sicuri che risultato della memoria mossa è visibile a tutti i core della CPU dobbiamo essere sicuri che la cache della CPU viene svuotata di RAM e che si raggiunge con le istruzioni recinzione.

Modifica di più su bloccato operazioni atomiche da Intel manuale:

BLOCCATO ATOMIC OPERAZIONI

Il 32 bit IA-32 processori supportano bloccati atomico operazioni sulle ubicazioni nel sistema memoria. Queste operazioni sono tipicamente utilizzato per gestire le strutture di dati condivise (Come ad esempio semafori, segmento descrittori, segmenti di sistema, o pagina tavoli) in cui due o più processori possono provare simultaneamente modificare lo stesso campo o bandiera. Il processore utilizza tre interdipendenti meccanismi per riuscire bloccati operazioni atomiche:

• operazioni atomiche garantite

• Chiusura del bus, utilizzando il segnale BLOCCO # e l'istruzione BLOCCO prefix

• coerenza della cache protocolli che assicurano che le operazioni atomiche possono essere eseguite su strutture di dati memorizzati nella cache (blocco cache); questo meccanismo è presente nel Pentium 4, Intel Xeon e processori della famiglia P6

Questi meccanismi sono interdipendenti le seguenti modalità. Certain base le operazioni di memoria (come la lettura o scrivere un byte nella memoria di sistema) sono sempre garantite da trattare atomicamente. Cioè, una volta avviato, il garanzie processore che la operazione sarà completata prima un altro agente processore o autobus è accesso consentito alla locazione di memoria. Il processore supporta anche bus bloccaggio per eseguire memoria selezionata operazioni (quali un lettura-modifica-scrittura operazione in un spazio comune di memoria) che tipicamente bisogno di essere gestito atomicamente, ma sono Non gestito automaticamente in questo modo. Perché la memoria utilizzata di frequente posizioni sono spesso memorizzate nella cache in un del processore L1 o L2 cache, atomico operazioni possono spesso essere eseguite all'interno cache di un processore senza affermando la serratura bus. qui il protocolli di coerenza della cache del processore assicurare che altri processori che cache il stesse posizioni di memoria sono gestito correttamente mentre atomica le operazioni vengono eseguite su cache locazioni di memoria.

Altri suggerimenti

No dal IA32 manuali (Volume 3A, capitolo 8.2: Memoria di ordinazione ).

legge o scrive non può essere riordinata con le istruzioni di I / O, bloccato Istruzioni , o la serializzazione istruzioni.

Quindi, un'istruzione recinzione non è necessaria con le istruzioni bloccati.

problema si verifica ancora quando viene compilato intel_lock1.c (disponibile all'indirizzo URL sopra) su Linux con GCC 5 o 7 senza nessuna delle args '-D_WITH_CLFLUSH_' o '-D_WITH_HLE_' (in modo che né CLFLUSH * né HLE XACQUIRE vengono utilizzati) - l'assemblatore mutex_lock ora assomiglia a:

# 74 "intel_lock1.c" 1
    LFENCE
    lock subl   $1, lck(%rip)
    rep nop
    SFENCE

Quindi, sto cercando di sostituire {L, S} recinzione con MFENCE.

io ancora non riesco a capire come due thread possono finire con lo stesso valore di -1 * LCK però.

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