É muito mais difícil desenvolver corridas de dados realmente nefastas com uma única CPU. Quero dizer, com certeza, você pode usar o rasgo entre palavras se interromper uma única CPU, mas pode criar cenários exóticos onde não há uma intercalação única de threads que faça o que você deseja?
Tudo bem, talvez fazer erros insidiosos não conte como um uso válido de avanços em vários códigos. Como se vê, não há muito que o mutli-core possa fazer; esse único núcleo não pode dar tempo. O motivo é simples. Se você tentar evitar essas corridas de dados incorretos, precisará ter pontos de sincronização no seu código. Se você modelar seu código como uma rede de cálculos em que as entradas devem ser completas e sincronizadas antes que você possa calcular e produzir saídas, é fácil ver que uma única CPU pode simplesmente trabalhar ao longo da rede, calculando o próximo bloco de trabalho disponível. .
De fato, se você puder demonstrar que seu algoritmo pode ser resolvido por uma máquina de Turing (que é praticamente todos os algoritmos de que gostamos), pode ser comprovado que o algoritmo pode ser feito não apenas por uma CPU de núcleo único, mas de fato um máquina de estado com um pedaço muito longo de fita para memória!
O detector de corrida CHESS realmente aproveita isso para encontrar casos de corrida. Ele executa tudo individualmente e explora sistematicamente todas as intercalações possíveis entre os threads, tentando encontrar casos em que um teste falha devido a um caso de corrida. O CHESS depende do fato de que você pode executar qualquer aplicativo multithread em um único núcleo.
Os casos em que você precisa de vários núcleos aparecem quando você começa a esticar os limites do hardware. O óbvio é quando você tem restrições de tempo. Alguns problemas com restrições de tempo em tempo real são impossíveis de serem executados em núcleo único, porque eles simplesmente não conseguem acionar o relógio de um único núcleo com rapidez suficiente. Há uma razão pela qual as CPUs subiram para 4Ghz e depois se estabeleceram um pouco, preferindo mais núcleos em velocidades mais baixas.
Uma versão mais exótica dessa restrição de tempo está em sistemas de tempo difícil. Em alguns sistemas em tempo real, o serviço de interrupções é tão exigente que você realmente precisa escolher uma CPU com vários núcleos que permita dividir as interrupções entre os núcleos ou ter limitações de tempo.
Outro limite surge com os barramentos de dados. Considere o Blue Gene / P como um exemplo. JUGENE, um supercomputador Blue Gene / P específico, possui 144 terabytes de memória. Eles simplesmente não fabricam computadores com CPU única que podem acessar toda essa memória.