O defeito
A divisão no primeiro Pentium usava o algoritmo Sweeney-Robertson-Tocher, que funciona consultando quocientes parciais numa tabela. A tabela era implementada como um arranjo lógico programável de 2.048 células, das quais 1.066 precisavam conter um de cinco valores: menos dois, menos um, zero, mais um, mais dois.
Por causa de um erro no script que carregava o arranjo, cinco entradas ficaram de fora. Quando o hardware de divisão indexava uma dessas células, lia zero em vez de mais dois, e a resposta saía errada - por um erro relativo de até cerca de seis partes em cem mil.
É essa a falha de engenharia inteira. Um script, cinco células, uma resposta errada no quinto algarismo significativo. Versões posteriores carregaram a tabela completa e o problema sumiu.
A estatística, e por que era a errada
A posição da Intel era que a falha era desprezível, e a empresa publicou um estudo para sustentar isso: Statistical Analysis of Floating Point Flaw in the Pentium Processor, que estimava que um usuário típico encontraria um erro mais ou menos uma vez a cada muitos milhares de anos de computação comum. Em divisões aleatórias de 64 bits a taxa é de cerca de uma em nove bilhões.
A aritmética está correta e a conclusão não se segue, por uma razão que vale internalizar porque se repete o tempo todo em trabalho de segurança e de confiabilidade.
A falha era determinística. Para um par específico de operandos ela não falhava raramente; falhava toda vez. Um número de uma em nove bilhões descreve o que acontece quando as entradas são sorteadas ao acaso, e computações reais não sorteiam. Elas rodam a mesma fórmula sobre os mesmos dados repetidamente, num laço, numa planilha, num lote noturno. Um usuário cujo trabalho por acaso tocasse um par afetado encontraria o erro em toda execução e jamais veria um resultado correto - enquanto a média populacional dizia que o problema praticamente não existia.
Média sobre a população é a estatística certa para estimar o total de incidentes. É a estatística errada para dizer a um indivíduo se ele está afetado, e a Intel a usou para responder à segunda pergunta. Todo argumento de risco na forma "a probabilidade é minúscula" merece a pergunta seguinte: minúscula em relação a quê, e a falha é independente ou determinística para uma dada entrada?
A cronologia, que é a história de verdade
Maio ou junho de 1994. Os testes da própria Intel acham o defeito. Os relatos divergem sobre quem e exatamente quando, e uma reconstrução detalhada sugere que provavelmente foi achado mais de uma vez internamente e mantido em silêncio a cada vez. A avaliação interna, citada nesse relato, era que aquilo não qualificava sequer como errata. A empresa revisou a circuitaria em silêncio, não divulgou nada e não recolheu nada.
13 de junho de 1994. Thomas Nicely, professor de matemática no Lynchburg College calculando somas sobre primos e primos gêmeos, nota inconsistências pouco depois de acrescentar um Pentium às suas máquinas. Passa quatro meses eliminando outras explicações - o próprio código, a placa-mãe, o chipset - porque a primeira suposição de um profissional é que o erro é dele.
19 de outubro. Ele tem certeza de que o processador está errado. As máquinas antigas dão a resposta certa; três sistemas Pentium diferentes dão a mesma resposta errada.
24 de outubro. Ele reporta à Intel.
1º de novembro. A Intel responde que verificações preliminares não acharam problema.
30 de outubro, e depois. Nicely manda e-mail a contatos acadêmicos descrevendo o defeito e pedindo que testem as próprias máquinas. A verificação volta rápido, e a história se espalha pela internet jovem numa velocidade que a empresa não previra.
E então a posição que quebrou tudo. A Intel ofereceu troca apenas a clientes que demonstrassem estar afetados - um ônus quase impossível de cumprir, já que estabelecer que seus cálculos tocavam uma das entradas faltantes exigia saber quais entradas faltavam, coisa que a Intel não publicara. Pediu-se prova de dano justamente a quem não podia produzi-la.
20 de dezembro de 1994. A Intel voltou atrás: troca sob pedido, sem perguntas, com lançamento contra os resultados do quarto trimestre. O valor foi de cerca de 475 milhões de dólares. O relatório anual da empresa se descreveu como tendo sido engolfada por uma controvérsia.
O que um profissional deve tirar disso
O defeito era barato e o tratamento foi caro. Havia outra sequência disponível em cada passo: publicar a errata em maio, descrever as operações afetadas, lançar a correção, oferecer troca a quem fizesse trabalho numérico. Esse caminho custa uma semana ruim e algum silício. O caminho tomado custou quase meio bilhão de dólares e trinta anos sendo o exemplo. É o argumento de que não existe código perfeito aplicado ao hardware: a falha não foi de engenharia, foi no intervalo entre saber e dizer.
"Consertamos em silêncio" é uma decisão com prazo de validade. A Intel corrigiu a circuitaria sem dizer nada, o que funciona só enquanto ninguém de fora acha o original. Alguém sempre acha - e quando acha, o fato de você já saber vira a história, substituindo o defeito por completo. A DigiNotar revogou certificados por um mês em silêncio e foi descoberta por um cidadão comum; o formato é idêntico.
Pedir ao cliente que prove o dano inverte a relação. Na prática, diz a ele que é ele quem está sob suspeita, no momento em que mais precisa ser acreditado - o oposto do que o registro do Therac-25 ensina sobre relatos que não se consegue explicar de imediato. Onde um defeito é determinístico e as entradas afetadas são conhecidas do fabricante e não do usuário, o ônus não pode honestamente ficar com o usuário.
E quem achou era um estranho fazendo o próprio trabalho. Nicely não estava auditando a Intel. Estava contando primos, notou que seus números estavam errados, e passou quatro meses suspeitando de si mesmo antes de suspeitar do chip. Quase todo caso deste catálogo tem alguém como ele: Kaminsky com o DNS, um usuário de Gmail em Teerã com a DigiNotar, um departamento de estatística com um mapa. O relato que chega de fora, sobre algo que não deveria ser possível, é a entrada mais valiosa que um fabricante recebe e a que mais provavelmente será descartada.
Fontes
- HandWiki: o algoritmo SRT é implementado como arranjo lógico programável de 2.048 células, das quais 1.066 deveriam conter um de cinco valores (-2, -1, 0, +1, +2); nos chips defeituosos cinco células que deveriam conter +2 estavam faltando e retornavam 0; Nicely, professor de matemática no Lynchburg College, escrevera código para enumerar primos, primos gêmeos, trigêmeos e quádruplos, notou inconsistências em 13 de junho de 1994 pouco depois de acrescentar um Pentium, não conseguiu eliminar outros fatores como erros de programação e chipsets de placa-mãe até 19 de outubro, e reportou à Intel em 24 de outubro
- Wikipedia: a Intel teria tomado conhecimento do problema de forma independente até junho de 1994 e começado a corrigi-lo, mas escolheu não divulgar detalhes publicamente nem recolher os processadores afetados; em 30 de outubro de 1994 Nicely mandou e-mail a vários contatos acadêmicos descrevendo o defeito e pedindo relatos de testes em 486-DX4, Pentiums e clones; o defeito foi rapidamente verificado por outros e a notícia se espalhou rápido na internet; a Intel adotou política de troca sob pedido em 20 de dezembro de 1994 e fez lançamento contra os resultados do quarto trimestre
- Ken Shirriff, "Intel's $475 million error": em maio de 1994 os testes internos da Intel revelaram que muito raramente a divisão de ponto flutuante era ligeiramente imprecisa, e como apenas um em 9 bilhões de valores causava o problema a visão da Intel era que aquilo não qualificava sequer como errata; ainda assim a Intel revisou a circuitaria em silêncio; Nicely determinou que uma divisão específica estava errada em três computadores Pentium diferentes enquanto os antigos davam a resposta certa; os relatos sobre quem achou internamente divergem, e o defeito provavelmente foi mantido em silêncio dentro da Intel e descoberto mais de uma vez
- Grokipedia: a falha decorria de cinco entradas omitidas numa tabela de 1.066 entradas na ROM de constantes da FPU que implementava o algoritmo SRT, produzindo erros relativos de até cerca de 6 x 10^-5; afetava aproximadamente 1 em 9 bilhões de divisões aleatórias de 64 bits mas era determinística para pares específicos de operandos; um representante da Intel respondeu a Nicely em 1º de novembro de 1994 dizendo que verificações preliminares não tinham achado problema no processador
- Center Consulting: a tabela deveria ter 1.066 entradas mas, por um erro no script que carregava o arranjo, cinco ficaram de fora, e quando o hardware de divisão indexava uma dessas células buscava zero em vez do valor correto; o estudo interno da Intel "Statistical Analysis of Floating Point Flaw in the Pentium Processor", de Sharangpani e Barton, argumentava que a falha era extremamente improvável de afetar usuários comuns, estimando um erro apenas uma vez a cada muitos milhares de anos de computação normal; a Intel inicialmente ofereceu troca apenas a clientes que demonstrassem estar afetados, voltou atrás em dezembro de 1994 para trocar qualquer Pentium afetado sob pedido, e fez um lançamento de cerca de 475 milhões de dólares; a lição duradoura foi sobre tratamento, um defeito de hardware estreito e bem compreendido virando uma das falhas mais famosas da computação menos pelo silício do que pelo modo como seu fabricante escolheu primeiro falar dele
- Tom's Hardware, trinta anos depois: como apenas cinco das 1.066 células populadas tinham o valor errado, a divisão de ponto flutuante era em geral correta até pelo menos o quarto dígito, o que talvez explique o defeito ter passado despercebido por mais de um ano; a Intel reconheceu o problema no relatório anual de 1994, dizendo ter sido engolfada por uma controvérsia, e admitiu que custara 475 milhões de dólares recolher os processadores defeituosos