3 pontos por GN⁺ 2024-12-30 | 1 comentários | Compartilhar no WhatsApp

O bug FDIV do Pentium da Intel

  • Contexto: Em 1993, a Intel lançou o processador Pentium de alto desempenho. O Pentium trouxe muitas melhorias, incluindo um algoritmo de divisão em ponto flutuante mais rápido do que o do processador Intel 486 anterior. No entanto, um ano depois, o professor de matemática Nicely descobriu que o Pentium gerava resultados incorretos ao realizar divisões em ponto flutuante, enquanto pesquisava os recíprocos de primos gêmeos.

  • Descoberta e impacto do bug: A Intel considerou o problema uma "questão técnica muito pequena", mas o bug acabou se tornando um grande caso na mídia. No fim, a Intel decidiu substituir todos os chips Pentium com defeito, o que custou à empresa US$ 475 milhões.

  • Causa do bug: O algoritmo de divisão do Pentium usa uma tabela de consulta. Em 1994, a Intel anunciou que a causa do bug era um erro de script que havia omitido cinco entradas da tabela, mas, na realidade, 16 entradas foram omitidas por causa de um erro matemático. Dessas, cinco entradas ausentes provocavam o bug FDIV.

  • Visão geral dos números de ponto flutuante: Números de ponto flutuante podem representar valores muito grandes e muito pequenos. O chip coprocessador de ponto flutuante 8087 da Intel ajudou no desenvolvimento do padrão IEEE 754, e a maioria dos computadores, incluindo o Pentium, implementou esse padrão.

  • Divisão SRT: O Pentium realiza divisões usando o algoritmo SRT, que é duas vezes mais rápido do que a divisão binária padrão. O algoritmo SRT usa uma abordagem incomum para facilitar a seleção dos dígitos do quociente.

  • Estrutura da tabela de consulta: A tabela de consulta do Pentium contém 2048 entradas, e cinco delas ausentes causam o bug FDIV. Essa tabela é implementada como um arranjo lógico programável (PLA).

  • Limite matemático do bug: A etapa central do algoritmo de divisão é dividir o resto parcial pelo divisor para obter um dígito do quociente. Se um valor de q incorreto for escolhido nesse processo, o algoritmo não consegue se recuperar.

  • Somadores carry-save e carry-lookahead: O circuito de divisão do Pentium usa somadores carry-save para realizar adições e subtrações com eficiência. Esses somadores desempenham um papel importante na ocorrência do bug FDIV.

  • Correção do bug: A Intel corrigiu o bug preenchendo todas as entradas não utilizadas da tabela com 2. Isso eliminou a possibilidade de acessar entradas incorretas, simplificou as equações da PLA e tornou a PLA menor.

1 comentários

 
GN⁺ 2024-12-30
Comentário do Hacker News
  • O autor está pronto para responder perguntas sobre o bug do Pentium

    • A resposta da Intel foi interessante, e houve muita cobertura negativa na imprensa porque ela não substituiu os processadores de todos os usuários
    • Menciona o caso do Amazon Colorsoft, em que o problema foi resolvido com a substituição silenciosa das unidades com defeito
    • Menciona também o caso do Apple AirPods Pro, em que o problema de estalos foi resolvido com substituições discretas
  • No white paper da Intel, a empresa afirmava que um usuário comum enfrentaria o problema uma vez a cada 27 mil anos, mas a IBM analisou que seus clientes poderiam encontrar o problema a cada poucos dias

    • A Intel parece ter considerado um único usuário, enquanto a IBM parece ter considerado solicitações de suporte
    • Ao processar um grande volume de solicitações, mesmo problemas de probabilidade muito baixa podem ocorrer com frequência
  • Apenas uma pessoa teria descoberto o bug durante o uso real

    • Menciona um estudo em que estudantes receberam calculadoras incorretas, explicando que perceber um erro e ser afetado por ele são coisas diferentes
    • A maioria das pessoas não verifica se a saída do computador está correta
  • Compartilha a experiência de ter precisado adicionar código especial em bibliotecas para contornar o problema, já que não era possível controlar a CPU dos clientes

  • Aponta um problema no algoritmo de geração da tabela da Intel, destacando que, nas relações públicas, isso foi descrito como algo trivial, mas na realidade era um problema maior

  • Demonstra curiosidade sobre por que a Intel preencheu todas as entradas não utilizadas da tabela com 2

    • Comenta que uma abordagem mais segura teria sido modificar apenas 5 entradas
    • Observa que a tabela corrigida é mais simples e questiona por que ela não foi feita assim desde o início