O erro de US$ 475 milhões da Intel: o problema de silício por trás do bug FDIV do Pentium
(righto.com)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
Comentário do Hacker News
O autor está pronto para responder perguntas sobre o bug do Pentium
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
Apenas uma pessoa teria descoberto o bug durante o uso real
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