16 MHz에서 도시 건설 게임을 돌린 방법
How to run a city builder on 16 MHz

1989년 SimCity는 16 MHz 386SX CPU에서 전체 도시 시뮬레이션을 구현했다. 오픈소스로 공개된 Micropolis 코드를 보면, Simulate() 함수가 매 프레임 모든 시스템을 업데이트하지 않고 mod16 카운터로 16프레임에 걸쳐 작업을 분산한다. 이 기법은 Assetto Corsa의 큐브맵 갱신이나 Unreal Lumen에도 적용된 프레임 분산 최적화의 원형이다.
SimCity는 대부분의 시뮬레이션을 건너뛴다.
HN 토론
19- prosaic-hacker
이건 좋은 깨달음이지만 아주 오래된 기법입니다. 제가 대학 졸업 후 처음 가진 프로그래밍 직장은 CAE Electronics라는 비행 시뮬레이터 회사였습니다. 그 당시 시뮬레이션은 시대의 다양한 미니컴퓨터에서 돌아갔는데, 주로 DEC Vax 780과 그 후속 기종, 또는 제가 있던 시절에는 Gould SEL이었습니다.
제 기억이 맞다면 시뮬레이션은 마이크로컨트롤러에서 50ms 또는 33ms마다 슈퍼 루프처럼 돌아갔습니다. 각 루프에서 디스패처는 핵심 시뮬레이션 함수 중 일부를 선택해 실행했는데, 어떤 것은 매 루프마다, 어떤 것은 2번째, 4번째 또는 그 이상의 루프마다 실행했습니다. 이 시스템을 밴딩(banding)이라고 불렀습니다. 디스패치 테이블은 해당 시뮬레이터의 요구에 맞게 최적화하기 위해 다시 작성되었습니다.
주 CPU 외에도 다양한 최적화가 있었는데, 주변 장치들도 계산을 수행했기 때문입니다. 또한 시스템이 빨라지면서 일반 OS가 실시간 요구 사항이 없는 낮은 우선순위 기능을 실행할 여유 시간이 생겼습니다.
이 기법은 제 시절에도 새롭지 않았고, 약 10년 전 이전 세대의 Xerox 시스템에서도 사용되었습니다.
- phire
> 예를 들어 오리지널 SimCity는 시스템 요구 사항에 Intel 386SX를 CPU로 명시하고 있습니다.
그게 어디서 나온 건지 모르겠네요. 오리지널 출시 박스 아트[1]에는 512KB 램이 있는 모든 PC에서 작동한다고 나와 있습니다. 즉, 4.77MHz로 동작하는 8088이죠.
하지만 그것도 이 게임의 가장 낮은 사양 포트와는 거리가 멉니다. Commodore 64 버전은 꽤 많은 기능(경기장, 경찰서/소방서, 철도 등)이 빠졌을 수 있지만, 주요 도시 시뮬레이션 루프는 단 64KB 램과 1MHz 6502에서 구현되었습니다.
그리고 BBC Micro/Acorn Election 포트는 훨씬 더 인상적이었습니다. 기본적으로 풀 Amiga/PC/Mac 버전의 모든 기능을 갖추고 있었고, 음악/사운드/애니메이션만 빠져 있었습니다. 2MHz 6502(또는 Election에서는 1MHz)와 단 32KB 램으로 말이죠.
[1] https://images.launchbox-app.com/79861ce4-75ea-46dd-b46e-521...
- pelcg
우리는 이 모든 것을 16MHz 머신에서 돌리고 있는데, 오늘날 32GB 램을 가진 컴퓨터에서는 자바와 심지어 일렉트론을 사용하는 메모리 집약적인 데스크톱 앱들이 있습니다.
오늘날 자바스크립트와 일렉트론으로 작성된 텍스트 편집기조차 사용자가 여러 문서를 열 수 있다는 점을 고려하지 않으면 1GB 이상을 차지하며, 이는 램 사용량을 증가시킬 수 있습니다.