Quanto sono diffusi i vecchi processori x64 privi dell'istruzione cmpxchg16b?


8

L'istruzione cmpxchg16b per eseguire scambi di memoria atomici a 128 bit non è supportata nelle vecchie versioni del processore x64 ma sembra che questo sia supportato da versioni più recenti del processore da diversi anni. Con quale probabilità incontrerò un computer a 64 bit con un vecchio processore privo di queste istruzioni?


12
Il tuo cliente più importante ha sicuramente uno di quelli in uno dei suoi server di produzione critici che viene utilizzato solo per compiti importanti eseguiti alla vigilia di Natale, ma da nessun'altra parte e assolutamente non nell'ambiente di test ...

7
Non credo che questo dovrebbe essere stato migrato su superutente. Garantisce solo che meno persone che conoscono la risposta vedranno mai questa domanda.
Christopher Barber,

Risposte:


6

Stai guardando i primi processori AMD a 64 bit, prima di Rev F (che è quando sono passati alla memoria DDR2). Ci sono anche alcuni primi passi di Intel Noconas che non lo supportano, penso, ma questi sono più rari.


4

Non ho dati sulla prevalenza di determinati tipi di CPU, quindi non posso rispondere direttamente alla tua domanda. Tuttavia, puoi scoprire se la CPU supporta CMPXCHG16Bcontrollando se CPUID.01h.ECX.bit13è 1(disponibile) o 0(non disponibile).

Si noti inoltre che i manuali di Intel suggeriscono che per eseguire queste istruzioni in modo atomico, è necessario combinarle con il LOCKprefisso.


Sì, so come controllare il risultato del CPU. Il problema è cosa fare se non è supportato. Preferirei non perdere tempo a lavorare su un'istruzione mancante se non vedrò mai quel caso in pratica.
Christopher Barber,

@Christopher Barber - CPUID è supportato dalla fine dei 486 processori, il che implica anche che ogni processore x86 a 64 bit supporterà CPUID.

2
@PhiS: Sono abbastanza sicuro che Christopher stesse parlando della mancanza di supporto per il cmpxchg16b. Cosa fare se che manca
Bahbar

3

Il supporto nella CPU potrebbe in realtà non essere sufficiente come alcuni utenti Core 2 hanno scoperto all'avvio di Windows 8.1 , in particolare quelli con una scheda madre Intel DP35DP. Non sono ancora sicuro di ciò che nella scheda madre potrebbe impedire il funzionamento di CMPXCHG16B. Probabilmente i bit di rilevamento delle funzionalità possono essere disabilitati dal BIOS. Per riassumere ciò che il blog di Yuhong Bao dice su questo, c'era un errata del processore nei primi chip Core 2 (steppings E0 / R0 del Core 2 a 45 nm) che causava la dichiarazione errata delle loro funzionalità tramite CPUID. Per quanto ne so, è stato possibile aggirare il problema tramite l'aggiornamento del BIOS / microcodice.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.