No computador 1, o tempo de execução de todas as instruções é 10 ns . No computador 2, o tempo de execução é de 5 ns . Você pode afirmar com certeza que o computador 2 é mais rápido? Discuta sua resposta.

Passo 1

O enunciado dá duas informações simples e pede uma conclusão:
  • No computador 1, o tempo de execução de todas as instruções é 10\\ \text{ns}.
  • No computador 2, o tempo de execução de todas as instruções é 5\\ \text{ns}.
A pergunta é: “Você pode afirmar com certeza que o computador 2 é mais rápido?” — ou seja, com apenas esses dados, dá para concluir inequivocamente que qualquer programa rodará mais rápido no computador 2?

Passo 2

Primeiro vamos organizar o que normalmente importa para dizer se um computador é mais rápido ao executar um programa. Há uma fórmula padrão e muito útil para tempo de CPU (tempo de execução de um programa):
\text{Tempo de CPU} = \text{Contagem de Instruções} \times \text{CPI} \times \text{Tempo de ciclo}çõ
Expliquei cada termo bem devagar:
  • \text{Contagem de Instruções}çõ = número total de instruções que o programa precisa executar no processador (depende do compilador, ISA e algoritmos gerados).
  • \text{CPI} = “cycles per instruction”: média de ciclos de clock que cada instrução leva (depende da microarquitetura, hazards, caches, branch mispredictions, etc.).
  • \text{Tempo de ciclo} = duração de um ciclo de clock (por exemplo, 10\\ \text{ns} corresponde a frequência 100\\ \text{MHz}).
Observação importante sobre o enunciado: quando ele diz "tempo de execução de todas as instruções é 10\\ \text{ns}" pode significar, de forma simplificada, que o tempo por instrução médio (isto é, o produto \text{CPI}\times\text{Tempo de ciclo} ou simplesmente o tempo de ciclo se \text{CPI}=1) é 10\\ \text{ns}. Há ambiguidade: não está claro se esse número é o tempo de ciclo, a latência de instrução, o throughput, ou uma média já incorporando CPI. Por isso já surgem dúvidas.

Passo 3

Agora mostro o caso em que, comumente, podemos dizer que o computador 2 é mais rápido: suponha que tudo mais seja igual entre os dois (mesma contagem de instruções e mesma média de \text{CPI}). Então comparar apenas o tempo por instrução é legítimo.
Exemplo numérico:
  • Seja \text{IC}=1000 (Contagem de Instruções igual para ambos) e \text{CPI}=1.
  • Computador 1: tempo por instrução =10\\ \text{ns}. Então
\text{Tempo}_1 = 1000 \times 10\\ \text{ns} = 10\,000\\ \text{ns}.
  • Computador 2: tempo por instrução =5\\ \text{ns}. Então
\text{Tempo}_2 = 1000 \times 5\\ \text{ns} = 5\,000\\ \text{ns}.
Aqui o computador 2 é exatamente 2\times mais rápido (speedup =2). Logo, se tudo mais for igual, sim, o computador 2 é mais rápido.

Passo 4

Agora mostro um cenário em que o computador 2 NÃO é mais rápido, apesar de ter tempo por instrução menor. A chave é que programas compilados para arquiteturas diferentes podem requerer números diferentes de instruções para realizar a mesma tarefa.
Exemplo numérico:
  • Suponha que para um mesmo programa o computador 1 execute \text{IC}_1 = 500 instruções (por exemplo, instruções mais poderosas), e o computador 2 execute \text{IC}_2 = 1200 instruções (por exemplo, conjunto RISC que desmembra operações complexas em mais instruções). Mantemos \text{CPI}=1 para os dois para simplificar.
  • Computador 1:
\text{Tempo}_1 = 500 \times 10\\ \text{ns} = 5000\\ \text{ns}.
  • Computador 2:
\text{Tempo}_2 = 1200 \times 5\\ \text{ns} = 6000\\ \text{ns}.
Neste caso o computador 1 é mais rápido, mesmo tendo instruções mais “lentas” individualmente. Conclusão: tempo por instrução isolado não garante performance de programa.

Passo 5

Outros fatores que alteram totalmente a comparação (explico cada um em linguagem simples):
  • Variação de \text{CPI}: caches, faltas de cache, desvios incorretos de branch, stalls de pipeline podem aumentar muito a média de ciclos por instrução. Mesmo um tempo de ciclo menor não compensa um \text{CPI} muito maior.
  • Latência versus throughput: um núcleo pode ter latência alta por instrução, mas pipeline/superscalar permite emitir várias instruções por 5\\ \text{ns} (throughput) — isso muda a comparação dependendo do que exatamente foi medido.
  • Código gerado/compilador/ISA: instruções complexas (CISC) podem fazer mais trabalho por instrução; instruções simples (RISC) podem exigir mais instruções.
  • I/O e espera por memória: se o programa é limitado por acesso à memória (cache misses graves), o ganho de reduzir o tempo por instrução pode ser insignificante.
  • Métricas reais: a única forma confiável de comparar é medir tempo de execução do programa real (benchmarks) ou calcular com a fórmula usando valores reais de \text{IC}, \text{CPI} e tempo de ciclo.

Passo 6

Resumo prático e orientação para a prova (como usar isso rapidamente na hora do exame):
  • Separe claramente “tempo por instrução” de “tempo para executar o programa”. Use a fórmula
\text{Tempo de CPU} = \text{IC} \times \text{CPI} \times \text{Tempo de ciclo}.
  • Se te derem só o tempo por instrução (ou só tempo de ciclo) para duas máquinas, NÃO conclua automaticamente qual é mais rápida a menos que haja a afirmação adicional: “a contagem de instruções e o CPI são iguais para ambas” ou “o mesmo código e compilador geram igual número de instruções”.
  • Na prova, se pedirem julgamento a partir de dados incompletos, diga explicitamente quais hipóteses você está fazendo (por exemplo, assumo igual \text{IC} e igual \text{CPI}), e mostre o cálculo rápido do speedup.

Passo 7

Conclusão amigável: com apenas os dois números fornecidos não é possível afirmar com certeza que o computador 2 é mais rápido para todos os programas. Pode ser verdade sob hipóteses adicionais (mesmo IC e CPI), mas pode ser falso em muitos cenários práticos (diferença de IC, caches, CPI, etc.). Para ter certeza, é preciso ou medir tempo real do programa (benchmark) ou conhecer \text{IC} e \text{CPI} para cada máquina e então usar a fórmula do Passo 2.

Resposta

Não — não se pode afirmar com certeza que o computador 2 é mais rápido apenas com esses números; isso só seria verdade se contagem de instruções e \text{CPI} fossem iguais em ambas as máquinas.

Exercícios relacionados