È molto più difficile sviluppare gare di dati davvero nefasti con una singola CPU. Voglio dire, certo, puoi interrompere lo strappo tra le parole se interrompi una singola CPU, ma puoi costruire scenari esotici in cui non esiste un singolo interfogliamento di thread che fa quello che vuoi?
Va bene, forse fare bug insidiosi non conta come un uso valido di avanzamenti multi-codice. A quanto pare, non c'è molto che il multi-core può fare a quel singolo core non può avere tempo. Il motivo è semplice Se si tenta di evitare quelle razze di dati malvagi, è necessario disporre di punti di sincronizzazione nel codice. Se modelli il tuo codice come un reticolo di calcoli in cui i tuoi input devono essere completi e sincronizzati prima di poter calcolare e produrre output, è facile vedere che una singola CPU può semplicemente farsi strada lungo il reticolo, calcolando il successivo blocco di lavoro disponibile .
Infatti, se puoi dimostrare che il tuo algoritmo può essere risolto da una macchina di Turing (che è praticamente ogni algoritmo che ci interessa), si può dimostrare che l'algoritmo può essere fatto non solo da una singola CPU core, ma in realtà un macchina a stati con un pezzo di nastro molto lungo per la memoria!
Il rilevatore di gara CHESS in realtà sfrutta questo per trovare i casi di gara. Esegue tutto singlethreaded ed esplora sistematicamente tutte le possibili interfacce tra i thread, cercando di trovare casi in cui un test fallisce a causa di un caso di gara. CHESS dipende dal fatto che è possibile eseguire qualsiasi applicazione multithread su un singolo core.
I casi in cui è necessario il multicore vengono visualizzati quando si inizia a estendere i limiti dell'hardware. Quello ovvio è quando hai vincoli di tempo. Alcuni problemi con vincoli di tempo in tempo reale sono impossibili da eseguire single core perché semplicemente non riescono a guidare l'orologio di un singolo core abbastanza velocemente. C'è un motivo per cui le CPU sono salite fino a 4 Ghz e poi si sono stabilizzate un po ', preferendo più core a velocità inferiori.
Una versione più esotica di questo vincolo di temporizzazione è nei sistemi in tempo reale. In alcuni sistemi in tempo reale difficile, il servizio di interrupt è così impegnativo che devi effettivamente scegliere una CPU multi-core che ti consenta di dividere gli interrupt su tutti i core o di incontrare limiti di temporizzazione.
Un altro limite sorge con i bus di dati. Considera il Blue Gene / P come esempio. JUGENE, un particolare supercomputer Blue Gene / P, ha 144 terabyte di memoria. Semplicemente non creano singoli computer CPU che possono accedere a tutta quella memoria.