No modelo monociclo, todas as instruções são executadas em um único ciclo de clock. Quais são as implicações desse modelo para o tempo de execução de instruções com diferentes níveis de complexidade, como ADD e LW?
Passo 1
O enunciado diz: no modelo monociclo (single-cycle) todas as instruções são executadas em um único ciclo de clock. A pergunta é: quais são as implicações disso para o tempo de execução de instruções com diferentes níveis de complexidade, exemplificadas por
(soma, simples) e
(load word, mais complexa por acessar memória)?\n
Informações dadas/no problema: (1) todas as instruções devem terminar dentro de um mesmo ciclo de clock; (2) temos duas instruções representativas: e
. Nada mais foi pedido explicitamente.
Informações dadas/no problema: (1) todas as instruções devem terminar dentro de um mesmo ciclo de clock; (2) temos duas instruções representativas:
Passo 2
O que significa, em prática, “todas as instruções em um único ciclo”? Vou explicar passo a passo os blocos que normalmente compõem uma instrução e quanto tempo cada bloco pode levar. Uma instrução típica passa por estágios (vou nomear e explicar cada um, bem mastigado):
- IF (Instruction Fetch): busca da instrução na memória. Precisa de tempo para consultar a memória de instruções e trazer os bits da instrução.
- ID (Instruction Decode + register read): decodificar a instrução e ler registradores.
- EX (Execute / ALU): executar operação aritmética ou calcular endereço (por exemplo, para
calcula-se o endereço base+offset). - MEM (Memory access): acessar memória de dados (ler para
, escrever para ). Nem toda instrução usa essa etapa. - WB (Write Back): escrever o resultado de volta no registrador (por exemplo, resultado do
ou dado carregado pela ).
Cada estágio tem um atraso/tempo próprio, que vou chamar de
,
,
,
,
. Esses tempos são positivos e dependem do hardware (velocidade da memória, atraso da ALU, etc.).
Passo 3
No modelo monociclo a duração do ciclo de clock precisa ser suficientemente longa para que a instrução mais demorada complete todos os estágios dentro de um único ciclo. Portanto o tempo do ciclo de clock (vou chamar de
) é a soma dos tempos dos estágios, porque o mesmo ciclo precisa conter todos eles sequencialmente:
Observação importante: mesmo que uma instrução não use um estágio (por exemplo,
normalmente não usa
), o ciclo inteiro ainda tem duração
. Ou seja, o ciclo é fixado pelo pior caso.
Passo 4
Agora veja como isso afeta especificamente
e
.
- Para
os estágios usados tipicamente são IF, ID, EX e WB. O tempo “real necessário” para completar uma seria aproximadamente
- Para
os estágios usados são IF, ID, EX, MEM e WB. O tempo necessário é
Logo
porque
inclui o acesso à memória (
) a mais.
No monociclo, todavia, o tempo real por instrução é igual a
para todas as instruções (porque cada instrução tem que caber num ciclo). Como já mostrei,
Isso implica que a
também gastará
, mesmo que pudesse ser feita mais rápido.
Passo 5
Vamos ilustrar com um número simples (para você ver que não é só discurso):
- suponha
, , , , (unidades: ns, só exemplo). - Então
- Uma
“precisaria” de se rodasse exatamente no que precisa, mas no monociclo ela acabará levando porque o ciclo é de . - Uma
realmente precisa dos por causa do .
Isso mostra a ineficiência: instruções simples perdem tempo esperando o ciclo finalizado pelo caso pior.
Passo 6
Conectando com a fórmula clássica de desempenho de CPU (que é útil na prova):
No monociclo temos
(cada instrução ocupa exatamente um ciclo). Assim
Como
é grande (determinado pelo caso mais lento, tipicamente instruções que acessam memória como
), o tempo total da CPU cresce mesmo que muitas instruções sejam simples. Portanto o throughput/performace fica limitado pelo tempo do ciclo, não pelo gasto real de cada instrução isolada.
Passo 7
Outras implicações práticas (resumidas e didáticas):
- Ineficiência: instruções simples (ADD) são “forçadas” a gastar tempo extra — desperdício.
- Frequência de clock baixa: para acomodar a instrução mais lenta, a frequência máxima da CPU fica limitada a
, que é pequena. - Simplicidade de controle: o monociclo é simples de projetar e entender (controle único que garante que tudo ocorra em um ciclo), então é pedagógico e fácil de implementar, mas paga preço em desempenho.
- Uso de recursos: os componentes ficam subutilizados em muitas instruções (por exemplo, a memória de dados fica ociosa durante
, mas o ciclo todo é longo). - Comparação rápida com alternativas: multicycle e pipeline dividem o trabalho em passos menores e permitem ciclos mais curtos ou sobreposição de estágios, melhorando performance. No monociclo isso não é possível.
Passo 8
Resumo que é útil para a prova e que você pode escrever em uma resposta curta:
- explique que
é fixado pelo tempo da instrução mais lenta (normalmente ); - escreva a relação
(porque ); - ressalte que isso faz com que
(outras instruções simples) sejam obrigadas a executar no mesmo tempo de , gerando perda de desempenho.
Resposta
O tempo do ciclo de clock
é determinado pela instrução mais lenta (por exemplo
), isto é
.
Como no modelo monociclo, o tempo total é
, logo instruções simples como
também demoram
mesmo que precisem de menos estágios.
Implicações práticas: desperdício de tempo para instruções simples, menor frequência máxima possível (clock lento), simplicidade de implementação (pró) mas baixo desempenho em comparação a projetoss multicycle ou pipeline (contra).
Como
Implicações práticas: desperdício de tempo para instruções simples, menor frequência máxima possível (clock lento), simplicidade de implementação (pró) mas baixo desempenho em comparação a projetoss multicycle ou pipeline (contra).