바이너리 번역과 그 결과

이 기사는 마이크로소프트의 윈도우 11용 이진 번역기인 프리즘이 기존 인텔과 AMD의 엑스86-64 구조로 만들어진 프로그램을 암 구조의 프로세서에서 실시간으로 변환해 실행하는 방식과, 이 과정에서 발생하는 성능 변화를 분석합니다.

개인용 컴퓨터 시장에서 암 기반 프로세서가 성공하려면 과거 수십 년 동안 쌓인 방대한 기존 프로그램을 수정 없이 그대로 실행하는 소프트웨어 호환성이 가장 중요한 과제이기 때문입니다.

개인용 컴퓨터 시장은 소비자가 다양한 응용 프로그램을 높은 성능으로 사용하기를 바라므로 중앙처리장치 설계자들에게 가장 경쟁이 치열한 분야입니다. 과거 마이크로소프트의 서피스 알티가 실패했던 이유도 사용자가 당연히 실행될 것으로 기대했던 기존 프로그램을 구동하지 못했기 때문입니다. 최근 퀄컴 등이 만든 64비트 암 코어는 성능 면에서 충분해졌지만, 소프트웨어 호환성이라는 더 큰 난관이 가로막고 있습니다. 전통적인 피시 소프트웨어는 인텔과 AMD가 주도해 온 엑스86-64 기반으로 만들어졌고, 개발자들이 암 버전 프로그램을 제공하는 과정은 매우 느리게 진행됩니다. 어떤 프로그램은 더 이상 개발되지 않아 이진 파일 형태로만 배포되므로 영원히 암 버전이 나오지 않을 수도 있습니다. 따라서 암 기반 피시가 성공할지는 마이크로소프트가 기존 프로그램을 얼마나 잘 지원하느냐에 달려 있습니다. 윈도우 11의 최신 이진 번역기인 프리즘은 엑스86-64 명령어를 암용 명령어인 에어치64 명령어로 실시간 변환하여 이 문제를 해결합니다. 여기서 이진 번역이란 서로 다른 구조용으로 만들어진 프로그램 코드를 다른 구조가 이해할 수 있는 코드로 바꿔주는 기술입니다. 이진 번역은 명령어가 1대 1로 깔끔하게 대응되지 않고 지연 시간을 줄여야 하므로 원래 코드를 실행할 때와 비교해 성능 저하가 발생할 수밖에 없습니다. 필자는 에이수스 젠북 에이드 16 노트북에 탑재된 스냅드래곤 엑스 투 엘리트 익스트림 칩과 마이크로소프트 애저의 암 가상 서버를 사용하여 긱벤치 7 성능 측정 프로그램으로 성능 저하 수준을 확인했습니다. 긱벤치 7은 에어치64 버전과 엑스86-64 버전이 모두 제공되어 바이너리 번역 성능을 비교하기에 좋습니다. 긱벤치 7의 엑스86-64 버전을 이진 번역을 거쳐 실행하면 피디에프 뷰어를 제외한 모든 작업에서 실행해야 하는 명령어 수가 엄청나게 늘어납니다. 대략적인 규칙으로 볼 때 이진 번역으로 실행하면 원래 명령어보다 약 두 배 더 많은 암 명령어가 실행됩니다. 마이크로소프트는 이진 번역이 모든 암 중앙처리장치에서 똑같이 작동하지는 않는다고 설명합니다. 중앙처리장치마다 지원하는 명령어 확장 기능이 달라 프리즘이 명령어를 더 알맞게 짝지어 주도록 돕기 때문입니다. 프리즘은 퀄컴 스냅드래곤 프로세서에 맞춰 특별히 최적화되었지만, 가장 오래된 핵심인 네오버스 엔원을 사용한 앰페어 알트라에서 테스트해도 실행된 명령어 수는 매우 비슷합니다. 그러나 명령어 수가 비슷해도 성능은 핵심의 전체적인 구조와 명령어 성격에 따라 좌우됩니다. 긱벤치 7 점수를 보면 이진 번역으로 인해 모든 핵심이 몇 세대 뒤처지는 수준의 성능 손실을 겪습니다. 스냅드래곤 엑스 투 엘리트는 성능 핵심인 피 코어와 효율 핵심인 이 코어를 가지고 있으며, 이들의 기본 성능이 네오버스 엔원이나 엔투보다 훨씬 높습니다. 퀄컴의 이 코어는 이진 번역으로 인한 손실을 겪으면서도 네오버스 엔원보다 더 뛰어난 성능을 보여줍니다. 성능 핵심 역시 네오버스 엔투에 맞서 같은 결과를 나타내며, 퀄컴의 핵심들은 이진 번역 손실도 상대적으로 조금 더 적게 받습니다. 개별 작업 부하에 따라 성능 저하 정도도 다릅니다. 웹페이지 탐색 같은 네비게이션 작업은 이진 번역을 거칠 때 상대적으로 성능 저하가 적은 반면, 동영상 플레이어나 사진 편집기는 여러 데이터를 한 번에 처리하는 벡터화와 에이브이엑스 명령어를 활용하기 때문에 이진 번역을 거칠 때 점수 차이가 엄청나게 벌어집니다. 성능 카운터를 살펴보면 퀄컴의 코어들이 평소에 쓰이지 않던 코어 내부의 남는 공간을 활용해 성능 손실을 일부 줄여주지만, 늘어난 전체 명령어 수에 비하면 효율 증가 폭은 미미한 수준입니다. 한편 프리즘은 변환된 코드를 디스크에 저장하여 매번 다시 번역하는 부담을 피하고 사용자가 코드를 이해할 수 있게 돕습니다. 비디오 플레이어 작업에서 인텔 스카이레이크 환경을 분석해보면 17개의 명령어로 이루어진 반복문이 나타나는데, 프리즘은 이를 69개의 명령어 순서로 변환합니다. 에이브이엑스 명령어들은 128비트 벡터 너비만 지원하는 니온 명령어로 바뀌며, 이 과정에서 256비트 벡터 연산을 쪼개고 유연한 주소 지정 방식을 흉내 내며 명령어를 따로 수행하느라 명령어 오버헤드가 발생합니다. 또한 프리즘은 레지스터 값을 불필요하게 메모리에 내렸다 올리는 스필 작업을 반복하여 캐시 대역폭 요구량을 높이기도 합니다. 이진 번역이 가져오는 제약을 근본적으로 해결하는 가장 확실한 방법은 애초에 약점이 거의 없는 고성능 프로세서 구조를 만드는 것이며, 퀄컴의 스냅드래곤 X2 엘리트는 바로 이러한 방향을 추구합니다. 9와이드 구조에 5기가헤르츠 작동 속도를 갖추고 넉넉한 명령어 캐시와 비순차 실행 자원을 갖춘 설계는 이진 번역 과정에서 발생하는 명령어 처리 지연을 줄이는 데 결정적인 역할을 합니다.

일반 독자는 암 기반 윈도우 노트북을 사용할 때 기존 프로그램을 수정 없이 그대로 실행할 수 있는 이유가 이진 번역 기술 덕분임을 알 수 있습니다. 다만 번역 과정을 거치기 때문에 게임이나 특정 프로그램에서는 속도가 느려지거나 전력을 더 소모하는 등의 성능 손실이 발생할 수 있으며, 일상적인 웹서핑이나 문서 작업 등에서는 큰 불편 없이 쓸 수 있습니다.