스피드런 속 컴퓨터 지식 2편
1. 인트로 – 완벽해 보이는 컴퓨터의 설계
완벽을 두려워하지 말라 - 당신은 결코 그것에 도달하지 못한다.
Have no fear of perfection - you'll never reach it.
살바도르 달리
위의 말과 같이 사람은 완벽하지 않다. 그러나 아이러니하게도 사람이 만든 컴퓨터는 오류가 없도록 설계되어 있다. 애초에 ‘컴퓨터’라는 단어 자체가 ‘compute’ (컴퓨트: 연산) 로부터 파생된 단어로, 이름 따라서 정확한 연산을 해주는 컴퓨터는 우리의 삶의 깊은 곳에 자리 잡고 있다.
그러나 완벽해 보이는 컴퓨터의 계산에도 오류가 생길 수 있고, 이런 계산오류는 때로는 불가사의한 현상을 일으킨다.
2. 원인을 알 수 없는 신비한 사건
(스피드런은 게임을 최대한 빨리 클리어하는 게임 방식으로, 자세한 설명은 https://brunch.co.kr/@b437407ee87f499/3의 2번 항목에 기술되어 있다.)
먼저 아래의 영상을 확인해보자.
영상의 9초~10초 사이에, 마리오가 갑자기 다른 곳으로 이동한다! 스피드런 특성상 게임 플레이하며 이런 버그를 재현하는 것이 중요해서, 이 이례적인 버그는 스피드런 커뮤니티에서 큰 이슈가 되었다. 심지어 upwarp (업워프 : 위로 텔레포트)라는 이름까지 붙여줬고, 분석한 결과 마리오의 위치를 정하는 데이터값에서 한 비트가 바뀌는 현상이라고 밝혀졌다. 아래의 영상을 확인해보자.
https://www.youtube.com/watch?v=X5cwuYFUUAY
여기까지는 금방 밝혀졌지만, 8년 넘게 지난 현재까지도 이 현상을 유발하는 직접적인 요인은 파악되지 않았다!
3. 원인 모를 비트플립 (Bitflip) 이 갑자기 발생하는 이유
이처럼 하나의 비트값을 0에서 1, 혹은 1에서 0으로 바꾸는 것을 비트플립 (bitflip)이라고 부른다. 슈퍼 마리오 64에서 갑자기 일어난 이 비트플립 버그의 원인에 대해서 여러 가지 이론이 나왔었고, 그중에서 게임 카트리지를 약간 삐뚤게 넣으면 재현할 수도 있다는 가설까지 나왔다..!
현재로서 가장 유력한 설명은, 우주방사선(cosmic ray)으로 인해 공기 중에 돌아다니는 전자파가 우연히 게임 카트리지의 해당 비트를 건드려서 값이 바뀌었다는 가설이다.
비록 터무니없는 소리처럼 들릴 수도 있지만, 우리 일상 속에 슈퍼 마리오 64와 같은 의문의 비트플립이 문제가 된 경우가 적잖다. 1990년대 IBM이 진행한 조사 (https://bit.ly/3lNXwWz)에 의하면, 256 메가바이트의 메모리 기준으로 약 1개월에 1번 우주방사선으로 인해 에러가 발생한다. 그리고 2000년대 여러 학술지에 논문이 실릴 정도로 (https://bit.ly/3aIVhxB, https://bit.ly/2XpSTZC), 우리가 생각하는 것보다 더 많이 우리의 삶에 영향을 주고 있다.
4. 다른 사례와 비트플립 현상에 대한 대책
우주방사능으로 인한 비트플립이 원인으로 추정되는 사례를 몇 가지 더 살펴보자.
4-1. 벨기에 투표 오류 사건
한 벨기에 지역 선거가 전자투표로 진행됐는데, 이 때 한 후보의 득표 수가 정확하게 4,096개 높게 나왔다. 이는 2의 12승으로, 해당 자리의 비트값이 0에서 1이 되면 이 오류가 정확하게 설명이 된다. 슈퍼마리오64와 비슷하게 전문가들이 해당 버그를 재현하려고 했지만, 실패했다.
4-2. 토요타 자동자 전량 회수 사건
2009년부터 2011년까지 토요타 자동차의 급발진 이슈가 급격하게 발생하여, 긴급 리콜을 3회에 걸쳐서 진행했다. 이후 자동차 점검에서 새로 도입한 반도체가 유독 우주방사능에 민감하다는 결과가 나왔다.
4-3. 콴타스 72 추락 위험 사건
2008년 콴타스 72 비행기가 운항 중에 갑자기 공중에서 빠르게 추락하기 시작했다. 다행히 비상착륙을 하여 사망자는 없었고, 계산오류로 인해 자동 비행 기능이 오작동한 것으로 밝혀졌다. 이후에 높은 고도에서 우주방사선의 영향을 훨씬 더 많이 받는다는 연구 결과가 나오면서 우주방사선이 만든 계산오류라는 추론이 많아졌다.
이처럼 비트플립 현상이 무서운 사고로 이어질 수도 있지만, 대비책은 의외로 간단하다. 컴퓨터는 철저히 연산 결과를 기준으로 다음 행동을 정해서, 이 연산 결과에 대한 교차 검증이 가장 확실한 대비책이다. 한 예시로, 비행기에는 여러 대의 컴퓨터가 동시에 연산을 해서, 서로의 연산 결과를 교차점검하여 다수결의 연산 결과를 기반으로 행동하고 있다.