O que são "Instruções por Ciclo"?

23

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.

Matt Simmons
fonte
Não, não é esse o caso. As CPUs x86 modernas podem sustentar três instruções por núcleo por ciclo sob condições ideais, enquanto algumas instruções podem exigir dezenas de ciclos.
David Schwartz

Respostas:

22

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.

Ludwig Weinzierl
fonte
9
Para mim, a analogia da "linha de montagem" sugere apenas um pipelining simples, não uma arquitetura superescalar. Superescalar envolve replicar partes do hardware da CPU (por exemplo, um estágio do pipeline que é um gargalo) para melhorar a taxa de transferência.
sblair
2
Estou adicionando por uma questão de brevidade: RISC = conjunto de instruções reduzido; CISC = conjunto de instruções complexo. Boa explicação, Ludwig por apontar a taxa de acertos / erros do cache e (por fim) apontar o TLB. Explicar a arquitetura do microprocessador não é fácil, especialmente para compactar tudo em um post (bastante compacto)! :)
osij2is
1
Pelo que ouvi dizer, hoje em dia, as CPUs gastam muito tempo aguardando o trabalho aparecer na memória principal. Pelo menos essa foi a resposta que recebi quando perguntei por que não há mais núcleos de execução em uma CPU.
surfasb
32

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 ...

Kevin Panko
fonte
Boa analogia. Eu vou roubá-lo.
dmckee
6
E o hyperthreading é como ter várias pessoas lavando a mesma lavanderia.
Ronald Pottol 14/10/2009
1
Filial Previsão: você começar a lavar a roupa que você acha que vai precisar na próxima semana
Akash
2
Hyperthreading: você começa a aceitar a roupa de outras pessoas e anuncia o número de máquinas de lavar roupa que possui (1). Em breve, você perceberá que sua máquina de lavar roupa tem espaço para mais do que o par de calças que você está lavando, não apenas outro par de calças, mas algo menor. Então você coloca algumas meias também. Agora você anuncia duas máquinas de lavar e espera que as pessoas deixem as roupas diversas o suficiente para que você sempre "preencha os buracos" com itens menores. Apenas quando esse cara que só vem com 10 jeans sujos e 1 par de meias larga suas coisas, fica mais lento do que nunca.
precisa saber é o seguinte
@ Akash Você lava roupas que ainda nem têm manchas, só por precaução?
precisa
3

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 .

hyperslug
fonte
2

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 .

dmckee
fonte
1

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.

Synetech
fonte
0

Ciclos é mais um conceito por núcleo. Cada núcleo possui ciclos em paralelo.

Joakim Elofsson
fonte