우리는 미지의 영역에 도전하는 사건을 호머(Homer)의 오디세이(Odyssey)에 비유하곤 한다. 알다시피 오디세이는 목마전술로 트로이 전쟁을 승리로 이끈 오디시우스(Odysseus, 라틴식 표기 Ulysses)가 고향인 이타카(Ithaca)로 돌아가는 항해 중에 겪게되는 모험을 그린 고대 그리스의 대서사시이다. 오디세이가 바다에서 겪는 미지의 모험을 그린 최초의 작품이라면 미지의 우주를 탐험하는 최초의 SF 소설로는 아서 클라크 경(Sir Arthur Charles Clarke)의 서기 2001년 스페이스 오디세이(원제 2001 : A Space Odyssey)를 꼽을 수 있겠다.
이 소설은 최근 작고한 스탠리 큐브릭(Stanley Kubrick)감독이 만든 동명의 영화로 더욱 잘 알려졌다. 사실 소설은 영화가 다 만들어진 이후에 탈고가 되었고, 영화와 소설의 내용이 반드시 일치하지는 않는다고 한다. 과거 SF 소설가들은 신기술의 발전에 많은 영향을 미쳐왔다. 잠수함, 헬리콥터, 인공위성발명들이 모두 통찰력을 갖은 몇몇 SF 소설가의 책 속에서 훨씬 이전에 예언되었다. 1967년에 발표된 이 영화는 지금도 현대 SF영화의 고전이 되었으며, 작금의 미국사회를 책임지고 있는 40대들의 청소년기 시절에 매우 깊은 정서적 영향을 끼친 것으로 알려져 있다.
이 영화는 도구의 발명과 그 해악, 문명의 발달, 그리고 궁극적인 완성에 대한 철학적인 문제를 추상화시켜 관객들에게 던지고 생각토록 유도한다. 영화는 그 스토리 전개보다도 등장한 소재들이 더욱 많이 기억되고 있는데, 최초로 인간의 사고체계를 흉내낸 우주선 통제 컴퓨터인 HAL 9000 이 그것이다. HAL은 공교롭게도 IBM의 영문 머리글자를 한자씩 앞당긴 조합이었지만, 작가는 수년이 지난 이후에 Heuristic ALgorithmic 의 약자라 해명하였다. 영화 속의 HAL 컴퓨터는 인간이 발명한 도구의 궁극적 모습으로 묘사된다. 그(?)는 언어는 물론 표정과 입술의 움직임만으로도 사람의 의중을 염탐하며, 말을 하며, 감정을 표현하고, 살아있기를 희망하는 유기체였다.
컴퓨터 과학자들이 궁극적으로 꿈꾸는 컴퓨팅의 모습이 “인간과 같은 컴퓨팅”이라 가정할 때, 영화 속의 HAL 컴퓨터는 우리가 지향하는 컴퓨터의 미래 모습을 묘사한 최초의 인공지능 컴퓨터였다. 그것은 인공지능, 언어구현, 음성 명령, 대화와 같은 고도의 로직 컴퓨팅, 데이터 처리, 때와 장소를 구애받지 않는 인간과의 상호작용으로 구체화 할 수 있다. 우리가 미래의 컴퓨터의 모습을 미리 예측하여 보고자 한다면 HAL은 이를 최초로 묘사한 모델이 될 수 있다.
미래 언젠가 HAL 컴퓨터를 구현하기 위해서는 엄청난 마이크로 프로세서의 기술발전이 필요함은 자명한 일이다. 소자 측면에서 현재의 실리콘과 금속(알루미늄, 구리)을 이용한 반도체에서부터 최근의 탄소 나노튜브(Nanotube)까지 그 미래를 예측하기는 쉽지 않다. 한편 이러한 소재를 바탕으로 한 프로세서 아키텍쳐는 또한 어떠한 발전이 계속될지 자못 궁금하다.
프로세서 아키텍쳐는 주어진 소자의 물리적 조건하에서 최대의 성능을 구현하기 위한 시스템화 기술이라 일컬을 수 있다. 이러한 프로세서 아키텍쳐가 고려대상이 되는 이유 중 하나는 바로 데이터 지연현상(Data Latency)에 기인한다. 일반적으로 중앙연산처리장치가 신문 한 장을 읽는데 1초의 시간이 걸린다고 가정할 때, 외부 기억장치에서 이를 읽는 시간은 물경 12일에서 15일의 시간이 필요하다.(그림1참조) 이러한 이유로 메모리 계층구조 즉 레지스터, 레벨1, 2, 3 캐쉬 및 각종 버퍼메모리를 어느 정도의 사이즈로, 어느 곳에 몇 개를 위치시키는 가 하는 문제는 프로세서 디자이너들이 고민하는 가장 중요한 설계변수 중의 하나이다.
한편, 자연 색상을 표현하고 인간음성을 표현하는 일은 정수연산 처리만으로는 불가능하기 때문에 0과 1사이의 무수한 수의 계산이 필요하였고, 부동 소수연산 장치가 출현하였다. 그러나 다른 어느 것보다도 작금의 마이크로 프로세서 아키텍쳐 기술의 중요한 사건을 들어본다면 첫째, CISC와 RISC 아키텍쳐의 논쟁 둘째, 32비트에서 64비트 아키텍쳐로의 진화를 재 조명해 보아야 한다. 이 두 가지 기술은 최근에 이르기까지 그 이전의 기술과 비교하여 어느 것이 우월한가 하는 논쟁 속에 휘말려 있었다.
1. CISC에서 RISC기술로
1940년대 중엽 독일의 망명 과학자인 존 폰 노이만(John Von Neumann)은 근대적 컴퓨터에 대한 이전 과학자들의 이론과 의견을 취합하여 컴퓨터에 대한 자신의 아이디어를 한 장의 종이에 메모하였다. 이 메모는 이후 여러 과학자들에게 회자되기 시작하였고, 많은 과학자들은 이를 모체로 근대적 컴퓨터 아키텍처를 발전 시켜왔다. 그러므로 그의 명제에 근거한 컴퓨터 아키텍쳐를 폰노이만형의 컴퓨터라 부르게 되었으며, 덕분에 폰노이만은 현대 컴퓨터 아키텍쳐의 아버지라 불리게 된다.
폰노이만 아키텍쳐는 단순한 두가지 명제에 기초한다. 첫째, 모든 명령어는 반드시 실행이전에 메모리에 불러 들어와야 한다. 둘째, 모든 명령어는 한번에 하나씩 처리된다. 비록 두 번째 명제는 SMP(Symetric Multi Processing)나 MPP(Massively Parallel Processing)와 같은 非폰노이만 아키텍쳐의 출현으로 더 이상 유효하지 않지만, 첫 번째 명제는 여전히 유효하다.
폰노이만이 근대적인 컴퓨터의 체계를 수립한 이래로, 컴퓨터 프로세서는 인간의 복잡한 업무처리를 위하여 갈수록 복잡해지기 시작하였다. 자연히 명령어는 복잡한 계산요구를 수행하기 위해 보다 많아지고, 실행하는 시간도 더욱 길어지는 현상이 발생하였는데, 이는 마이크로 프로세서의 회로 디자인을 더욱 어렵게 만들뿐만 아니라, 프로세서의 크기는 물론 전력소모량을 더욱 많이 필요로 하는 현상을 초래하였다.
어느날 한 과학자가 우연히 이들 프로그램의 명령어를 분석해 보았더니, 약 20%의 단순 명령어가 전체업무의 80% 정도를 처리하고, 잘 사용되지도 않은 20%의 업무를 위해 복잡한 80%의 명령어가 존재하고 있다는 사실을 알게 되었다. 그는 복잡한 80%의 명령어를 단순한 20%의 명령어의 조합으로 처리할 수 있도록 하고, 결국 복잡한 명령어를 없애 버림으로서 프로세서의 속도를 더욱 향상시키는 기술을 발명하였는데, 이러한 명령어 체계를 후학들은 RISC(Reduced Instruction Set Computing 또는 computer)라 부르게 된다.
CISC와 RISC란 무엇인가?
CISC : CISC(Complex Instruction Set Computer, 복합명령집합 컴퓨터)은 ‘단순한 명령 처리에서 복합적인 명령 수행까지 하나의 명령집합으로 실행할 수 있도록 여러 개의 명령어를 가진 구조이다. CISC는 하나의 명령으로 복잡한 작업을 수행할 수 있으므로 한편은 편리한 듯 보이지만 명령이 수행되면 전체의 처리속도가 저하되거나 여러 개의 트랜지스터를 하나의 칩으로 CPU내에 넣어야 하는 문제점’이 있다.1) CICS는 초창기 컴퓨터 아키텍처의 복잡하고 수직적이지 못한 명령 세트와 빈번한 메모리 접근에 과다하게 의존하는 것을 표현하고 있는 것으로, RISC의 반대말로 사용한다. 사실 RISC라는 용어가 나온 다음에 기존의 프로세서 아키텍쳐를 CISC라 정의하였다. 인텔의 x86 프로세서가 CISC CPU의 가장 좋은 예이다. 대부분의 메인프레임과 초창기의 미니 컴퓨터들 역시 CISC로 분류할 수 있다.
RISC : RISC(Reduced Instruction Set Computer, 축소명령집합 컴퓨터)는 CISC와는 근본적으로 다른 개념으로 개발된 방식이다. 이 기술은 1975년대 IBM 왓슨 연구소의 John Cocke 박사가 처음으로 개발하였으며 현재는 대부분의 CPU에 적용되고 있다. 현재 인텔 CPU도 CISC와 RISC의 혼합으로 되어 있는데, P6 Xeon칩이 좋은 예이다. RISC에서는 명령의 종류를 최소한으로 억제했으며 하나의 명령에는 간단한 처리기능만 있다. 따라서 하나의 작업을 수행하려면 이러한 여러 개의 명령이 순차적으로 수행되게 된다. 그러므로 이러한 명령의 실행시간을 줄이기 위해서 여러 가지 기술을 사용하고 있다. 이 기술의 가장 큰 장점 중 하나는 여러 개의 연산회로에 여러 개의 명령을 나누어 내릴 수 있어 실행속도를 쉽게 향상시킬 수 있다는 것이다. 이는 명령세트와 전체적인 CPU의 내부설계를 단순화하여 CPU 속도를 높인 것이다. 초창기의 RISC 기계는 마이크로 코드가 프로그래머에게 노출된 CPU와 거의 다를 바가 없었는데, 이는 훗날 load/store 아키텍처가 추가되고 보다 큰 레지스터 세트로의 확장, 단일크기 명령어 세트, 그리고 대형의 칩 내장 캐시 시스템을 사용하는 복잡한 프로세서로 발전하게 되었다.
RISC의 장점
전통적으로 반도체 제조기술은 비스켓 과자의 생산과정과 유사하다. 즉 대량생산에 따른 규모의 경제(Economy of Scale)에 종속 받는다고 할 수 있다. RISC칩은 CISC에 비하여 사용하는 명령어 수가 현격히 줄었기 때문에 논리회로가 상대적으로 단순하고, 칩의 절대 사이즈(Die Size)가 상대적으로 작아 질 수 있다. 그러므로 다음의 세가지정도의 이점을 기대할 수 있다.
첫째, 동일 무게의 금값에 30배에 이르는 반도체 프로세서 웨어퍼에서 보다 많은 회로 칩을 생산해 낼 수 있어, 생산수율(Yield)이 높고 높은 이익을 보장받을 수 있다.
둘째, 줄어진 칩의 공간에 보다 많은 레지스터와 보다 큰 사이즈의 Level 1 캐쉬를 위치할 수 있어 칩의 데이터 처리 속도가 현격히 상승한다. 일반적으로 RISC칩은 같은 크기의 CISC 프로세서보다 4배정도의 레지스터를 더 많이 내장할 수 있다. 또한 RISC칩에서는 프로세서 면적의 약 60% 정도를 L1 캐쉬에 할당할 수가 있는데 이는 데이터의 지연 현상을 단축하여 줌으로서 CISC에 비하여 월등한 성능향상을 기대할 수 가있다. 특히 그래픽 처리를 위한 부동소수 연산에 있어서 RISC는 CISC에 비하여 월등하다.
셋째, 명령어의 수가 적어짐과 아울러 상대적으로 적은 MHz 클락(Clock)에서 명령어가 실행되기 때문에 즉 MHz를 높이지 않고도 컴퓨터의 성능이 높이 향상된다. 이는 프로세서의 성능이 MHz이외에도 CPI, Instruction Count의 3가지 요인에 의하여 좌우되기 때문이다. CPI란 Cycle per Instruction 의 약자인데, 이는 파이프라인이나 슈퍼스칼라와 같은 회로를 내장함으로서 병렬처리 능력이 CISC에 비하여 더욱 향상되었다. (아래 공식 참조) 한편 프로그램의 컴파일시에 생성되는 명령어의 숫자, 즉 Instruction Count도 최적화 될 수 있으므로 더욱 성능이 향상되었다.
����������������������������������������������������������������������������������������������������������������������������������������������������������
�� ��
�� 성능 = MHz * CPI * Instruction Count ��
�� ��
�� seconds/program = seconds/cycle * cycle/instruction * instruction/program ��
����������������������������������������������������������������������������������������������������������������������������������������������������������
업계의 대응
모든 유닉스 업계는 이미 10년전부터 RISC칩을 기반으로 개발하고 있다. 인텔조차도 P6(Xeon칩)에 CISC와 RISC기술을 혼합하여 사용하고 있다. 인텔이 98년 발표하겠다고 착수하였던 인텔의 최초의 64비트 칩 개발프로젝트인 Merced(칩명은 Itanium 프로세서)도 RISC기술을 채용한 기술이다.2) Merced 는 최근 시제품이 나왔다고 매체에 보도된바 있으나, 양산은 2000년 후반정도에나 가능하리라 예상되고 있다. 결론적으로 인텔도 RISC에 합류하였으며, CISC와 RISC의 우월성에 대한 논의는 지난 3,4년 전에 IT업계에서 이미 “RISC의 승리”로 결론이 난 사실임을 양지해야 할 것이다.
2. 32비트와 64 비트 컴퓨팅
변하지 않는 명제 - 3위 일체
내게 5분의 시간을 주고 후학들에게 컴퓨터 아키텍쳐에서 가장 중요한 명제를 하나 가르치라고 하면, 나는 주저 없이 컴퓨팅의 3위 일체 한가지만을 이야기할 것이다. “컴퓨팅을 수행하기 위해서는 반드시 하드웨어와 오퍼레이팅 시스템 그리고 어플리케이션의 세 가지 기능이 서로 한 몸을 이루어야 한다.“라는 주장이다. 이러한 개념은 동양의 천지인 사상에 근거한다. 오래전 부터 동양에서는 하늘의 상제에게 제사를 지낼 때 3개의 다리가 달린 제기만을 사용하였다. 이는 천/지/인의 3위를 일컬는 것이다. 가장 완벽한 수자를 상징하는 3개의 다리 중 어느 하나만 길거나 작으면 균형을 이룰 수가 없다. 하나가 길어지면 다른 것도 같이 길어져야 안정을 이루는 이치이다.
대개의 유닉스 업계는 워크스테이션은 물론 서버까지 거의 모든 제품이 64비트로 옮겨갔거나 옮겨가고 있다. 이 시점에서 필자가 32비트에 비교한 64비트 컴퓨팅의 특징에 대하여 진부한 설명을 다시 하고자 하는 것은 32비트 프로세서의 낙후성을 부각시키고자 하는 것이 아니다. 이제는 아이비엠의 일부분이 된 Sequent사의 NUMA-Q 제품군이 다시금 기존 유닉스 경쟁업계의 64비트 망령에 시달리는 현 상황을 보고 기술과 효용에 대한 분명한 이해를 다시 상기시키고자 하기 때문이다.
64비트는 과연 빠른가?
비전문가에게 64비트와 32비트 컴퓨팅의 차이를 질문하게 되면 제대로 답변하는 사람을 보지 못했다. 실제로 학계에서 조차 32비트와 64비트 컴퓨팅의 정의에 대하여 통일된 의견을 정립하지 못한 것이 사실이다. 일반적으로 32비트와 64비트의 정의는 첫째, 리얼 메모리의 어드레싱을 4G 이상 할 수 있는가? 프로세서 칩내의 정수연산 레지스터(Interger Register)의 폭이 64비트인가? 라는 두 질문에 해답이 있다.
첫째로, 어드레싱을 살펴보면 32비트 컴퓨터는 2의 32승의 주소(약 4G 메모리)를 관리할 수 있는데 반하여 64비트 컴퓨터는 이론적으로 2의 64승(4G 메모리의 약 42억배)의 메모리를 관리할 수 있다. 그러나 컴퓨팅 환경에서 4G의 42억배의 메모리를 어드레싱 한다는 것은 엄청난 메모리 테이블을 관리하여야 하는 역기능을 유발시키기 때문에 64비트라 주장하는 대부분의 컴퓨터들도 40비트내지 42비트의 메모리 어드레스를 사용한다. 그렇다면 이러한 컴퓨터는 40비트, 혹은 42비트 컴퓨터라고 불러야 하지 않을까?
4G 이상의 대규모 화일관리가 필요한 어플리케이션은 무엇일까? 공학계 업무의 경우는 대규모의 메모리를 필요로 하는 지진/지질 해석, 염색체 분석/검색등, 동화상 처리등(통신 속도가 지원되어야 함)이라 할 수 있다. 상용업무의 경우는 Tera 바이트 급의 데이타 웨어하우스/마이닝, Alta Vista Web 디렉토리와 같은 업무를 들 수 있다. 대부분의 상용업무는 2G 이내의 메모리를 사용하고 있다. 그러므로 2G 이상의 화일을 관리해야 하는 프로그램 개발시에 국한하여 40비트 혹은 64비트 아키텍쳐의 이점이 있다고 해도 그리 틀린 말은 아니다.
한편 64비트 아키텍쳐는 대규모 RAM 및 Buffer 관리가 필요한 업무에 의미가 있지만 현재는 segmentation register 와 오프셋기법으로 해결이 가능하다. 컴퓨터 제조기술의 저렴화와 NT에 대한 대응 전략으로 유닉스 64비트 컴퓨터가 대중화된 것은 사실이다. 그러나 중요한 것은 32비트 이든 64비트 이든 컴퓨터 상용업무 처리 성능에 별 영향을 주지 않는다는 사실이며, 단지 처리업무의 한계용량을 높일 수 있는 데 있다.
두 번째로 정수연산 레지스터를 32비트에서 64비트로 바꾸었을 경우를 살펴보자. 먼저 사용하는 용도가 과학계산이라면, 프로세서내의 부동소수연산 레지스터를 주로 이용할 수 있으므로, 64비트 정수연산 레지스터는 가장 중요하지 않은 기능 중 하나이다. 상용업무의 경우도 코볼과 같은 프로그램에는 64비트 정수 연산 레지스터는 별다른 이점이 없다. 사용하는 적용업무가 환율계산이라면 이점이 있을 수 있다. 그러나 이 경우에도 64비트 정수연산 레지스터와 함께 64 비트 데이터 패스, 대규모 메모리가 같이 보장되어야 이점을 기대할 수 있다.
64 비트 아키텍쳐를 100% 활용하기 위한 선결과제는 3위일체의 개념에서 설명한 바와 같이 1) 완벽한 64 비트 오퍼레이팅 시스템이 지원되어야 하고, 2) 다양한 64비트 어플리케이션 개발 도구가 지원되어야 하며, 3) 가용한 상용 소프트웨어 및 DB가 64비트를 지원하여야 하며, 4) 고객의 업무가 또한 64 비트 어플리케이션으로 개발되어야 한다. 불행하게도 현재 활용되는 어플리케이션 제품들은 이들 조건을 제한적으로 만족시키고 있다. 또다른 선결과제는 구입한 컴퓨터의 오퍼레이팅 시스템이 1) Unix98 표준을 준수하여야 하며, 2) 업계 전체가 동의한 64 비트의 유닉스 표준 API 가 선행되어야 한다. 이것을 준비하지 못하면 비록 유닉스가 개방형 시스템을 지향하여 개발되었지만 서로 다른 유닉스 환경 하에서 상호작동성과 이식성 및 확장성이 지원되는 데 한계가 있기 마련이다. 사용자는 64비트에 집착하기 보다는 현재 가장 가격대 효과가 우선되는 제품을 고려하고, 향후 상향 호환성이 지원되는 64비트 운영체제를 준비하는 것이 불필요한 투자를 회피할 수 있을 것이다.
상기와 같은 기술적인 문제를 이해한 독자라면은 결론적으로 32비트와 64비트아키텍쳐가 컴퓨터의 처리속도와는 별다른 상관관계가 없다는 것을 간파했을 것이다. 다 아는바와 같이 NT는 32비트 운영체계이고 64비트 유닉스와 비교하여 NT가 속도가 떨어진다는 문제를 제기하는 사람은 없다. 오히려 안정성과 선형 확장성, 그리고 관리의 용이성이 NT와 64비트 유닉스를 차별화 하는 이슈가 되고 있는 것이다.
인간의 감정과 유사한 마음을 갖고 있던 HAL은 영화에서 장애를 일으킨 이유로 자신을 로그오프 시키려는 승무원을 하나씩 제거하기 시작한다. 인간이 만든 도구가 드디어 인간을 지배하게된 것이다. 우리가 만든 도구가 인간을 파괴하지 않게 하고 편리를 지속적으로 제공토록 하는 유일한 방법은 도구의 효능과 제한점을 분명히 인해하고 이를 바르게 이용하는데 있지 않을 까?(끝)