1 điểm bởi GN⁺ 2025-03-05 | 1 bình luận | Chia sẻ qua WhatsApp

Vì sao FastDOOM nhanh

  • Vào mùa đông năm 2024, trong lúc phục hồi một máy tính IBM PS/1 486-DX2 66Mhz, tác giả đã thử nghiệm FastDOOM. DOOM gốc chạy ở 21.5 fps, trong khi FastDOOM chạy ở 30 fps, nhanh hơn 30%.

Bối cảnh lịch sử

  • DOOM được phát triển trên NeXT Workstation, còn phần DOS I/O do id Software viết. Năm 1997, mã nguồn không được công bố vì thư viện âm thanh DMX, nên thay vào đó phiên bản Linux được phát hành. Sau đó, cộng đồng đã khôi phục phiên bản DOS thông qua PCDOOM v2.

Bức tranh tổng thể về cải thiện hiệu năng

  • Victor "Viti95" Nieto đã bỏ ra rất nhiều công sức để cải thiện hiệu năng của FastDOOM. Tác giả đã tải 52 bản phát hành FastDOOM và so sánh hiệu năng để phân tích các điểm cải tiến.

Khảo cổ học Git

  • Viti95 cho thấy năng lực quản lý xuất sắc trên git, với mỗi commit chỉ thực hiện một nhiệm vụ và mỗi bản phát hành đều được gắn tag. Lịch sử git của FastDOOM gồm 3.042 commit, nhờ đó có thể benchmark từng tính năng.

FastDOOM v0.1

  • Bản phát hành này gồm 220 commit, và tối ưu hóa chính là giảm việc render thanh trạng thái, mang lại mức cải thiện hiệu năng 2 fps.

FastDOOM v0.6

  • Ở bản phát hành gồm 33 commit này, nhiều tối ưu hóa đã được thực hiện như bỏ qua các lần render không cần thiết và loại bỏ việc giải tham chiếu gián tiếp của con trỏ người chơi.

FastDOOM v0.8

  • Bản phát hành này gồm 282 commit, tập trung vào renderer chế độ văn bản và thực hiện nhiều tối ưu hóa khác nhau.

FastDOOM v0.9.2

  • Bản phát hành này gồm 110 commit, với các tối ưu hóa cho so sánh skyflatnumR_DrawColumn.

FastDOOM v0.9.7

  • Bản phát hành này gồm 293 commit, bao gồm các thử nghiệm thay đổi x86 ASM và tối ưu hóa lựa chọn CPU.

Chế độ 13h so với chế độ Y

  • FastDOOM đã thử tối ưu hóa cho nhiều loại CPU và bus video khác nhau. Chế độ 13h sao chép dữ liệu từ RAM sang VRAM, còn chế độ Y ghi dữ liệu trực tiếp vào VRAM. Hiệu năng của từng chế độ thay đổi tùy theo tốc độ CPU và bus.

Tối ưu hóa bổ sung

  • FastDOOM đã thử tối ưu hóa bằng các cờ theo bộ xử lý của OpenWatcom, nhưng bản 386 luôn chạy nhanh hơn. FastDOOM cũng đang chuyển trình biên dịch từ OpenWatcom v2 sang DJGPP(GCC) để tạo ra mã nhanh hơn.

Ấn tượng tổng thể

  • Nhờ công việc xuất sắc của Victor Nieto, FastDOOM đã cho thấy hiệu năng ấn tượng với 3.000 tối ưu hóa. Dự án tận dụng các cải tiến sẵn có và đưa vào những tối ưu hóa mới, nhờ đó nhận được nhiều sự chú ý.

1 bình luận

 
GN⁺ 2025-03-05
Ý kiến trên Hacker News
  • Bản dựng 36 của bản vá MPV v0.1 đã đóng góp rất lớn vào việc cải thiện hiệu năng. "Tối ưu hóa Cripy" đã chuyển phần render phần trăm trên thanh trạng thái thành noop khi không có thay đổi, mang lại mức tăng 2fps. Ban đầu điều này khó tin, nhưng khi thử áp dụng bản vá trên PCDOOMv2 thì đã xác nhận được mức tăng tốc rất lớn

    • Điểm nghẽn có thể nằm ở những chỗ không ngờ tới, và cần profiling cũng như đo đạc để tìm ra chúng
    • Với các chuyên gia, cấu trúc của Doom có thể tương đối rõ ràng, nhưng nhìn chung đây không phải phần dễ được dự đoán là nút thắt cổ chai
  • Để hiểu sự tiến hóa về hiệu năng, đã tải xuống 52 bản phát hành của fastDOOM, PCDOOMv2 và DOOM.EXE gốc, rồi tạo một RUN.BAT chạy -timedemo demo1 trên mọi phiên bản

    • Nhờ dùng NETDRIVE của mTCP, mới biết rằng trước đây cũng đã có tùy chọn lưu trữ qua mạng
    • NetDrive là trình điều khiển thiết bị DOS cho phép truy cập ảnh đĩa từ xa được lưu trữ trên máy tính khác như thể đó là thiết bị cục bộ
  • Chuỗi thảo luận với Ken Silverman trên GitHub rất bổ ích. Quá trình tác giả FastDOOM và Ken bàn về thanh ghi 486 và hiệu quả chu kỳ xung nhịp rất ấn tượng

    • Thật vui khi thấy việc cải thiện hiệu năng của Doom vẫn đang tiếp tục
  • "IBM PS/1 486-DX2 66Mhz, "Mini-Tower", model 2168" là chiếc máy tính tôi từng muốn có thời niên thiếu nhưng không thể sở hữu

    • Năm 1992, tôi đang dùng chiếc PC tự lắp thứ tư của mình
    • Hội chợ máy tính KCS là một nguồn lực tuyệt vời để mua linh kiện, lắp PC, dùng một thời gian rồi bán đi và lại mua linh kiện mới
    • Đến cuối năm 1992, tôi đang dùng 486-DX3 100 cùng bộ đồng xử lý toán học ULSI 487
    • Khi đó tôi có thể tự nhận mình sở hữu chiếc PC nhanh nhất trong khuôn viên trường
    • Tôi học chuyên ngành khoa học môi trường, nhưng sự nghiệp lại gắn với máy tính
  • Các chế độ video độc đáo của FastDOOM đã không được nhắc đến

    • Chế độ văn bản IBM MDA
    • EGA & Plantronics ColorPlus
    • CGA xanh lam & hồng cổ điển
    • Bản hack CGA, 320x200x16 'ANSI from Hell'
    • Hercules
    • Hầu hết đều chậm hơn VGA
  • Trước đây tôi có lẽ sẽ thích 486DX50 hơn DX2-66. Giao tiếp bus 50MHz tốt hơn 33MHz

  • Trong tài liệu, họ của John Carmack bị viết sai thành "Carnmack"

  • Tôi không hiểu câu "Phải uống Ibuprofen để chơi game, nhưng rồi tôi biết đến fastDOOM" có nghĩa là gì

  • Có thể cân nhắc thêm phông system UI vào HTML để tăng khả năng đọc. Các khối mã vẫn sẽ hiển thị bằng phông monospace. Phông monospace không phù hợp với văn xuôi

  • Tôi không hiểu ý nghĩa của câu "Phải uống Ibuprofen để chơi game, nhưng rồi tôi biết đến fastDOOM"