Quali architetture hanno modelli di memoria "deboli"?

1

Sono un programmatore Java di lunga data esperto del modello di memoria Java. Sto iniziando a imparare C # e, sulla base di ciò che ho imparato finora, il modello di memoria C # sembra essere molto simile al JMM. Ciò conferma la mia precedente comprensione del fatto che il JMM riflette le caratteristiche delle architetture supportate dalla JVM. I requisiti linguistici riflettono le garanzie più deboli di tutte le architetture supportate.

Ma una differenza che ho notato è nel modo in cui gli sviluppatori di Java e C # parlano di architetture. Laddove i programmatori Java parlano di errori di codice manifestati in modo improprio e sincronizzato su "alcune architetture", i programmatori C # tendono ad essere più specifici. Ad esempio, questo articolo indica che Itanium ha un modello di memoria "debole" :

The mainstream x86 and x64 processors implement a strong memory model where memory access is effectively volatile. ... The Itanium processor implements a weaker memory model.

Ho lavorato solo su x86 e x64, e non ho mai saputo quali architetture imponessero i misteriosi requisiti del JMM che non sembravano mai avere importanza quando cercavo di dimostrare gli effetti della loro violazione. Ora ne conosco uno.

Quali altre architetture hanno modelli di memoria "deboli"?

    
posta Kevin Krumwiede 19.08.2017 - 12:39
fonte

1 risposta

5

Quasi tutti i RISC hanno modelli di ordini di memoria deboli. ("Ordinamento di memoria" è un termine migliore per questo perché il "modello di memoria" è troppo ampio.) Ciò significa che un ordine tra gli accessi alla memoria deve essere esplicitamente richiesto con istruzioni "barriera" AKA "recinzione". Per x86 (qualsiasi testimoni), la maggior parte delle barriere (ma non tutte) sono implicite.

Nel caso in cui, un argomento Ordine di memoria sia un buon inizio. Un altro esempio di buona descrizione è Costanti dell'ordine di memoria C ++ .

    
risposta data 19.08.2017 - 13:37
fonte

Leggi altre domande sui tag