O que são “instruções por ciclo”?

20

Estou aprendendo um pouco mais sobre como os processadores funcionam, mas não consegui encontrar uma resposta direta sobre instruções por ciclo.

Por exemplo, fiquei com 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 operando a 2Ghz executaria 8 bilhões de operações por segundo. É este o caso?

Tenho certeza de que está simplificando demais as coisas, mas se houver um guia ou qualquer outra coisa que eu possa usar para me definir, estou definitivamente aberto a ideias.

    
por Matt Simmons 25.07.2009 / 21:49

6 respostas

21

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 é preciso vários ciclos para ser processada. Em arquiteturas mais antigas o número de ciclos foi fixado, atualmente o número de ciclos por instrução geralmente depende de vários fatores (acerto / erro de cache, predição de ramificação, etc.). Existem tabelas para procurar essas coisas. Freqüentemente, também há a facilidade de medir quantos ciclos uma determinada instrução leva em certas circunstâncias (veja os contadores de desempenho ).

Se você tiver interesse nos detalhes da Intel, o Manual de referência de otimização Intel 64 e IA-32 é uma leitura muito boa.

RISC

A arquitetura RISC (ARM, PowerPC, SPARC) geralmente significa que uma instrução muito simples leva apenas alguns (geralmente apenas um) ciclo.

Superscalar

Mas, independentemente do CISC ou do RISC, existe a arquitetura superescalar. A CPU não está processando uma instrução após a outra, mas está trabalhando em muitas instruções simultaneamente, muito parecido com uma linha de montagem.

A conseqüência é: se você simplesmente procurar os ciclos para cada instrução do seu programa e, em seguida, adicioná-los todos, você terminará com um número elevado. 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 ser várias instruções por ciclo.

    
por 25.07.2009 / 22:01
30

A maneira que eu gosto de pensar é com uma analogia de lavanderia. Instruções de CPU são como cargas de roupa. Você precisa usar a lavadora e a secadora para cada carga. Vamos dizer que cada um leva 30 minutos para ser executado. Esse é o ciclo do relógio. CPUs antigas rodariam a lavadora, depois passariam a secadora, levando 60 minutos (2 ciclos) para terminar cada carga de roupa toda vez.

Pipelining: Um pipeline é quando você usa os dois ao mesmo tempo - você lava uma carga e, em seguida, enquanto está secando, você lava a próxima carga. A primeira carga leva 2 ciclos para terminar, mas a segunda carga é concluída após mais 1 ciclo. Assim, a maioria das cargas só precisa de 1 ciclo, exceto a primeira carga.

Superscalar: Leve toda a roupa para a lavanderia. Pegue 2 arruelas e carregue as duas. Quando terminarem, encontre 2 secadores e use os dois. Agora você pode lavar e secar 2 cargas em 60 minutos. Isso é 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, em seguida, enquanto estas estiverem secando, carregue as arruelas com as próximas 2 cargas. Agora, as 2 primeiras cargas ainda levam 2 ciclos, e depois as 2 seguintes são finalizadas após mais 1 ciclo. Então, na maioria das vezes, você termina 2 cargas em cada ciclo.

Vários núcleos: Dê metade de sua roupa para sua mãe, que também tem 2 lavadoras e 2 secadoras. Com vocês dois trabalhando juntos, você pode fazer o dobro disso. Isto é semelhante ao superescalar, mas ligeiramente diferente. Em vez de ter que levar toda a roupa para e de cada máquina, ela pode fazer isso ao mesmo tempo que você.

Isso é ótimo, podemos fazer oito vezes mais lavanderia do que antes na mesma quantidade de tempo, sem ter que criar máquinas mais rápidas. (Duplique a velocidade do relógio: máquinas de lavar que só precisam de 15 minutos para rodar.)

Agora, vamos falar sobre como as coisas dão errado:

Bolha gasoduto: Você tem uma mancha que não saiu na lavagem, então você decide lavá-la novamente. Agora a secadora está sentada lá, esperando por algo para fazer.

Cache Miss: O caminhão que entrega a roupa suja está preso no trânsito. Agora você tem 2 lavadoras e 2 secadoras, mas você não está fazendo nenhum trabalho porque tem que esperar.

Dependendo da frequência com que as coisas correm mal, não poderemos obter sempre 4 cargas a cada ciclo, pelo que a quantidade real de trabalho pode variar.

Predição de ramos: Bem, você começa a lavar roupas limpas no caso de as manchar depois para que elas já estejam limpas ... ok, é aí que a analogia se desfaz ...

    
por 31.07.2009 / 19:02
2

Não exatamente. O ciclo ao qual você está se referindo é o ciclo de clock e, como a maioria dos pipelines de processadores modernos, são necessários vários ciclos de clock para que 1 instrução seja executada. (Isso é bom porque permite que outras instruções comecem a execução mesmo antes do término da primeira instrução.) Assumindo a circunstância mais ideal, provavelmente seria em torno de 8 bilhões de IPCs, mas todo tipo de coisas acontecem como dependências, bolhas no pipeline , ramos, etc, por isso nem sempre funciona.

Desculpe, é complicado demais para uma resposta direta. Jon Stokes faz um bom trabalho explicando-o com este artigo .

    
por 25.07.2009 / 22:46
2

Os dias em que alguém poderia procurar (ou até memorizar) o tempo de ciclo de cada instrução e saber quantos relógios seriam necessários para que um certo código acabasse, para chips high-end (mas ainda estão com nós 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 predição de ramificação e capacidade de execução especulativa. Ter vários núcleos em um único dado se arrasta na lógica de consistência do cache e em outras complexidades.

Portanto, a resposta curta é: mais núcleos significa mais capacidade de fazer as coisas, mas não de uma maneira agradável e previsível .

    
por 26.07.2009 / 16:42
1

Ludwig explicou a diferença entre o CISC e o RISC, mas esqueceu de mencionar que, embora as instruções RISC sejam simples e rápidas, elas fazem pouco individualmente e, portanto, você precisa agrupar várias para fazer a mesma coisa em um processador CISC. Como resultado, algumas instruções RISC serão mais rápidas, outras não.

    
por 25.07.2009 / 23:11
0

O Cycles é mais um conceito por núcleo. Cada núcleo tem ciclos próprios em paralelo.

    
por 25.07.2009 / 23:08