CISC와 RISC를 비교하려면 ISA를 먼저 이해해야 한다. ISA란 Instruction Set Architecture의 줄임말로, 한국어로는 명령어 집합 구조를 뜻한다. ISA는 프로세서가 실행할 수 있는 명령어들의 집합과 명령어들이 어떻게 실행되는지를 정의하는 컴퓨터 아키텍처의 일부이다. ISA를 설계하고 구현하는 데 있어서 대표적인 두 가지 컴퓨터 아키텍처가 CISC(Complex Instruction Set Computing)와 RISC(Reduced Instruction Set Computing)이다. 요약적인 부분에서 CISC는 복잡한 명령어를 사용하며, 프로그램의 크기를 줄이고 개발 시간을 단축하기 위해 사용한다. RISC 같은 경우에는 간단하고 균일한 명령어를 사용하며, 프로세서의 명령어 실행 속도를 최대화하며, 전체 시스템의 성능을 향상시키기 위해 사용한다.
CISC는 Complex Instruction Set Computing의 줄임말로 직역하면 복잡한 명령어 집합 컴퓨팅이라는 뜻을 가진다. CISC는 명령어의 길이가 정해져 있지 않기에 명령어 밀도에서 유리함을 가진다. 여기서 말하는 명령어 밀도란, 구성하는 명령어들이 얼마나 효율적으로 정보를 표현하고, 메모리 공간을 얼마나 효과적으로 사용하는지를 나타내는 개념이다. 메모리 밀도가 높다는 것은 적은 양의 코드로 많은 작업을 수행할 수 있음을 의미한다. CISC 아키텍처에서는 가변적인 명령어의 길이로, 하나의 명령어가 여러 단계의 연산을 수행할 수 있도록 설계되어 있다. CISC의 명령어 하나를 예로 들면, ‘ADD R1, A, B’라는 한 명령어를 통해, A 메모리 위치에 있는 데이터와 B 메모리 위치에 있는 데이터를 더해 R1에 저장하는 연산을 끝낼 수 있다. 또 다른 예시로는, ‘CMPXCHG’ 명령어이다. 이 하나로 LOCK, LOAD, COMPARE, STORE의 원래와 같으면 여러 단계에 거칠 작업이 한 번에 끝난다. 이는 과거 메모리의 비용이 비싸고 용량이 한정적이던 시절, 한 명령어로 여러 단계를 한 번에 해결할 수 있는 CISC가 메모리 비용 절감 및 용량 절약에 효과적이어서 CISC가 많이 이용되었다. 코드 단위당 작업량이 많기에 생산성이 높은 점도 CISC를 이용하는 데 큰 몫을 했다. 명령어 길이의 가변성뿐만 아니라, CISC는 보통 이전 세대의 명령어를 새로운 프로세서에서도 지원하는 설계 방식을 채택하기에 호환성이 좋다. 호환성의 유지로 프로세서가 업그레이드되어도, 기존에 작성된 소프트웨어와 프로그램이 계속해서 작동할 수 있도록 한다.
하지만, CISC에는 장점만 있는 것은 아니다. 이름에서부터 ‘복잡한’이라는 말이 들어가는 만큼 구조가 복잡하여 프로세서 설계가 힘들다. 가변 길이 명령어는 해석하고 실행하는 프로세서인 내부 명령어 디코더의 설계를 더욱 어렵게 만들었다. 디코더는 명령어의 길이가 다름에도, 명령어의 시작과 끝을 정확히 식별하고, 복잡한 명령어를 올바르게 해석할 수 있게 해야함으로 설계 과정에서 더욱 복잡해지고 난이도가 높았다. 또한, CISC는 복잡한 명령어 세트를 갖고 있기에 하나의 명령어가 여러 단계의 연산을 포함했다. 이는 명령어를 처리하는 데 더 많은 하드웨어 리소스와 더 복잡한 로직을 필요로 하였고, 설계 과정에서의 어려움뿐만 아니라, 프로세서의 전체적인 크기와 전력 소비를 증가시켰다.
CISC는 파이프라이닝 구현이 매우 어렵다. 여기서 파이프라이닝이란, 프로세서의 성능을 향상시키기 위해 프로세서 내부에서 여러 명령어를 동시에, 다른 단계에서 처리할 수 있기 함으로써, 전체적인 처리 속도를 높이는 방법이다. CISC에서는 어떤 길이의 명령어가 입력될지 알 수 없기 때문에, 적절하게 분리하여 파이프라인으로 전달해줘야하는 과정에서 어려움을 겪는다. 또한, CISC의 복잡한 명령어 세트는 단일 명령어가 여러 연산을 수행하거나 다양한 메모리 액세스를 필요로 할 수 있기에, 파이프라인 내에서 한 명령어의 실행 결과가 이후의 명령어 실행에 영향을 미치는 경우인 데이터 의존성 문제가 발생할 가능성이 높아지며, 이는 성능 저하의 원인이 된다.
RISC는 Reduced Instruction Set Computer의 줄임말이며, 직역하면 축소된 명령 집합 컴퓨터를 뜻한다. RISC는 CISC의 각종 문제점을 해결하기 위해 제작되었는데, 당시 CISC의 문제점을 지적한 내용은 다음과 같다. 첫째, CISC의 명령어 길이가 제각각인 점이다. CISC의 장점이기도 한 가변 길이 명령어는 명령어를 인출할 때 언제가 명령어 종료 시점인지 알 수 없기에 파이프라인 처리 시, 처리 효율을 떨어뜨린다는 점이다. 둘째, 레지스터의 기능이 일정하지 못하고 특수 기능이 포함된 경우가 많아 컴파일러의 복잡성을 증대시키는 것이다. 셋째, CISC는 하드웨어 구현을 복잡하게 만든다는 것이다. 복잡한 명령어를 처리하기 위해서는 프로세서 내부에 다양한 회로와 로직이 필요하게 되며, 그렇기에 칩의 크기 확대, 그리고 전력 소비량이 증가한다. 넷째, 명령어 실행 시간의 불균일성이다. 이러한 문제점을 해결하기 위해 RISC가 등장했다.
RISC는 명령어 길이가 일정하게 정의하고 포맷도 일정하게 다듬었다. 그 결과로 프로세서가 각 명령어를 더 빠르고 일관되게 처리할 수 있게 해, 파이프라인에 효율을 높였다. 그뿐만 아니라, 일정한 포맷 덕분에 명령어 디코더도 단순화되었고 하드웨어의 복잡성이 줄었다. 이는 칩 설계의 간소화 및 제조 비용 감소에 큰 역할을 해주었다. 이러한 시스템은 배터리 수명을 연장시키고, 운영 비용을 낮추는 데에도 큰 기여를 합니다. 일정한 명령어 길이로 주는 일관된 명령어 처리 시간은 프로세서가 예측 가능한 성능을 내도록 도왔다. 이는 프로그램의 실행 시간을 예측하기 쉽게 만들고, 성능 최적화를 위한 컴파일러 전략을 개발하는데 도움을 주었다.
RISC는 명령어 길이를 일정하게 유지하는 것 외에도, 메모리 대상으로 하는 연산을 load/store 연산만 가능하게 한정했다. 그리고 나머지는 모두 레지스터를 사용하게 했다. 이 방법으로 메모리와 레지스터를 대상으로 하는 연산을 분리하여 복잡성과 작업이 시작되고 완료되기까지 걸리는 시간을 의미하는 레이턴시를 낮추고 명령어 낭비를 줄였다.
하지만 RISC와 관련하여 여러 오해가 생긴다. 첫째로는 RISC의 명령어가 작지만은 않다는 것이다. RISC에는 명령어를 줄이는 것도 포함하지만 핵심적인 목적은 Operand를 어떻게 참조하는지를 정의하는 피연산자 지정 모드를 줄이는 것이다. 초기 RISC 프로세서에는 CISC와 달리 ‘C=A*B’라는 곱셈 알고리즘을 만들려고 하면 ‘C에 A를 B번 더한다’라는 알고리즘으로 만들었으나 현재는 명령어가 천 개가 넘는 것까지 존재하며 목적에 따라 다양하다. RISC라고 하여 성능을 희생하여 다른 명령으로 쉽게 대체할 수 없는 명령을 없애는 것은 아니다. 둘째, 저전력이라는 것은 비교적 저전력이라는 것이다. 일반적인 CPU에서 디코더는 칩 면적을 별로 차지하지 않고 전력도 1%정도만 소모한다. 전력 소모는 동작 전압과 공정 선폭 등도 매우 크게 작용한다.
앞서 CISC와 RISC의 장단점을 언급했지만 차이점을 재언급하자면 다음과 같다. CISC는 마이크로 프로세서에게 명령을 내리는데 필요한 모든 명령어 셋을 갖추고 있는 프로세서이다. 따라서 가변 길이의 기계 명령어를 가지고 있다. CISC의 많은 명령어 중 주로 쓰이는 것만을 추려서 하드웨어로 구현한 프로세서이다. CISC는 복합적이고 기능이 많기 때문에 하위 호환성이 좋다. 따라서 호환성이 절대적으로 필요한 PC 환경에서는 CISC를 사용하는 것이 좋다. 하지만 트랜지스터 집적에 있어서 효율성이 떨어지기 때문에 성능 향상을 방해하는 요인이 될 수 있으며, 전력소모가 크고 속도가 느린대다 가격이 비싸다. 하지만 CISC 내부에 갖추어진 모든 명령어들 중 불과 20%에 해당하는 명령어들만이 전체 80% 이상의 일을 처리한다. 따라서 CISC와 같이 필요한 모든 명령어 셋을 갖고 있는 것은 비효율적일 수 있어 보여 이를 극복하기 위해 RISC가 등장한다. 컴퓨터 메모리 용량이 크게 나오는 것도 큰 이유가 되었다. RISC는 적은 수의 명령어들로 구성되어 있기에 CISC보다 단순하고 전력소모가 적고 가격도 저렴하다. 하지만 하드웨어가 간단한 대신 소프트웨어가 크고 복잡해졌으며, 하위 호환성이 부족하다는 단점이 있다. CISC의 경우, 다양한 명령어들을 포함하고 있고 하위 호환성도 좋기에 일반적으로 우리가 사용하는 범용 컴퓨터의 CPU로 많이 사용되는 반면, RISC는 하위 호환성을 떨어지지만, 발열과 전력 소모 등, 최적화에 초점이 되어있기에 임베디드 프로세서에서 많이 사용된다.
x86은 CISC 명령어 세트를 사용한다. CISC는 앞서 언급했듯이 명령어의 길이와 복잡성이 높아서 명령어 해석이 복잡하고 많은 리소스를 필요로 한다. 이와 달리, ARM은 RISC 명령어 세트를 사용합니다. 이는 단순하고 일관성 있으며 빠르게 명령어를 처리할 수 있으며, 하드웨어 리소스를 적게 사용한다.
x86은 개인용 컴퓨터, 서버, 워크스테이션 등에서 광범위하게 사용되며, 곱셈 혹은, 나눗셈 등의 계산과 관련된 복잡한 데이터 처리, 고성능이 필요한 게이밍, AI 연산 등의 계산 컴퓨터, 그리고 멀티태스킹에서 뛰어난 성능을 발휘한다. 또한, 오랜 기간 동안 개발된 소프트웨어와의 호환성으로 인해, 기업 환경과 고성능을 요구하는 애플리케이션에서 중요한 역할을 한다. x86 아키텍처는 그래픽 처리, 복잡한 계산, 데이터베이스 관리 시스템, 그리고 대규모 서버 운영 등에 효과적이다.
CISC의 복잡성은 명령어 처리 속도에 영향을 미칠 수 있으며, 하드웨어 구현의 복잡도를 증가시킨다. 또한, 고성능을 달성하기 위한 복잡한 명령어 세트는 프로세서의 전력 소모를 증가시키고, 이는 모바일 기기와 배터리로 작동하는 장치에서의 사용에 제약을 가할 수 있다. 가변 길이 명령어와 다양한 피연산자 지정 모드는 디코더의 설계를 복잡하게 만들며, 이는 칩 설계의 난이도를 높이고 제조 비용을 증가시킬 수 있다.
반면, ARM 아키텍처는 모바일 기기, 임베디드 시스템, 스마트 홈 기기, IoT(Internet of Things) 디바이스 등에서 높은 에너지 효율성과 저전력 소모의 이점을 가지며 널리 사용된다. ARM의 저전력 설계는 배터리 수명을 최적화하며, 소형화와 휴대성이 중요한 소비자 전자 제품에서 선호된다. 최근에는 서버 및 클라우드 컴퓨팅 분야에서도 에너지 효율성을 중시하는 추세에 따라 ARM 기반의 서버 제품이 등장하고 있으며, 이는 데이터 센터의 전력 소비와 운영 비용을 줄이는 데 기여하고 있다. ARM과 같은 RISC 아키텍처는 단순한 명령어 세트와 높은 에너지 효율성에도 불구하고, CISC 아키텍처에 비해 복잡한 연산을 처리하기 위한 명령어가 부족할 수 있다. 이는 일부 고성능 컴퓨팅 환경에서의 성능 제약으로 이어질 수 있으며, 소프트웨어 개발자가 고급 기능을 구현하기 위해 추가적인 작업을 해야 할 수 있다. 또한, ARM 아키텍처가 x86에 비해 상대적으로 최근에 서버와 데스크탑 시장에 진입한 만큼, x86 기반의 애플리케이션과 운영 체제와의 호환성 문제가 발생할 수 있다. 이는 전환 비용과 기술적 도전을 수반하며, 기존의 소프트웨어 에코시스템과 통합하기 위한 추가적인 노력을 필요로 한다.
그럼에도 불구하고, 최신 ARM 프로세서는 성능 면에서 상당한 발전을 보여주고 있으며, 저전력에서도 높은 성능을 제공하는 새로운 기술들이 계속해서 개발되고 있다. 이러한 발전은 ARM을 더 넓은 범위의 애플리케이션에 적합하게 만들고 있으며, 특히 에너지 효율성이 중요한 서버 및 데이터 센터 환경에서 주목받게 하고 있다. 한편, x86 프로세서 제조사들 역시 전력 효율과 칩의 성능을 개선하기 위한 연구개발에 지속적으로 투자하고 있다. 이를 통해 고성능 컴퓨팅 환경에서의 전력 소모 문제를 점진적으로 해결해 나가며, 동시에 CISC의 복잡성을 관리하고 최적화하는 새로운 방법을 모색하고 있다.
x86과 ARM 간의 비교는 단순한 성능이나 전력 소모의 문제를 넘어, 서로 다른 기술적 접근과 시장의 요구를 반영한다. x86은 고성능 컴퓨팅, 복잡한 애플리케이션, 그리고 광범위한 소프트웨어 호환성이 필요한 분야에서 강점을 지니고 있다. 반면, ARM은 높은 에너지 효율성, 저전력 소모, 그리고 점점 증가하는 성능을 바탕으로 모바일 기기, 임베디드 시스템, 그리고 서버 시장까지 영역을 확장하고 있다.
반년 전, Apple과 ARM이 2040년까지 장기 계약했다며 주가가 급등했다는 기사를 본 적이 있다. 그 당시에만 해도 ARM이 뭔지 몰랐기에 그런 일이 있었구나 하고 그냥 넘어갔었던 기억이 있다. 하지만 CISC와 RISC, 그리고 이를 활용한 x86과 ARM의 비교를 하며 공부를 해보니 모바일 기기에 ARM이 사용되며 왜 사용되는지도 이유를 알 수 있게 되었고 Apple이 단순히 모바일 기기에 필요하기에 투자하는 것이 아닌 ARM의 발전성을 보고 미래에 대한 투자를 하는 것이라는 생각이 들었다. 이렇게 생각하며 공부하니 내내 재밌게 했었던 것 같다. 이번 공부를 통해 느낀 것은 컴퓨터 아키텍처의 선택이 단순한 기술적으로 어느 것이 좋고 나쁜지, 그리고 최근 기술인지 과거 기술인지 문제가 아닌, 에너지 효율성, 복잡성 그 외에도 사용 환경과 애플리케이션의 요구 사항을 모두 고려해서 가장 장점을 잘 활용할 수 있는 적합한 아키텍처를 선택할 줄 아는 것이 중요하다는 것이다. 또한, 이러한 선택을 위해선 기본적으로 연관된 많은 기술에 대한 이해와 꾸준한 학습이 필요하다는 생각도 들었고 꾸준히 해나가야겠다는 생각도 들었다.