Aprendi um pouco mais sobre como os processadores funcionam, mas não consegui encontrar uma resposta direta sobre as instruções por ciclo.
Por exemplo, eu tinha a impressão de que uma CPU de quatro núcleos poderia executar quatro instruções por ciclo; portanto, uma CPU de quatro núcleos rodando a 2 Ghz executaria 8 bilhões de operações por segundo. É esse o caso?
Tenho certeza de que são coisas simplistas demais, mas se houver um guia ou outra coisa que eu possa usar para me esclarecer, estou definitivamente aberto a idéias.
cpu
computer-architecture
Matt Simmons
fonte
fonte
Respostas:
As palavras-chave que você provavelmente deve procurar são CISC , RISC e arquitetura superescalar .
CISC
Em uma arquitetura CISC (x86, 68000, VAX), uma instrução é poderosa, mas são necessários vários ciclos para processar. Em arquiteturas mais antigas, o número de ciclos era fixo; atualmente, o número de ciclos por instrução geralmente depende de vários fatores (acerto / falha do cache, previsão de ramificação, etc.). Existem mesas para procurar essas coisas. Muitas vezes, também existem facilidades para medir quantos ciclos uma determinada instrução em determinadas circunstâncias leva (consulte os contadores de desempenho ).
Se você estiver interessado nos detalhes da Intel, o Manual de referência da otimização Intel 64 e IA-32 é uma leitura muito boa.
RISC
A arquitetura RISC (ARM, PowerPC, SPARC) significa que geralmente uma instrução muito simples leva apenas alguns (geralmente apenas um) ciclo.
Superscalar
Mas, independentemente do CISC ou RISC, existe a arquitetura superescalar. A CPU não está processando uma instrução após a outra, mas está trabalhando em várias instruções simultaneamente, como uma linha de montagem.
A conseqüência é: se você simplesmente procurar os ciclos de todas as instruções do seu programa e depois adicioná-los todos, você terminará com um número muito alto. Suponha que você tenha uma CPU RISC de núcleo único. O tempo para processar uma única instrução nunca pode ser menor que o tempo de um ciclo, mas a taxa de transferência geral pode muito bem ser várias instruções por ciclo.
fonte
O jeito que eu gosto de pensar é com uma analogia da lavanderia. As instruções da CPU são como cargas de roupa. Você precisa usar a lavadora e a secadora para cada carga. Digamos que cada um leva 30 minutos para ser executado. Esse é o ciclo do relógio. As CPUs antigas usavam a lavadora e, em seguida, a secadora, levando 60 minutos (2 ciclos) para terminar cada carregamento de roupa, todas as vezes.
Tubulação: Uma tubulação é quando você usa os dois ao mesmo tempo - você lava uma carga e, enquanto está secando, lava a próxima carga. A primeira carga leva 2 ciclos para terminar, mas a segunda carga é concluída após mais 1 ciclo. Portanto, a maioria das cargas precisa apenas de 1 ciclo, exceto a primeira carga.
Superscalar: Leve toda a roupa para a lavanderia. Pegue 2 arruelas e carregue as duas. Quando terminar, encontre 2 secadores e use os dois. Agora você pode lavar e secar 2 cargas em 60 minutos. São 2 cargas em 2 ciclos. Cada carga ainda leva 2 ciclos, mas você pode fazer mais deles agora. O tempo médio agora é de 1 carga por ciclo.
Superscalar com Pipelining: Lave as 2 primeiras cargas e, enquanto estiverem secando, carregue as arruelas com as 2 cargas seguintes. Agora, as 2 primeiras cargas ainda levam 2 ciclos e as 2 seguintes são concluídas após mais 1 ciclo. Assim, na maioria das vezes, você termina duas cargas em cada ciclo.
Múltiplos núcleos: entregue metade da sua roupa à sua mãe, que também possui 2 lavadoras e 2 secadoras. Com os dois trabalhando juntos, você pode fazer o dobro. Isso é semelhante ao superescalar, mas um pouco diferente. Em vez de você ter que mover toda a roupa para e de cada máquina, ela pode fazer isso ao mesmo tempo que você.
Isso é ótimo, podemos lavar roupa oito vezes mais do que antes na mesma quantidade de tempo, sem precisar criar máquinas mais rápidas. (Dobrar a velocidade do relógio: máquinas de lavar que precisam apenas de 15 minutos para funcionar.)
Agora, vamos falar sobre como as coisas dão errado:
Bolha do gasoduto: você tem uma mancha que não saiu na lavagem e decide lavá-la novamente. Agora, o secador está apenas sentado, esperando algo para fazer.
Falta de cache: o caminhão que entrega a roupa suja está preso no trânsito. Agora você tem 2 lavadoras e 2 secadoras, mas não está fazendo nenhum trabalho porque precisa esperar.
Dependendo da frequência com que as coisas dão errado, nem sempre podemos realizar 4 cargas a cada ciclo, portanto, a quantidade real de trabalho realizado pode variar.
Previsão de ramificação: Bem, você começa a lavar a roupa com suas roupas limpas, caso as mancha mais tarde, para que elas já estejam limpas ... ok, é aqui que a analogia se rompe ...
fonte
Não exatamente. O ciclo ao qual você está se referindo é o ciclo do relógio e, como a maioria dos processadores modernos produz pipeline, são necessários vários ciclos de relógio para que uma instrução seja executada. (Isso é bom porque permite que outras instruções iniciem a execução antes mesmo da conclusão da 1ª instrução.) Assumindo a circunstância mais ideal, provavelmente seria de cerca de 8 bilhões de IPC, mas todo tipo de coisa acontece como dependências, bolhas no pipeline , galhos etc. para que nem sempre funcione.
Desculpe, é muito complicado para uma resposta direta. Jon Stokes explica muito bem este artigo .
fonte
Os dias em que se pode procurar (ou até memorizar) o tempo de ciclo de cada instrução e saber quantos relógios seriam necessários para que um determinado código terminasse já são muito antigos para chips de última geração (mas ainda estão conosco em alguns micro-controladores). Um núcleo de CPU moderno e de uso geral pode ter várias cópias de várias unidades de execução diferentes em vários pipelines, acessando um cache de memória de vários estágios com sua própria lógica, além de previsão de ramificação e capacidade de execução especulativa. Ter vários núcleos em um único dado arrasta na lógica de consistência do cache e outras complexidades.
Portanto, a resposta curta é: mais núcleos significam mais capacidade de fazer as coisas, mas não de uma maneira agradável e previsível .
fonte
Ludwig explicou a diferença entre CISC e RISC, mas esqueceu de mencionar que, embora as instruções RISC sejam simples e rápidas, elas fazem pouco individualmente e, portanto, é necessário agrupar várias para fazer a mesma coisa que uma única instrução em um processador CISC. Como resultado, algumas instruções RISC serão mais rápidas, outras não.
fonte
Ciclos é mais um conceito por núcleo. Cada núcleo possui ciclos em paralelo.
fonte