Como as CPUs multi-core funcionam?

5

Eu sei, título de pergunta vago, mas a minha principal questão é: 1 núcleo tem que executar apenas um programa de cada vez? A "multitarefa" no nível da CPU funciona alternando entre as tarefas e, em caso afirmativo, por quê? Por que as CPUs não podem funcionar em várias tarefas ao mesmo tempo? Eles têm bilhões de transistores, por que alguns transistores não funcionam em um problema enquanto os outros trabalham em outro? é uma restrição de hardware ou apenas uma restrição do sistema operacional?

    
por MarcusJ 15.01.2013 / 05:23

4 respostas

2

Um transistor não pode "trabalhar em um problema". É um bloco de construção básico de CPU, inútil por si só, mas necessário para construir portas lógicas (que podem então computar operações simples como adição, etc ...). Há muito hardware em um único núcleo, mais do que apenas um transistor.

Há também muito mais em uma CPU do que apenas "fazer coisas". Há um gerenciador de memória virtual, um gerenciador de cache de hardware, várias interfaces para conectar a CPU à placa-mãe e à memória do sistema, etc ... Muitas vezes, as CPUs Multicore compartilham muito hardware dentro da CPU real.

Um "programa" é um conceito de software - a CPU não sabe o que é. Tudo o que a CPU faz é executar operações enviadas pelo sistema operacional. Nesse sentido, uma CPU de um único núcleo só pode executar uma operação lógica por vez. Mas você ainda é capaz de fazer várias coisas ao mesmo tempo, mesmo em um processador de núcleo único, porque o sistema operacional alterna o programa que está sendo executado atualmente em uma taxa muito rápida. As CPUs Multicore permitem que você execute mais de uma tarefa ao mesmo tempo, o que pode ser explorado pelo sistema operacional, permitindo que você execute mais programas ao mesmo tempo confortavelmente, ou que um programa aproveite vários núcleos para rodar mais rápido. / p> Tecnicamente, um "programa" é um processo dividido em um ou mais encadeamentos, cada um deles independente em sua execução, todos eles têm sua própria pilha, contexto de CPU (registradores, etc.) e outras coisas, embora eles ainda podem se comunicar entre si dentro do processo, obviamente.

    
por 15.01.2013 / 05:43
2

O ciclo clássico que a CPU segue é:

Fetch Instruction -> Decode It -> Execute It

O motivo é que a maioria dos problemas que as pessoas historicamente queriam resolver com computadores envolveu várias etapas, uma de cada vez e ordem, em que o resultado de algumas dessas etapas pode afetar etapas posteriores. Com esses problemas, pular e atacar a partir do meio usando vários "trabalhadores" não funciona tão bem. Portanto, esse modelo serviu bem a esses tipos de programas, que na verdade ainda são muito comuns. (Isto é, até a renderização de gráficos 3D se tornar comum ...)

O modelo acima foi otimizado e modificado ao longo dos anos, é claro. E o trabalho progrediu para garantir que menos da CPU esteja inativa com o passar do tempo. Mesmo já no 68000 você tinha "pipelining", onde várias instruções estão realmente "em vôo" em várias partes da CPU (e é por isso que a previsão de ramificação foi desenvolvida, porque se você tiver várias instruções pipeladas, e então precisa jogue fora os resultados por causa de um ramo, você perde desempenho). Hoje você tem coisas adicionais que impedem que a CPU pare ou espere por algo, como:

  • cache (evita que a CPU tenha que esperar pela memória lenta às vezes)
  • execução fora de ordem (reorganiza as instruções buscadas em uma ordem que executa com mais eficiência)
  • registra renomeação (permite que a execução fora de ordem funcione melhor, fornecendo instruções a suas próprias cópias de registros enquanto outras instruções terminam seu trabalho)

Assim, cada processador ou núcleo contém vários subsistemas que trabalham juntos para interpretar e executar um fluxo de instruções. Em certo sentido, partes de CPUs modernas estão realmente trabalhando em algo e outras partes estão trabalhando em outra coisa, ao mesmo tempo.

Mas, embora eles possam ser muito eficientes usando as técnicas acima, finalmente, todos eles estão trabalhando juntos no mesmo fluxo de instruções. Então eles não podem ser totalmente independentes um do outro. Se você quiser executar dois fluxos de instruções de uma só vez, precisará de dois processadores ou núcleos.

Um sistema operacional multitarefa moderno está saltando entre vários fluxos de instruções armazenados (ou seja, programas) na memória. O que o sistema operacional faz é interromper o programa quando ele ocupa muito tempo (a maioria das CPUs projetadas para ambientes multitarefa tem um cronômetro que causa um IRQ após um determinado intervalo ou um mecanismo semelhante) ou alterna para outra tarefa. se o processo estiver aguardando algum tipo de E / S ou entrada. Nunca executa fisicamente duas instruções ao mesmo tempo em uma única CPU.

Acho que algo como a ideia de que você está falando foi testada com a arquitetura Itanium e VLIW . Leia esse artigo da Wikipedia, ele explica as coisas um pouco melhor e mais profundo do que eu estou tentando aqui.

    
por 26.04.2013 / 03:37
1

Na verdade, a parte "tarefas de comutação" é executada por um sistema operacional. O processador é uma peça de hardware relativamente "burra" que apenas "tritura números". Do ponto de vista técnico, o processador não pode trabalhar em mais de uma tarefa, porque todas as tarefas são escritas assumindo que elas têm controle total de um processador no momento da execução. Isso é parcialmente um legado devido à compatibilidade com versões anteriores necessárias.

Com um processador multi-core mais de um "processador completo" disponível, então mais de um programa pode ter "processador completo" disponível no momento, para que eles possam ser executados simultaneamente.

    
por 15.01.2013 / 05:56
1

O SO só pode executar UM thread de um processo em UM core ao MESMO tempo, mas uma vez que você sabe que um processo é dividido em vários threads pelo SO antes de poder rodar no Core, e qualquer SO moderno é normalmente rodando cerca de 100 ou mais processos, você será capaz de imaginar o quão rápido a comutação acontece, se o Core tiver clock de 1 GHz, ele será atualizado em torno de um bilhão de vezes por segundo para liberar "espaço" para os próximos threads a serem executados. / p>

Recentemente, em processadores Intel, você pode ter ouvido falar de sua tecnologia Multi-Threading, que faz com que ONE seja capaz de executar DOIS segmentos no exato MESMO tempo, teoricamente dobrando o desempenho do Core.

    
por 26.04.2013 / 02:09