3 คะแนน โดย GN⁺ 2024-12-30 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

บั๊ก Pentium FDIV ของ Intel

  • ภูมิหลัง: ในปี 1993 Intel ได้เปิดตัวโปรเซสเซอร์ Pentium ประสิทธิภาพสูง Pentium มีการปรับปรุงหลายอย่าง รวมถึงอัลกอริทึมการหารเลขทศนิยมลอยตัวที่เร็วกว่าโปรเซสเซอร์ Intel 486 รุ่นก่อนหน้า อย่างไรก็ตาม หนึ่งปีต่อมา ศาสตราจารย์คณิตศาสตร์ Nicely ได้ค้นพบว่าระหว่างการศึกษาส่วนกลับของจำนวนเฉพาะคู่แฝด Pentium สร้างผลลัพธ์ที่ผิดพลาดเมื่อทำการหารเลขทศนิยมลอยตัว

  • การค้นพบบั๊กและผลกระทบ: Intel มองปัญหานี้ว่าเป็น "ปัญหาทางเทคนิคเล็กน้อยมาก" แต่บั๊กนี้กลับกลายเป็นประเด็นใหญ่ในสื่อ ในที่สุด Intel ตัดสินใจเปลี่ยนชิป Pentium ที่มีข้อบกพร่องทั้งหมด ซึ่งทำให้บริษัทมีค่าใช้จ่าย 475 ล้านดอลลาร์

  • สาเหตุของบั๊ก: อัลกอริทึมการหารของ Pentium ใช้ตารางค้นหา Intel ประกาศในปี 1994 ว่าสาเหตุของบั๊กมาจากข้อผิดพลาดในสคริปต์ที่ทำให้รายการในตารางหายไปห้ารายการ แต่ในความเป็นจริงมีรายการที่หายไป 16 รายการเนื่องจากความผิดพลาดทางคณิตศาสตร์ และในบรรดารายการที่หายไปนั้น มี 5 รายการที่ทำให้เกิดบั๊ก FDIV

  • ภาพรวมของเลขทศนิยมลอยตัว: เลขทศนิยมลอยตัวสามารถใช้แทนทั้งตัวเลขที่ใหญ่มากและเล็กมากได้ ชิปตัวประมวลผลร่วมเลขทศนิยมลอยตัว 8087 ของ Intel มีส่วนช่วยในการพัฒนามาตรฐาน IEEE 754 และคอมพิวเตอร์ส่วนใหญ่รวมถึง Pentium ก็ได้นำมาตรฐานนี้ไปใช้

  • การหารแบบ SRT: Pentium ใช้อัลกอริทึม SRT ในการหาร ซึ่งเร็วเป็นสองเท่าเมื่อเทียบกับการหารแบบไบนารีมาตรฐาน อัลกอริทึม SRT ใช้วิธีที่ไม่ปกติเพื่อทำให้การเลือกหลักของผลหารทำได้ง่ายขึ้น

  • โครงสร้างของตารางค้นหา: ตารางค้นหาของ Pentium มี 2048 รายการ และมี 5 รายการที่หายไปซึ่งก่อให้เกิดบั๊ก FDIV ตารางนี้ถูกนำไปใช้งานด้วย programmable logic array (PLA)

  • ขอบเขตทางคณิตศาสตร์ของบั๊ก: ขั้นตอนสำคัญของอัลกอริทึมการหารคือการนำเศษย่อยไปหารด้วยตัวหารเพื่อให้ได้หลักของผลหาร หากมีการเลือกค่า q ที่ผิดในกระบวนการนี้ อัลกอริทึมจะไม่สามารถกู้คืนได้

  • ตัวบวกแบบ carry-save และ carry-lookahead: วงจรการหารของ Pentium ใช้ตัวบวกแบบ carry-save เพื่อให้การบวกและการลบมีประสิทธิภาพ ตัวบวกนี้มีบทบาทสำคัญต่อการเกิดบั๊ก FDIV

  • การแก้ไขบั๊ก: Intel แก้บั๊กโดยเติมค่า 2 ลงในทุกรายการที่ไม่ได้ใช้งานของตาราง วิธีนี้ช่วยตัดความเป็นไปได้ในการเข้าถึงรายการที่ไม่ถูกต้อง และยังทำให้สมการ PLA เรียบง่ายขึ้น ส่งผลให้ PLA มีขนาดเล็กลง

1 ความคิดเห็น

 
GN⁺ 2024-12-30
ความคิดเห็นจาก Hacker News
  • ผู้เขียนพร้อมตอบคำถามเกี่ยวกับบั๊ก Pentium

    • การตอบสนองของ Intel น่าสนใจ และมีเสียงวิจารณ์ด้านลบจากสื่อจำนวนมากเพราะไม่ได้เปลี่ยนโปรเซสเซอร์ให้ผู้ใช้ทุกคน
    • กล่าวถึงกรณีของ Amazon Colorsoft ที่แก้ปัญหาโดยเปลี่ยนเครื่องที่มีข้อบกพร่องอย่างเงียบ ๆ
    • กล่าวถึงกรณีปัญหาเสียงแตกของ Apple AirPods Pro ที่แก้ปัญหาด้วยการเปลี่ยนเครื่องอย่างเงียบ ๆ เช่นกัน
  • ในเอกสารไวท์เปเปอร์ของ Intel อ้างว่าผู้ใช้ทั่วไปจะเจอปัญหานี้เพียงครั้งเดียวในรอบ 27,000 ปี แต่ IBM วิเคราะห์ว่าลูกค้าอาจเจอปัญหาทุก ๆ ไม่กี่วัน

    • ดูเหมือนว่า Intel จะคำนวณโดยมองผู้ใช้รายเดียว ขณะที่ IBM มองจากจำนวนคำขอการสนับสนุน
    • เมื่อประมวลผลคำขอจำนวนมาก แม้ปัญหาที่มีความน่าจะเป็นต่ำก็อาจเกิดขึ้นบ่อยได้
  • มีเพียงคนเดียวเท่านั้นที่ค้นพบบั๊กนี้ระหว่างการใช้งานจริง

    • มีการกล่าวถึงงานวิจัยที่แจกเครื่องคิดเลขผิดพลาดให้นักศึกษา เพื่ออธิบายว่าการรับรู้ถึงความผิดพลาดกับการได้รับผลกระทบนั้นเป็นคนละเรื่องกัน
    • คนส่วนใหญ่ไม่ได้ตรวจสอบว่าผลลัพธ์จากคอมพิวเตอร์ถูกต้องหรือไม่
  • มีการแชร์ประสบการณ์ว่าต้องเพิ่มโค้ดพิเศษเข้าไปในไลบรารีเพื่อแก้ปัญหา เพราะไม่สามารถควบคุม CPU ของลูกค้าได้

  • ชี้ให้เห็นปัญหาในอัลกอริทึมการสร้างตารางของ Intel พร้อมเน้นว่าในงาน PR อธิบายว่าเป็นปัญหาเล็กน้อย แต่จริง ๆ แล้วเป็นปัญหาที่ใหญ่กว่านั้น

  • สงสัยว่าเหตุใด Intel จึงเติมค่า 2 ลงในช่องที่ไม่ได้ใช้งานทั้งหมดของตาราง

    • ระบุว่าวิธีที่ปลอดภัยกว่าน่าจะเป็นการแก้ไขเพียง 5 รายการเท่านั้น
    • ตารางที่แก้ไขแล้วกลับเรียบง่ายกว่า จึงสงสัยว่าทำไมถึงไม่ทำแบบนั้นตั้งแต่แรก