Ciclos por instrução

Origem: Wikipédia, a enciclopédia livre.

Em arquitetura de computadores, ciclos por instrução (também conhecido como ciclos de clock por instrução, clocks por instrução, ou CPI) é um aspecto da performance de um processador: o número médio de ciclos por clock por instrução para um programa ou fragmento de programa.[1] É o inverso multiplicativo de instruções por ciclo.

Definição[editar | editar código-fonte]

Ciclos Por Instrução é definido por:

Onde  é o número de instruções para um dado tipo de instrução, é o ciclo de clock para um dado tipo de instrução,  é o contador total de instrução. O somatório soma todos os tipos de instruções para um dado processo de benchmark.

Explicação[editar | editar código-fonte]

Vamos assumir uma pipeline RISC clássica, com as 5 etapas seguintes:

  1. Instruction fetch cycle (IF)
  2. Instruction decode/Register fetch cycle (ID)
  3. Execution/Effective address cycle (EX)
  4. Acesso à memória (MEM)
  5. Write-back cycle (WB)

Cada etapa requer um ciclo de clock e uma instrução passa pelas fases dos estágios seqüêncialmente. Sem pipelining, uma nova instrução é buscada na etapa 1 apenas após a instrução anterior terminar na etapa 5. Portanto, sem pipelining o número de ciclos usados para executar uma instrução é 5. Esta é a definição de CPI.

Com pipelining nós podemos melhorar o CPI explorando paralelismo ao nível de instrução. Por exemplo, e se uma instrução for buscada em cada ciclo? Nós podemos teoricamente ter 5 instruções nas 5 etapas de pipeline de uma vez (uma instrução por etapa). Neste caso, uma instrução diferente iria completar a etapa 5 em cada ciclo de clock, e portanto na média temos um ciclo de clock por instrução (CPI = 1).

Com um processador single-issue, o melhor CPI possível é 1. Porém com processadores multiple-issue, nós podemos conseguir valores de CPI ainda melhores. Por exemplo, um processador que realiza duas instruções por ciclo de clock (veja Superscalar) pode atingir um CPI de 0.5 quando duas instruções estão completando a cada ciclo de clock.

Exemplos[editar | editar código-fonte]

Exemplo 1[editar | editar código-fonte]

Para o multi-ciclo MIPS, existem 5 tipos de instruções:

  • Load (5 ciclos)
  • Store (4 ciclos)
  • R-type (4 ciclos)
  • Branch (3 ciclos)
  • Jump (3 ciclos)

Se um programa tem:

  • 50% de instruções R-type
  • 15% de instruções load
  • 25% de instruções store
  • 8% de instruções branch
  • 2% de instruções jump

então, o CPI é: 0,5*4 + 0,15*5 + 0,25*4 + 0,08*3 + 0,02*3 = 4,05

Exemplo 2[editar | editar código-fonte]

[2] Um processador de 400-MHz foi usado para executar um programa de benchmark com o seguinte instruction mix e contador de ciclos de clock:

Tipo de instrução Contador de instruções Contador de ciclo de clock
Aritmética de inteiro 45000 1
Transferência de dados 32000 2
Ponto flutuante 15000 2
Transferência de controle 8000 2

Determine o CPI efetivo, taxa MIPS, e tempo de execução para este programa. Total do contador de instruções = 100000

Já que: and

Portanto:



Ver também[editar | editar código-fonte]

  • MIPS
  • Instructions per cycle (IPC)
  • Instructions per second (IPS)
  • Ciclos por segundo (Hz)
  • Megahertz myth
  • O artigo de benchmark forence uma introdução útil sobre medição de performance de computadores para os leitores interessados no tópico.

Referências

  1. Patterson, David A.; Hennessy, John L. Computer Organization and Design: The Hardware/Software Interface. [S.l.: s.n.] 
  2. Advanced Computer Architecture by Kai Hwang, Chapter 1, Exercise Problem 1.1