ทำไม FastDOOM ถึงเร็ว
- ในฤดูหนาวปี 2024 มีการบูรณะคอมพิวเตอร์ IBM PS/1 486-DX2 66Mhz และได้ทดสอบ FastDOOM โดย DOOM รุ่นดั้งเดิมทำได้ 21.5 fps แต่ FastDOOM ทำได้ 30 fps ซึ่งรันได้เร็วขึ้น 30%
ภูมิหลังทางประวัติศาสตร์
- DOOM ถูกพัฒนาบน NeXT Workstation และ DOS I/O ถูกเขียนโดย id Software ในปี 1997 ซอร์สโค้ดไม่ได้ถูกเปิดเผยเพราะมีไลบรารีเสียงชื่อ DMX จึงมีการเปิดเผยเวอร์ชัน Linux แทน หลังจากนั้นชุมชนได้กู้คืนเวอร์ชัน DOS ผ่าน PCDOOM v2
ภาพรวมของการเพิ่มประสิทธิภาพ
- Victor "Viti95" Nieto ทุ่มเทอย่างมากเพื่อเพิ่มประสิทธิภาพของ FastDOOM มีการดาวน์โหลด FastDOOM ทั้ง 52 รีลีสและเปรียบเทียบประสิทธิภาพเพื่อวิเคราะห์จุดที่ปรับปรุงได้
โบราณคดี Git
- Viti95 แสดงให้เห็นถึงความสามารถยอดเยี่ยมในการจัดการ git โดยแต่ละคอมมิตทำงานเพียงอย่างเดียวและแต่ละรีลีสมีการติดแท็กไว้ ประวัติ git ของ FastDOOM ประกอบด้วยคอมมิต 3,042 รายการ ทำให้สามารถเบนช์มาร์กแต่ละฟีเจอร์ได้
FastDOOM v0.1
- รีลีสนี้มี 220 คอมมิต และการปรับให้เหมาะสมหลักคือการลดการเรนเดอร์แถบสถานะ ซึ่งเพิ่มประสิทธิภาพได้ 2 fps
FastDOOM v0.6
- รีลีสนี้มี 33 คอมมิต และมีการปรับให้เหมาะสม เช่น ข้ามการเรนเดอร์ที่ไม่จำเป็น และลบการอ้างอิงทางอ้อมของพอยน์เตอร์ผู้เล่น
FastDOOM v0.8
- รีลีสนี้มี 282 คอมมิต โดยมุ่งเน้นที่ตัวเรนเดอร์โหมดข้อความ และมีการปรับให้เหมาะสมหลายจุด
FastDOOM v0.9.2
- รีลีสนี้มี 110 คอมมิต และมีการปรับให้เหมาะสมในการเปรียบเทียบ
skyflatnum และการปรับ R_DrawColumn
FastDOOM v0.9.7
- รีลีสนี้มี 293 คอมมิต และมีการทดสอบการเปลี่ยนแปลง x86 ASM กับการปรับให้เหมาะสมด้านการเลือก CPU
โหมด 13h เทียบกับโหมด Y
- FastDOOM พยายามปรับให้เหมาะกับ CPU และบัสวิดีโอหลากหลายแบบ โหมด 13h เป็นวิธีคัดลอกข้อมูลจาก RAM ไปยัง VRAM ส่วนโหมด Y เป็นวิธีเขียนข้อมูลลง VRAM โดยตรง แต่ละโหมดให้ประสิทธิภาพต่างกันตามความเร็วของ CPU และบัส
การปรับแต่งเพิ่มเติม
- มีความพยายามใช้แฟล็กเฉพาะโปรเซสเซอร์ของ OpenWatcom เพื่อปรับแต่ง แต่เวอร์ชัน 386 กลับทำงานได้เร็วกว่าเสมอ FastDOOM จึงพยายามเปลี่ยนคอมไพเลอร์จาก OpenWatcom v2 ไปเป็น DJGPP(GCC) เพื่อสร้างโค้ดที่เร็วกว่า
ความประทับใจโดยรวม
- ด้วยผลงานอันยอดเยี่ยมของ Victor Nieto ทำให้ FastDOOM แสดงประสิทธิภาพน่าทึ่งผ่านการปรับแต่งกว่า 3,000 จุด ทั้งการใช้ประโยชน์จากแนวทางปรับปรุงเดิมและการนำการปรับแต่งใหม่มาใช้ จนได้รับความสนใจอย่างมาก
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
บิลด์ 36 ของแพตช์ MPV v0.1 มีส่วนช่วยเพิ่มประสิทธิภาพอย่างมาก “การปรับแต่ง Cripy” เปลี่ยนการเรนเดอร์เปอร์เซ็นต์ในแถบสถานะให้เป็น noop เมื่อไม่มีการเปลี่ยนแปลง ทำให้เพิ่มขึ้น 2fps ตอนแรกฟังดูไม่น่าเชื่อ แต่เมื่อลองใช้แพตช์กับ PCDOOMv2 ก็ยืนยันได้ว่าความเร็วเพิ่มขึ้นอย่างมาก
เพื่อทำความเข้าใจวิวัฒนาการของประสิทธิภาพ ได้ดาวน์โหลด fastDOOM, PCDOOMv2 และ DOOM.EXE ต้นฉบับรวม 52 รีลีส แล้วสร้าง RUN.BAT ที่รัน
-timedemo demo1ในทุกเวอร์ชันเธรดกับ Ken Silverman บน GitHub มีประโยชน์มาก น่าประทับใจกับการที่ผู้เขียน FastDOOM และ Ken พูดคุยกันเรื่องประสิทธิภาพของรีจิสเตอร์ 486 และ clock cycle
“IBM PS/1 486-DX2 66Mhz, "Mini-Tower", รุ่น 2168” คือคอมพิวเตอร์ที่เคยอยากได้มากในวัยรุ่นแต่ไม่มีโอกาสได้ครอบครอง
ยังไม่ได้พูดถึงโหมดวิดีโออันเป็นเอกลักษณ์ของ FastDOOM
ในอดีตน่าจะชอบ 486DX50 มากกว่า DX2-66 เพราะบัสอินเทอร์เฟซ 50MHz ดีกว่า 33MHz
ในเอกสารสะกดนามสกุลของ John Carmack ผิดเป็น “Carnmack”
ไม่เข้าใจข้อความที่ว่า “ต้องกิน Ibuprofen แล้วถึงเล่นเกมได้ แต่ก็ได้รู้จัก fastDOOM”
เพื่อให้อ่านง่ายขึ้น อาจพิจารณาเพิ่มฟอนต์ system UI ให้กับ HTML โดยบล็อกโค้ดยังคงแสดงด้วยฟอนต์ monospaced ฟอนต์ monospaced ไม่เหมาะกับข้อความร้อยแก้ว
ไม่เข้าใจความหมายของข้อความ “ต้องกิน Ibuprofen แล้วถึงเล่นเกมได้ แต่ก็ได้รู้จัก fastDOOM”