Ciclos por instrução

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

Ciclos Por Instrução é definido por:

C P I = Σ i ( I C i ) ( C C i ) I C {\displaystyle CPI={\frac {\Sigma _{i}(IC_{i})(CC_{i})}{IC}}}

Onde  I C i {\displaystyle IC_{i}}  é o número de instruções para um dado tipo de instrução, C C i {\displaystyle CC_{i}} é o ciclo de clock para um dado tipo de instrução, I C = Σ i ( I C i ) {\displaystyle IC=\Sigma _{i}(IC_{i})}  é o contador total de instrução. O somatório soma todos os tipos de instruções para um dado processo de benchmark.

Explicação

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

Exemplo 1

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

[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

CPI = 45000 × 1 + 32000 × 2 + 15000 × 2 + 8000 × 2 100000 = 155000 100000 = 1.55 {\displaystyle {\text{CPI}}={\frac {45000\times 1+32000\times 2+15000\times 2+8000\times 2}{100000}}={\frac {155000}{100000}}=1.55}

400 M h z = 400 , 000 , 000 H z {\displaystyle 400Mhz=400,000,000Hz}

Já que: M I P S 1 / C P I {\displaystyle MIPS\propto 1/CPI} and M I P S c l o c k F r e q u e n c y {\displaystyle MIPS\propto clockFrequency}

Effective processor performance = MIPS = clock frequency CPI × 1 1 Million = 400 , 000 , 000 1.55 × 1000000 = 400 1.55 = 258 MIPS {\displaystyle {\text{Effective processor performance}}={\text{MIPS}}={\frac {\text{clock frequency}}{\text{CPI}}}\times {\frac {1}{\text{1 Million}}}={\frac {400,000,000}{1.55\times 1000000}}={\frac {400}{1.55}}=258\,{\text{MIPS}}}

Portanto:

Execution time ( T ) = CPI × Instruction count × clock time = CPI × Instruction Count frequency = 1.55 × 100000 400 × 1000000 = 1.55 4000 = 0.0003875 sec = 0.3875 ms {\displaystyle {\text{Execution time}}(T)={\text{CPI}}\times {\text{Instruction count}}\times {\text{clock time}}={\frac {{\text{CPI}}\times {\text{Instruction Count}}}{\text{frequency}}}={\frac {1.55\times 100000}{400\times 1000000}}={\frac {1.55}{4000}}=0.0003875\,{\text{sec}}=0.3875\,{\text{ms}}}



Ver também

  • 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