3 điểm bởi GN⁺ 2024-12-30 | 1 bình luận | Chia sẻ qua WhatsApp

Lỗi FDIV của Pentium của Intel

  • Bối cảnh: Năm 1993, Intel đã ra mắt bộ xử lý Pentium hiệu năng cao. Pentium có nhiều cải tiến, bao gồm thuật toán chia số dấu phẩy động nhanh hơn so với bộ xử lý Intel 486 trước đó. Tuy nhiên, một năm sau, giáo sư toán học Nicely khi nghiên cứu nghịch đảo của các số nguyên tố sinh đôi đã phát hiện Pentium tạo ra kết quả sai khi thực hiện phép chia số dấu phẩy động.

  • Việc phát hiện lỗi và tác động: Intel xem đây là một "vấn đề kỹ thuật rất nhỏ", nhưng lỗi này đã trở thành một sự kiện lớn trên truyền thông. Cuối cùng Intel quyết định thay thế toàn bộ các chip Pentium bị lỗi, khiến công ty tốn 475 triệu đô la.

  • Nguyên nhân của lỗi: Thuật toán chia của Pentium sử dụng một bảng tra cứu. Năm 1994, Intel công bố nguyên nhân của lỗi là do lỗi script khiến năm mục bị thiếu khỏi bảng, nhưng trên thực tế có 16 mục bị thiếu do một sai lầm toán học. Trong số đó, năm mục bị thiếu đã gây ra lỗi FDIV.

  • Tổng quan về số dấu phẩy động: Số dấu phẩy động có thể biểu diễn cả các số rất lớn lẫn rất nhỏ. Chip đồng xử lý dấu phẩy động 8087 của Intel đã góp phần vào việc phát triển tiêu chuẩn IEEE 754, và hầu hết máy tính, bao gồm cả Pentium, đã triển khai tiêu chuẩn này.

  • Phép chia SRT: Pentium sử dụng thuật toán SRT để thực hiện phép chia, nhanh gấp đôi phép chia nhị phân tiêu chuẩn. Thuật toán SRT dùng một cách tiếp cận không thông thường để giúp việc chọn chữ số thương trở nên dễ dàng hơn.

  • Cấu trúc của bảng tra cứu: Bảng tra cứu của Pentium chứa 2048 mục, và năm mục bị thiếu đã gây ra lỗi FDIV. Bảng này được triển khai bằng mảng logic khả trình (PLA).

  • Ranh giới toán học của lỗi: Bước cốt lõi của thuật toán chia là chia phần dư từng phần cho số chia để lấy chữ số thương. Nếu chọn sai giá trị q trong quá trình này, thuật toán sẽ không thể phục hồi.

  • Bộ cộng carry-save và carry-lookahead: Mạch chia của Pentium sử dụng bộ cộng carry-save để thực hiện phép cộng và phép trừ một cách hiệu quả. Bộ cộng này đóng vai trò quan trọng trong việc gây ra lỗi FDIV.

  • Cách sửa lỗi: Intel đã sửa lỗi bằng cách điền giá trị 2 vào toàn bộ các mục không sử dụng trong bảng. Điều này loại bỏ khả năng truy cập vào các mục sai và đơn giản hóa các phương trình PLA, giúp PLA nhỏ hơn.

1 bình luận

 
GN⁺ 2024-12-30
Ý kiến trên Hacker News
  • Tác giả cho biết sẵn sàng trả lời nếu có câu hỏi về lỗi Pentium

    • Cách Intel phản ứng khá thú vị, và do không thay bộ xử lý cho tất cả người dùng nên đã có nhiều tin tức tiêu cực
    • Nhắc đến trường hợp Amazon Colorsoft đã âm thầm thay thế hàng lỗi để giải quyết vấn đề
    • Cũng nhắc đến trường hợp Apple AirPods Pro bị lỗi tiếng nứt và đã được xử lý bằng cách âm thầm thay thế
  • Trong sách trắng của Intel, hãng tuyên bố người dùng thông thường sẽ chỉ gặp sự cố một lần trong 27.000 năm, nhưng IBM phân tích rằng khách hàng có thể gặp vấn đề vài ngày một lần

    • Có vẻ Intel tính theo từng người dùng đơn lẻ, còn IBM tính theo các yêu cầu hỗ trợ
    • Khi xử lý khối lượng yêu cầu lớn, ngay cả lỗi có xác suất rất nhỏ cũng có thể xảy ra thường xuyên
  • Trên thực tế chỉ có một người phát hiện ra lỗi trong quá trình sử dụng

    • Nhắc đến một nghiên cứu cung cấp máy tính cầm tay tính sai cho sinh viên để giải thích rằng nhận ra lỗi và bị ảnh hưởng bởi lỗi là hai chuyện khác nhau
    • Phần lớn mọi người không kiểm tra xem đầu ra của máy tính có chính xác hay không
  • Có người chia sẻ trải nghiệm rằng vì không thể kiểm soát CPU của khách hàng, họ đã phải thêm mã đặc biệt vào thư viện để khắc phục vấn đề

  • Chỉ ra vấn đề trong thuật toán tạo bảng của Intel, nhấn mạnh rằng phía PR mô tả đây là lỗi nhỏ nhưng thực tế đó là vấn đề lớn hơn nhiều

  • Thắc mắc vì sao Intel lại điền số 2 vào toàn bộ các mục không sử dụng trong bảng

    • Nhắc rằng cách an toàn hơn có lẽ là chỉ sửa 5 mục
    • Bảng sau khi sửa còn đơn giản hơn, nên đặt câu hỏi vì sao ngay từ đầu họ không làm như vậy