College Online
0%

RISC vs CISC

Módulo 1 · Aula 3 ~15 min de leitura Nível: Introdutório

Vídeo da aula estará disponível em breve

Por que CISC existiu

Nas décadas de 1960 e 1970, a memória era extremamente cara. Um megabyte de RAM custava milhares de dólares. Nesse contexto, cada byte do programa era precioso, e os projetistas de processadores tinham uma motivação clara: fazer cada instrução fazer o máximo possível, para que o programa ocupasse menos memória.

Assim nasceu a filosofia CISC (Complex Instruction Set Computer). Processadores CISC oferecem centenas de instruções, muitas delas complexas — uma única instrução pode ler da memória, fazer uma operação aritmética, e gravar o resultado de volta na memória, tudo de uma vez. Os modos de endereçamento são abundantes: direto, indireto, indexado, com deslocamento, auto-incremento, e combinações desses.

O raciocínio era: se o compilador (ou o programador Assembly) consegue expressar uma operação inteira em uma instrução, o programa é menor, ocupa menos memória, e precisa de menos buscas na memória — exatamente o que se queria quando memória era o recurso escasso.

O exemplo mais emblemático de ISA CISC é o x86, da Intel. Lançado em 1978 com o 8086, o x86 acumulou instruções ao longo de quase 50 anos de compatibilidade retroativa. Hoje, o manual de instruções do x86-64 tem milhares de páginas.

Características CISC
Filosofia CISC — "faça muito por instrução"

  • Instruções de tamanho variável (1 a 15 bytes no x86)
  • Muitas instruções (centenas a milhares)
  • Instruções que acessam memória diretamente
    (ex: ADD [mem], reg — soma um valor da memória com um registrador)
  • Muitos modos de endereçamento (~12 no x86)
  • Poucos registradores de propósito geral (8 no x86 original)
  • Microcódigo interno: cada instrução complexa é decomposta
    em micro-operações simples pelo hardware
  • Compiladores mais simples (menos trabalho para gerar código)
  • Hardware mais complexo (decodificador é grande e difícil)

Por que RISC surgiu

No final dos anos 1970, dois grupos de pesquisa — um em Berkeley (liderado por David Patterson) e outro em Stanford (liderado por John Hennessy) — fizeram uma observação importante ao analisar como os programas reais usavam processadores CISC:

A maioria das instruções complexas quase nunca era usada. Os compiladores geravam código que usava um subconjunto pequeno e simples do conjunto de instruções. As instruções "poderosas" do CISC raramente apareciam no código gerado — o compilador preferia sequências de instruções simples que ele entendia e otimizava melhor.

Além disso, o hardware necessário para suportar instruções complexas (o decodificador de microcódigo) ocupava uma fração enorme do chip — área que poderia ser usada para cache, mais registradores, ou pipeline mais profundo.

A conclusão: simplifique as instruções, simplifique o hardware, e use o silício liberado para coisas que realmente melhoram performance. Assim nasceu o RISC (Reduced Instruction Set Computer).

i
Os pais do RISC David Patterson e John Hennessy — os mesmos autores do livro-texto desta disciplina — são os criadores dos projetos RISC-I (Berkeley, 1982) e MIPS (Stanford, 1984). Eles receberam o Prêmio Turing em 2017 por essas contribuições. O livro que usamos não é apenas um texto didático: é escrito pelos inventores da tecnologia que ele ensina.
Características RISC
Filosofia RISC — "faça pouco por instrução, mas faça rápido"

  • Instruções de tamanho fixo (4 bytes em MIPS, ARM, RISC-V)
  • Poucas instruções (tipicamente 50-150)
  • Arquitetura load/store: APENAS instruções load e store
    acessam memória; todas as outras operam sobre registradores
  • Poucos modos de endereçamento (2-4)
  • Muitos registradores de propósito geral (32 em MIPS e RISC-V)
  • Sem microcódigo: cada instrução executa diretamente no hardware
  • Pipeline eficiente: formato fixo facilita decodificação
  • Compilador mais complexo (precisa otimizar melhor)
  • Hardware mais simples (mais espaço para cache e registradores)

Tabela comparativa

CISC vs RISC — Comparação detalhada
Característica           CISC (ex: x86)              RISC (ex: ARM, MIPS, RISC-V)
───────────────────────  ──────────────────────────  ────────────────────────────────
Tamanho da instrução     Variável (1-15 bytes)       Fixo (4 bytes)
Número de instruções     Centenas a milhares         50-150
Acesso à memória         Qualquer instrução          Apenas load/store
Modos de endereçamento   Muitos (~12)                Poucos (2-4)
Registradores            Poucos (8-16 gerais)        Muitos (32 gerais)
Decodificação            Complexa (microcódigo)      Simples (hardware direto)
Pipeline                 Difícil de implementar      Natural e eficiente
Código gerado            Menor (menos instruções)    Maior (mais instruções)
Complexidade             No hardware                 No compilador
Consumo de energia       Maior                       Menor
Ciclos por instrução     Variável (1-20+)            ~1 (ideal)

Exemplos reais:
  CISC: Intel x86/x86-64, Motorola 68000, VAX
  RISC: ARM (ARMv7, ARMv8/AArch64), MIPS, RISC-V, SPARC, PowerPC

A mesma operação em x86 e MIPS

Para tornar a diferença concreta, vejamos como a operação a = b + c (onde todas as variáveis estão na memória) é expressa em cada filosofia:

Assembly x86 (CISC)
# x86: pode operar diretamente com memória
# a = b + c (a, b, c são endereços de memória)

mov  eax, [b]       # carrega b no registrador eax
add  eax, [c]       # soma c (da memória!) ao eax   ← memória + registrador
mov  [a], eax       # grava resultado em a

# Total: 3 instruções
# Nota: a instrução ADD acessa memória diretamente —
# isso é típico de CISC
Assembly MIPS (RISC)
# MIPS: somente load/store acessam memória
# a = b + c (a, b, c são endereços de memória)

lw   $t0, b($zero)   # load: carrega b da memória para $t0
lw   $t1, c($zero)   # load: carrega c da memória para $t1
add  $t2, $t0, $t1   # soma: $t2 = $t0 + $t1 (apenas registradores!)
sw   $t2, a($zero)   # store: grava $t2 na memória em a

# Total: 4 instruções
# Nota: a instrução ADD opera SOMENTE com registradores —
# load/store são as únicas que tocam memória

O código RISC tem mais instruções, mas cada instrução é simples, tem tamanho fixo, e executa em um ciclo. O código CISC tem menos instruções, mas a instrução ADD eax, [c] precisa internamente fazer um acesso à memória e uma soma — ela é "macro" por fora mas decompostas em micro-operações por dentro.

i
O paradoxo moderno do x86 Processadores x86 modernos (desde o Pentium Pro, 1995) são CISC por fora mas RISC por dentro. O decodificador de instruções traduz cada instrução CISC complexa em uma sequência de micro-operações (uOps) simples e de tamanho fixo, que são executadas por um core RISC interno com pipeline, execução fora de ordem, e todas as otimizações RISC. O x86 mantém a ISA CISC por compatibilidade retroativa, mas a microarquitetura é RISC.

O cenário atual: ARM, RISC-V, e o mundo real

A história de RISC vs CISC não terminou com um "vencedor" claro. Em vez disso, cada filosofia dominou mercados diferentes:

ARM — a ISA RISC mais bem-sucedida comercialmente. Projetada pela Acorn Computers em 1985, hoje está em praticamente todos os smartphones, tablets, e dispositivos embarcados do planeta. O segredo do ARM foi a eficiência energética: fazer mais com menos energia. Em 2020, a Apple demonstrou que ARM compete diretamente com x86 em desempenho de desktop/laptop com o chip M1 — que superou processadores Intel em muitos benchmarks enquanto consumia uma fração da energia.

RISC-V — a ISA de código aberto. Criada em 2010 em Berkeley (por uma equipe que incluía David Patterson), o RISC-V é uma ISA livre de royalties que qualquer empresa pode implementar sem pagar licença. Isso é revolucionário: ARM cobra licenciamento, x86 é proprietário da Intel/AMD. RISC-V está crescendo rapidamente em embarcados, IoT, aceleradores de IA, e processadores de uso geral. A China, em particular, está investindo pesadamente em RISC-V para reduzir dependência de tecnologias americanas.

x86-64 — continua dominando servidores e desktops por inércia e compatibilidade. Décadas de software compilado para x86 criam um efeito de rede difícil de romper. Mas o domínio está sendo desafiado: a AWS usa processadores ARM (Graviton) em seus servidores, e o Apple Silicon mostrou que a transição é viável.

Participação de mercado por segmento (2025)
Segmento              ISA dominante      Por quê
────────────────────  ─────────────────  ──────────────────────────────
Smartphones           ARM (99%+)         Eficiência energética
Tablets               ARM (99%+)         Eficiência energética
Embarcados / IoT      ARM + RISC-V       Custo baixo, baixo consumo
Laptops               x86 (~80%)         Compatibilidade de software
                      ARM (~20%)         Apple Silicon, Snapdragon X
Desktops              x86 (~90%)         Compatibilidade, gaming
Servidores             x86 (~85%)         Legado, ecossistema
                      ARM (~15%)         AWS Graviton, Ampere
Supercomputadores     ARM + x86          Fugaku (ARM), outros (x86)
Aceleradores IA       ISAs customizadas  Google TPU, NVIDIA GPU (PTX)

A lição de design

RISC vs CISC é, no fundo, uma decisão sobre onde colocar a complexidade:

Essa é uma decisão de design universal, não exclusiva de hardware. Em software, a mesma pergunta aparece: você cria uma API com poucos endpoints simples (estilo RISC) que o cliente compõe, ou uma API com endpoints complexos (estilo CISC) que resolvem tudo em uma chamada?

A resposta que a história deu: simplicidade no núcleo, complexidade na borda. Mantenha o componente central simples e rápido; deixe a inteligência para as camadas externas (compilador, software, orquestrador) que são mais fáceis e baratas de atualizar.

i
Princípio RISC em software O conceito Unix de "faça uma coisa e faça bem feito" (cada comando faz uma tarefa, compostos via pipes) é a filosofia RISC aplicada a software. Docker, microsserviços, Unix pipes — todos seguem o princípio de componentes simples compostos para fazer coisas complexas.

No harness.os

RISC vs CISC é uma decisão de design sobre complexidade — fazer poucas coisas bem feitas (RISC) versus muitas coisas num só passo (CISC). No harness.os, preferimos workflows RISC: cada passo faz uma coisa, compostos em pipelines.

Tools RISC vs Tools CISC no harness.os
Abordagem CISC (tool complexo):
  do_everything(
    project="college-online",
    action="create_lesson",
    module=1,
    lesson=3,
    content="...",
    quiz="...",
    log_decision=true,
    publish=true
  )
  → Uma chamada faz tudo. Difícil de debugar, difícil de recompor.

Abordagem RISC (tools simples, compostos):
  start_session("college-online")      # fetch: carregar contexto
  get_workflow("create-lesson")        # decode: entender o processo
  log_decision("RISC vs CISC", ...)    # execute: registrar decisão
  log_learning("design patterns", ...) # execute: registrar aprendizado
  end_session(summary, next_steps)     # write-back: gravar resultado

  → Cada tool faz UMA coisa. Fáceis de debugar, recompor, substituir.

O harness.os escolheu RISC: tools atômicos, compostos pelo agente.
O agente é o "compilador" que decide a sequência de operações.

A analogia se estende ao design de MCP tools em geral. Um tool log_decision(title, rationale) é RISC — faz uma coisa, recebe parâmetros claros, retorna resultado previsível. Um tool hipotético do_work(task_description) seria CISC — faz coisas demais, difícil de prever o comportamento, difícil de testar. Assim como processadores RISC modernos são mais eficientes, tools RISC são mais confiáveis e componíveis.

Homework

  1. Pesquise o processador ARM que está no seu celular (ex: Snapdragon 8 Gen 3, Apple A17 Pro, Dimensity 9300). Qual é a ISA exata (ARMv8? ARMv9?)? Quantos registradores de propósito geral a ISA define? Compare com o x86-64 do seu computador.
  2. Escreva a operação d = (a + b) * c em Assembly MIPS (estilo RISC, load/store) e em pseudoassembly x86 (estilo CISC, acesso direto à memória). Quantas instruções cada versão precisa? Qual ocupa mais bytes na memória?
  3. O RISC-V é uma ISA aberta e gratuita. Pesquise: quais empresas já produzem processadores RISC-V? Para quais aplicações eles estão sendo usados? Por que empresas chinesas estão particularmente interessadas em RISC-V?
  4. No harness.os, analise 3 MCP tools que você usa frequentemente. Classifique cada um como "RISC" (faz uma coisa) ou "CISC" (faz várias coisas). Se algum for CISC, proponha como decompô-lo em tools RISC menores.
  5. Releia o princípio "simplicidade no núcleo, complexidade na borda". Identifique outro exemplo (fora de hardware) onde esse princípio é aplicado — pode ser em software, em organização empresarial, ou em qualquer sistema.

Resumo

Verifique seu entendimento

Qual é a principal razão pela qual processadores RISC usam a arquitetura load/store (apenas load e store acessam memória)?

  • Porque processadores RISC não têm memória RAM, apenas registradores
  • Para simplificar o hardware e permitir que todas as instruções aritméticas executem em um ciclo, facilitando o pipeline
  • Porque acessar memória diretamente é impossível em arquiteturas com instruções de tamanho fixo
  • Para economizar energia, já que instruções load/store consomem menos watts