it-swarm-pt.tech

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

Tenho aprendido um pouco mais sobre como funcionam os processadores, mas não consegui encontrar uma resposta direta sobre 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. É este o caso?

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

23
Matt Simmons

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 leva vários ciclos para processar. Em arquiteturas mais antigas, o número de ciclos era fixo, hoje em dia o número de ciclos por instrução geralmente depende de vários fatores (acertos/erros de cache, previsão de desvio, etc.). Existem tabelas para pesquisar essas coisas. Freqüentemente, também existem facilitadores para medir realmente quantos ciclos uma determinada instrução em certas circunstâncias leva (consulte contadores de desempenho ).

Se você estiver interessado 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.

Superescalar

Mas independentemente de 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, de maneira muito semelhante a uma linha de montagem.

A conseqüência é: Se você simplesmente olhar os ciclos de cada instrução de seu programa e, em seguida, somá-los, você obterá 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 o rendimento geral pode muito bem ser de várias instruções por ciclo.

22
Ludwig Weinzierl

Gosto de pensar nisso com a 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 leve 30 minutos para ser executado. Esse é o ciclo do relógio. CPUs antigas ligariam a lavadora e, em seguida, a secadora, levando 60 minutos (2 ciclos) para terminar cada carga de roupa, todas as vezes.

Pipelining: Um pipeline é quando você usa ambos ao mesmo tempo - você lava uma carga e, enquanto ela 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. Portanto, a maioria das cargas precisa apenas de 1 ciclo, exceto a primeira carga.

Superescalar: Leve toda a roupa para a lavanderia. Pegue 2 arruelas e carregue-as. Quando terminar, 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 carregamento ainda leva 2 ciclos, mas você pode fazer mais deles agora. O tempo médio agora é de 1 carga por ciclo.

Superescalar com Pipelining: Lave as 2 primeiras cargas, então, enquanto estas secam, carregue as lavadoras com as próximas 2 cargas. Agora, as primeiras 2 cargas ainda levam 2 ciclos e as próximas 2 são concluídas após mais 1 ciclo. Portanto, na maioria das vezes, você finaliza 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. É semelhante ao superescalar, mas um pouco diferente. Em vez de você ter que mover todas as roupas de e para cada máquina sozinho, ela pode fazer isso ao mesmo tempo que você.

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

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

Bolha do pipeline: Você tem uma mancha que não saiu com a lavagem, então você decide lavá-la novamente. Agora a secadora está parada, esperando alguma coisa 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 não está trabalhando porque tem que esperar.

Dependendo da frequência com que as coisas dão errado, nem sempre seremos capazes de realizar 4 cargas a cada ciclo, portanto, a quantidade real de trabalho realizado pode variar.

Previsão do ramo: Bem, você começa a lavar a roupa em suas roupas limpas, caso você as manche mais tarde, para que já estejam limpas ... ok, é aqui que a analogia falha ...

32
Kevin Panko

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

Desculpe, é muito complicado para uma resposta direta. Jon Stokes faz um bom trabalho explicando isso com este artigo .

3
hyperslug

Os dias em que se podia pesquisar (ou mesmo memorizar) o tempo de ciclo de cada instrução e saber quantos relógios seriam necessários para um determinado código terminar, já se foram para os chips de ponta (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 prejudica a 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.

2

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, você deve encadear vários para fazer a mesma coisa como uma única instrução em um processador CISC. Como resultado, algumas instruções RISC serão mais rápidas, outras não.

1
Synetech

Ciclos é mais um conceito por núcleo. Cada núcleo faz seus próprios ciclos em paralelo.

0
Joakim Elofsson