1P by GN⁺ 1달전 | ★ favorite | 댓글 1개

왜 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 버전이 공개되었음. 이후 커뮤니티는 PCDOOM v2를 통해 DOS 버전을 복원했음.

성능 향상의 큰 그림

  • Victor "Viti95" Nieto는 FastDOOM의 성능 향상을 위해 많은 노력을 기울였음. 52개의 FastDOOM 릴리스를 다운로드하고 성능을 비교하여 개선점을 분석했음.

Git 고고학

  • Viti95는 git에서 뛰어난 관리 능력을 보여주었으며, 각 커밋이 하나의 작업을 수행하고 각 릴리스가 태그되어 있었음. FastDOOM의 git 기록은 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개의 최적화를 통해 놀라운 성능을 보여주었음. 기존의 개선점을 활용하고 새로운 최적화를 도입하여 많은 주목을 받았음.
Hacker News 의견
  • MPV 패치 v0.1의 빌드 36은 성능 향상에 큰 기여를 했음. "Cripy 최적화"는 상태 바 퍼센트 렌더링을 변경되지 않았을 때 noop으로 전환하여 2fps의 향상을 가져왔음. 처음에는 믿기 어려웠지만, PCDOOMv2에서 패치를 적용해보니 엄청난 속도 향상이 확인되었음

    • 병목 현상이 예상치 못한 곳에 있을 수 있으며, 이를 발견하기 위해 프로파일링과 측정이 필요함
    • Doom의 구조가 전문가들에게는 상대적으로 명확할 수 있지만, 일반적으로는 병목 현상으로 예상하기 어려운 부분임
  • 성능 진화를 이해하기 위해 fastDOOM, PCDOOMv2, 원본 DOOM.EXE의 52개 릴리스를 다운로드하고, 모든 버전에서 -timedemo demo1을 실행하는 RUN.BAT을 생성했음

    • mTCP의 NETDRIVE를 사용하여 네트워크를 통한 저장 옵션이 과거에도 존재했음을 알게 되었음
    • NetDrive는 다른 컴퓨터에 호스팅된 원격 디스크 이미지를 로컬 장치처럼 접근할 수 있게 해주는 DOS 장치 드라이버임
  • GitHub의 Ken Silverman과의 스레드는 매우 유익함. FastDOOM 저자와 Ken이 486 레지스터와 클럭 사이클 효율성을 논의하는 과정이 인상적임

    • Doom의 성능 개선을 계속해서 이루어지고 있는 것이 기쁨
  • "IBM PS/1 486-DX2 66Mhz, "Mini-Tower", 모델 2168"은 청소년 시절에 원했지만 가질 수 없었던 컴퓨터였음

    • 1992년에는 네 번째로 직접 조립한 PC를 사용 중이었음
    • KCS 컴퓨터 쇼는 부품을 구매하고 PC를 조립하여 사용 후 판매하고 다시 부품을 구매하는 과정을 반복할 수 있는 훌륭한 자원이었음
    • 1992년 말에는 486-DX3 100과 ULSI 487 수학 보조 프로세서를 사용 중이었음
    • 당시 캠퍼스에서 가장 빠른 PC를 가졌다고 주장할 수 있었음
    • 환경 과학을 전공했지만, 경력은 컴퓨터와 관련 있음
  • FastDOOM의 독특한 비디오 모드들이 언급되지 않았음

    • IBM MDA 텍스트 모드
    • EGA & Plantronics ColorPlus
    • 클래식 블루 & 핑크 CGA
    • CGA, 320x200x16 'ANSI from Hell' 해킹
    • Hercules
    • 대부분 VGA보다 성능이 떨어짐
  • 과거에는 486DX50을 DX2-66보다 선호했을 것임. 50MHz 버스 인터페이스가 33MHz보다 더 나았음

  • 문서에서 John Carmack의 성이 "Carnmack"으로 잘못 표기되었음

  • "Ibuprofen을 복용하며 게임을 해야 했지만 fastDOOM을 알게 되었음"이라는 표현이 이해되지 않음

  • 가독성을 위해 HTML에 시스템 UI 폰트를 추가하는 것을 고려할 수 있음. 코드 블록은 여전히 고정폭 폰트로 표시됨. 고정폭 폰트는 프로즈에 적합하지 않음

  • "Ibuprofen을 복용하며 게임을 해야 했지만 fastDOOM을 알게 되었음"이라는 표현의 의미를 이해하지 못함