2010-07-26 12 views
29

È vero che il prefisso di comando "LOCK" di x86 ASM causa il blocco di tutti i core mentre viene eseguita l'istruzione che segue "LOCK"?x86 domanda BLOCCO su CPU multi-core

Ho letto questo in un post sul blog e non ha senso. Non riesco a trovare nulla che indica se questo è vero o no.

+0

correlati: [? Può num ++ essere atomica per 'int num'] (https://stackoverflow.com/questions/39393850/can-num-be -atomic-for-int-num) dove la mia risposta spiega come le istruzioni 'lock'ed vengono eseguite internamente. –

risposta

41

Si tratta di bloccare il bus di memoria per quell'indirizzo. The Intel 64 and IA-32 Architectures Software Developer's Manual - Volume 3A: System Programming Guide, Part 1 ci dice:

7.1.4 Effetti di un'operazione di BLOCCO su cache del processore interno.

Per i processori Intel486 e Pentium, il segnale LOCK # è sempre asserito sul bus durante un'operazione SERRATURA , anche se l'area di memoria essere bloccato viene memorizzato nella cache nel processore .

Per il P6 e processore recenti famiglie più, se l'area di memoria essendo bloccata durante un'operazione serratura è nella cache nel processore che è eseguire l'operazione BLOCCO come memoria write-back ed è completamente contenuto in una riga della cache, il processore potrebbe non asserire il segnale LOCK # sul bus. Invece, sarà modificare internamente la posizione di memoria e consentire al suo [...] meccanismo di coerenza della cache di assicurare che l'operazione venga eseguita atomicamente. Questa operazione si chiama "blocco della cache". Il meccanismo di coerenza della cache impedisce automaticamente a due o più processori di avere la stessa area della memoria da modificare simultaneamente i dati in quella zona. (Enfasi aggiunta)

Qui si apprende che il P6 e patatine più recenti sono abbastanza intelligente per determinare se hanno davvero per bloccare l'autobus o possono fare affidamento solo sul caching intelligente. Penso che questa sia un'ottimale ottimizzazione.

ho parlato più nel mio post sul blog "How Do Locks Lock?"

+0

Grazie Jeff! E 'stato un grande aiuto :) – IamIC

+0

Jeff, grazie per aver compilato gli spazi vuoti e fornito riferimenti. È bello vedere che i processori più recenti sono in qualche modo più intelligenti sul blocco. –

+0

Grazie, questa è solo l'informazione che mi aspetto di trovare su google per il prefisso di blocco :) – cib

6

No, ma può forzare altri processori ad attendere mentre questo accede alla memoria. Il fatto che questi stati di attesa facciano mai la differenza dipende dalla misura in cui i processori eseguono una cache.