축소 명령어 집합 컴퓨터

[섬네일|[썬 마이크로시스템즈의 UltraSPARC 프로세서는 RISC 마이크로프로세서의 일종이다.]]

전자 공학 및 컴퓨터 과학에서 **축소 명령어 집합 컴퓨터**(reduced instruction set computer, **RISC**, "리스크"라고 발음)는 컴퓨터에게 부여되는 개별 명령어를 단순화하여 작업을 수행하도록 설계된 컴퓨터 구조이다. 복잡 명령어 집합 컴퓨터(CISC)에 주어지는 명령어와 비교할 때, RISC 컴퓨터는 개별 명령어가 더 단순한 연산을 수행하기 때문에 작업을 완료하는 데 더 많은 기계어 코드가 필요할 수 있다. 그 목적은 개별 명령어의 속도를 높임으로써 더 많은 명령어를 처리해야 하는 필요성을 상쇄하는 것이며, 특히 단순한 명령어에서 구현하기 더 쉬운 명령어 파이프라인을 통해 이를 달성한다.

RISC 컴퓨터의 핵심적인 운영 개념은 각 명령어가 오직 하나의 기능(예: 메모리에서 레지스터로 값을 복사)만을 수행한다는 것이다. RISC 컴퓨터는 대개 다수(16개 또는 32개)의 고속 범용 레지스터를 갖춘 로드-스토어 아키텍처를 사용한다. 이 구조에서 산술 연산 및 테스트를 수행하는 명령어는 오직 레지스터 상에서만 작동하며, 컴퓨터의 주 메모리 데이터에 접근하는 명령어는 메모리에서 레지스터로 데이터를 로드하거나 레지스터에서 메모리로 데이터를 저장하는 역할만 수행한다. CPU 설계 덕분에 RISC 컴퓨터는 소수의 단순한 주소 지정 방식과 예측 가능한 명령어 실행 시간을 가지며, 이는 시스템 전체의 설계를 단순화한다.

RISC 컴퓨터 구조의 개념적 발전은 1970년대 후반 IBM 801 프로젝트와 함께 시작되었으나, 즉시 실용화되지는 않았다. 캘리포니아의 설계자들은 801의 개념을 이어받아 두 가지 중대한 프로젝트인 스탠퍼드의 MIPS와 버클리의 버클리 RISC를 시작했다. 이들은 1980년대에 MIPS 및 SPARC 시스템으로 상용화되었다. IBM은 결과적으로 801 개념에 대한 후속 연구를 바탕으로 IBM POWER 아키텍처, 파워PC, Power ISA 등의 RISC 설계를 생산했다. 프로젝트가 성숙해짐에 따라 1980년대 중후반과 1990년대 초반에 ARM 아키텍처, PA-RISC, 알파와 같은 유사한 설계가 다수 등장했다. 이러한 중앙 처리 장치들은 유닉스 워크스테이션과 레이저 프린터, 라우터, 그리고 이와 유사한 제품들에 들어가는 임베디드 프로세서의 상업적 유용성을 높였다.

미니컴퓨터 시장에서 셀러리티 컴퓨팅, 피라미드 테크놀로지, 릿지 컴퓨터스 등의 회사들이 1980년대 초반에 RISC 또는 RISC와 유사한 원리에 따라 설계된 시스템을 제공하기 시작했다. 이러한 초기 설계 중 RISC 마이크로프로세서를 직접 사용한 경우는 드물었다.

RISC 프로세서 설계의 종류에는 ARC 프로세서, DEC 알파, AMD Am29000, ARM 아키텍처, 아트멜 AVR, 블랙핀, 인텔 i860, 인텔 i960, 룽아키텍처(LoongArch), 모토로라 88000, MIPS 아키텍처, PA-RISC, Power ISA, RISC-V, 슈퍼H, SPARC 등이 있다. RISC 프로세서는 후가쿠와 같은 슈퍼컴퓨터에서도 사용된다.

## 역사 및 발전
1960년대로 거슬러 올라가는 여러 시스템이 로드-스토어 접근 방식을 부분적으로 사용했다는 점에서 최초의 RISC 아키텍처로 인정받아 왔다. RISC라는 용어는 버클리 RISC 프로젝트의 데이비드 패터슨에 의해 만들어졌으나, 그 이전에도 다소 유사한 개념들이 등장한 바 있다.

1964년 시모어 크레이가 설계한 CDC 6600은 오직 두 가지 주소 지정 방식(레지스터+레지스터, 레지스터+즉시 상수)과 74개의 운영 코드를 가진 로드-스토어 아키텍처를 사용했으며, 기본 클럭 사이클은 메모리 접근 시간보다 10배 빨랐다. CDC 6600의 최적화된 로드-스토어 아키텍처 덕분에 잭 동가라는 이를 현대 RISC 시스템의 선구자로 간주할 수 있다고 말했으나, 현대적인 RISC 시스템의 발전을 위해서는 다른 여러 기술적 장벽을 극복해야 했다.

### IBM 801

마이클 J. 플린(Michael J. Flynn)은 최초의 RISC 시스템을 1975년 존 코크에 의해 시작되어 1980년에 완성된 IBM 801 설계로 본다. 801은 디지털 전화 교환기의 기초로 사용할 24비트 고속 프로세서를 구축하려는 노력에서 발전했다. 시간당 100만 건의 통화(초당 300건)를 교환한다는 목표를 달성하기 위해, 그들은 CPU가 약 1,200만 초당 명령 수(MIPS)의 성능을 내야 한다고 계산했다. 이는 당시 그들의 가장 빠른 메인프레임 기계였던 370/168이 3.5 MIPS의 성능을 냈던 것과 비교된다.

이 설계는 IBM이 고객들로부터 수집한 방대한 통계 자료에 대한 연구를 바탕으로 했다. 연구 결과, 고성능 설정의 코드는 프로세서 레지스터를 집중적으로 사용하며 자주 레지스터 부족 현상을 겪는다는 것이 입증되었다. 이는 레지스터를 추가하면 성능이 향상될 것임을 시사했다. 또한, 그들은 컴파일러가 사용 가능한 대다수의 명령어, 특히 직교 주소 지정 방식을 무시한다는 사실을 발견했다. 대신 컴파일러는 주어진 명령어 중 가장 빠른 버전을 선택한 다음 이를 사용하여 작은 루틴을 구성했다. 이는 결과 코드에 영향을 주지 않고 대다수의 명령어를 제거할 수 있음을 시사했다. 이 두 가지 결론은 서로 조화를 이루었다. 명령어를 제거하면 명령어 오프코드를 짧게 만들 수 있고, 명령어 워드에서 남는 비트를 더 큰 레지스터 세트 중 하나를 선택하는 데 사용할 수 있기 때문이었다.

전화 교환기 프로그램은 1975년에 취소되었으나, 그때 이미 팀은 동일한 설계가 거의 모든 코드를 실행할 때 상당한 성능 향상을 제공한다는 점을 입증했다. 시뮬레이션에서 그들은 메모리에서 직접 작업하는 대신 레지스터를 사용하도록 튜닝된 컴파일러가 기존 설계보다 약 3배 빠르게 코드를 실행할 것임을 보여주었다. 다소 놀랍게도, 동일한 코드가 기존 기계에서도 개선된 레지스터 사용 덕분에 약 50% 더 빠르게 실행되었다. 실제로 그들의 실험적인 PL/8 컴파일러(PL/I의 축소 버전)는 기존 메인프레임에서 훨씬 더 빠르게 실행되는 코드를 일관되게 생성해냈다.

801의 32비트 버전은 결과적으로 1981년 'Research OPD [Office Products Division] Micro Processor'의 약자인 IBM ROMP라는 단일 칩 형태로 생산되었다. 이 CPU는 "미니" 작업을 위해 설계되었으며, 이후 IBM 컴퓨터의 주변 장치 인터페이스와 채널 컨트롤러에서 사용되었다. 또한 1986년 IBM RT PC의 CPU로 사용되었으나 이는 상업적 실패로 끝났다. 801이 원래 형태 그대로 널리 사용되지는 않았으나, 이는 IBM 내부의 여러 연구 프로젝트에 영감을 주었고 결과적으로 IBM POWER 아키텍처로 이어지게 되었다.

### 버클리 RISC 및 스탠퍼드 MIPS
1970년대 후반에 이르러 801은 업계에 잘 알려지게 되었다. 이는 더 복잡한 칩을 시장에 내놓을 수 있게 해준 새로운 제조 기술의 등장과 시기적으로 일치했다. 1976년의 자일로그 Z80은 8,000개의 트랜지스터를 가졌던 반면, 1979년의 모토로라 68000(68k)은 68,000개를 가졌다. 이러한 새로운 설계들은 일반적으로 새로 확보된 복잡성을 사용하여 명령어 집합을 확장함으로써 더 직교적으로 만들고자 했다. 68k와 같은 대부분의 설계는 이를 위해 마이크로코드를 사용하여 명령어를 읽고 이를 더 단순한 내부 명령어 시퀀스로 다시 구현했다. 68k의 경우 트랜지스터의 무려 이 이 마이크로코딩을 위해 사용되었다.

1979년, 데이비드 패터슨은 DEC의 서부 해안 팀이 VAX 마이크로코드를 개선하는 것을 돕기 위해 캘리포니아 대학교 버클리에서 사바티칼을 떠나 파견되었다. 패터슨은 코딩 과정의 복잡성에 충격을 받았고 이것이 감당하기 어려운 수준이라고 결론지었다. 그는 처음에 마이크로코딩을 개선하는 방법에 관한 논문을 썼으나, 나중에 생각을 바꾸어 마이크로코드 자체가 문제라고 결정했다. DARPA VLSI 프로그램의 지원을 받아 패터슨은 버클리 RISC 연구를 시작했다. 오늘날에는 거의 알려지지 않은 이 프로그램은 칩 설계, 제조, 심지어 컴퓨터 그래픽 분야에서 엄청난 발전을 이끌어냈다. 그들의 BSD 변종에 포함된 다양한 프로그램들을 검토한 결과, 버클리 팀은 IBM이 발견했던 것처럼 대부분의 프로그램이 68k에 있는 방대한 종류의 명령어를 전혀 사용하지 않는다는 것을 발견했다.

패터슨의 초기 작업은 전통적인 "많을수록 좋다"는 접근 방식의 중요한 문제를 지적했다. 전체 성능에 결정적인 명령어들조차 마이크로코드를 거치는 과정 때문에 지연되고 있었다. 마이크로코드를 제거한다면 프로그램은 더 빠르게 실행될 것이다. 그리고 마이크로코드가 궁극적으로 복잡한 명령어를 단계별로 쪼개는 역할을 한다면, 컴파일러가 대신 그렇게 하지 못할 이유가 없었다. 이러한 연구들은 다른 변화가 없더라도 트랜지스터를  적게 사용하면서도 더 빨리 작동하는 칩을 만들 수 있음을 시사했다. 원래의 RISC-I 논문에서 그들은 다음과 같이 언급했다.

이러한 추가적인 해석 단계를 건너뛰는 것은 칩 크기를 줄이면서도 성능을 향상시키는 것으로 보인다.

또한 특정 아키텍처의 마이크로코드 구현에서는 복잡한 연산이 동일한 일을 수행하는 단순한 연산 시퀀스보다 느린 경향이 있다는 사실이 발견되었다. 이는 많은 설계가 서둘러 이루어져 모든 명령어를 최적화하거나 튜닝할 시간이 부족했다는 사실의 결과이기도 했다. 가장 자주 사용되는 명령어들만 최적화되었으며, 그러한 명령어들의 시퀀스가 그 시퀀스와 동일한 연산을 수행하는 덜 최적화된 명령어보다 더 빠를 수 있었다. 악명 높은 예 중 하나가 VAX의 `INDEX` 명령어였다.

버클리의 연구는 또한 몇 가지 추가적인 점들을 밝혀냈다. 그중 하나는 프로그램이 서브루틴 호출 및 반환을 수행하는 데 상당한 시간을 보낸다는 사실이었으며, 이러한 호출 속도를 높임으로써 전체 성능을 향상시킬 수 있는 잠재력이 있어 보였다. 이로 인해 버클리 설계는 약간의 복잡성을 대가로 서브루틴 성능을 크게 향상시킬 수 있는 레지스터 윈도라는 방법을 선택하게 되었다. 그들은 또한 대다수의 수학 명령어가 단순한 할당이라는 점을 알아차렸다. 그중 단 만이 실제로 덧셈이나 뺄셈 같은 연산을 수행했다. 그러나 그러한 연산이 발생할 때 그것들은 느린 경향이 있었다. 이는 칩의 대부분이 제어와 마이크로코드에 할당되었던 이전 설계들과 달리, 기저의 산술 데이터 유닛에 훨씬 더 많은 중점을 두게 만들었다.

그 결과 탄생한 버클리 RISC는 파이프라이닝과 공격적인 레지스터 윈도잉 사용을 통해 성능을 확보하는 데 기반을 두었다. 전통적인 CPU에서는 레지스터 수가 적고 프로그램이 언제든 어떤 레지스터든 사용할 수 있다. 레지스터 윈도를 가진 CPU에는 예를 들어 128개와 같이 매우 많은 수의 레지스터가 있으나, 프로그램은 한 번에 예를 들어 8개와 같이 적은 수만 사용할 수 있다. 각 프로시저당 8개의 레지스터로 스스로를 제한하는 프로그램은 매우 빠른 절차 호출을 수행할 수 있다. 호출은 단지 윈도를 해당 프로시저가 사용하는 8개의 레지스터 세트로 8단계 "아래로" 이동시키고, 반환 시에는 윈도를 다시 되돌리기만 하면 된다. 버클리 RISC 프로젝트는 1982년 RISC-I 프로세서를 내놓았다. 당시의 새로운 CISC 설계들이 평균 약 100,000개의 트랜지스터를 사용했던 것에 비해 단 44,420개로 구성된 RISC-I은 32개의 명령어만을 가졌음에도 VAX보다 높은 추정 성능을 기록하며 다른 어떤 단일 칩 설계보다 뛰어난 성능을 보였다. 그들은 1983년에 40,760개의 트랜지스터와 39개의 명령어를 가진 RISC-II로 이를 따랐으며, 이는 RISC-I보다 3배 이상 빠르게 작동했다.

RISC 프로젝트가 실리콘 밸리에 알려지기 시작하면서, 1981년 스탠퍼드 대학교에서도 유사한 프로젝트가 시작되었다. 이 MIPS 프로젝트는 존 L. 헤네시의 대학원 과정에서 발전하여 1983년에 작동하는 시스템을 생산했고, 1984년에는 간단한 프로그램을 실행할 수 있었다. MIPS 방식은 공격적인 클럭 사이클과 파이프라인의 사용을 강조하여 파이프라인이 가능한 한 "가득 차서" 돌아갈 수 있도록 하는 데 주력했다. MIPS 시스템은 MIPS-X로 이어졌으며, 1984년 헤네시와 그의 동료들은 해당 설계를 상용화하기 위해 MIPS 컴퓨터 시스템스를 설립했다. 이 벤처 사업은 MIPS라고도 불리는 새로운 아키텍처와 1985년의 R2000 마이크로프로세서를 탄생시켰다.

RISC 개념의 전반적인 철학은 1980년대 하반기에 널리 이해되었으며, MIPS-X의 설계자들이 1987년에 이를 다음과 같이 표현하게 만들었다.

RISC와 전통적인 CISC 방식 간의 경쟁은 1980년대 초반 이론적 분석의 주제이기도 했으며, 이는 예컨대 프로세서 성능의 철칙으로 이어졌다.

섬네일|RISC-V 프로토타입 칩 (2013)
2010년부터 새로운 개방형 표준 명령어 집합(ISA)인 버클리 RISC-V가 연구 목적 및 상용 ISA의 무료 대안으로서 캘리포니아 대학교 버클리에서 개발되고 있다. 2014년 기준으로 사용자 공간 ISA의 버전 2가 고정되었다. 이 ISA는 소형 임베디드 프로세서에 충분한 최소 코어부터 표준 및 칩 설계자 정의 확장과 코프로세서를 갖춘 슈퍼컴퓨터 및 클라우드 컴퓨팅 용도까지 확장 가능하도록 설계되었다. 이는 CHISEL 언어로 된 오픈 소스 프로세서 생성기로도 제공되는 ROCKET SoC와 함께 실리콘 설계에서 테스트되었다.

### 상업적 돌파구
1980년대 초반, RISC 개념을 둘러싸고 상당한 불확실성이 존재했다. 한 가지 우려는 메모리 사용에 관한 것이었다. 모토로라 68k와 같은 전통적인 프로세서의 단일 명령어는 대여섯 개의 더 단순한 RISC 명령어로 작성될 수 있다. 이론적으로 이는 메모리에서 명령어를 가져오는 데 더 많은 시간을 소비하게 되어 시스템 속도를 늦출 수 있었다. 그러나 1980년대 중반에 이르러 이러한 개념은 상업적으로 생존 가능한 것으로 간주될 만큼 성숙해졌다.
섬네일|right|upright=1.4|에이콘 ARM 평가 시스템 (1985)
상업적인 RISC 설계는 1980년대 중반부터 나타나기 시작했다. IBM RT PC는 1986년 1월에 출시되었고, Acorn ARM1은 1985년 4월의 초기 제조에 이어 1986년 7월 평가 시스템의 일부로 도입되었다. MIPS R2000은 1986년 5월에 도입되었으며, 그 직후 휴렛 팩커드의 PA-RISC가 자사의 일부 컴퓨터에 도입되었다. 그러는 사이 버클리의 연구 성과는 매우 잘 알려지게 되어 결국 전체 개념의 명칭이 되었다. 1987년, 썬 마이크로시스템즈는 버클리 RISC-II 시스템을 직접적인 기반으로 한 SPARC 프로세서를 탑재한 시스템을 출하하기 시작했다. 미국 정부의 컴퓨팅 및 통신 혁신 위원회는 RISC 개념의 생존 가능성이 받아들여진 공로를 SPARC 시스템의 성공으로 돌리고 있다.

업계에 있어 RISC의 이점은 인텔 80386과 같은 독점적 공급원의 제품보다 훨씬 저렴한 가격이었다. 1989년까지 많은 RISC CPU가 출시되었고, 경쟁을 통해 대량 구매 시 가격이 MIPS당 10달러까지 떨어졌다. IBM의 RISC CPU 성능은 당시 RT PC에서만 사용할 수 있었기에 다른 제품들에 비해 경쟁력이 떨어졌으나, SPARC의 성공은 IBM 내부의 관심을 다시 불러일으켰고, 1990년까지 새로운 RISC 시스템을 출시하게 했다. 1995년경 RISC 프로세서는 150억 달러 규모의 서버 산업의 토대가 되었다.

패터슨은 1980년대에 인텔의 고문으로 활동했다. CISC 80386과 그 후속작들로 마이크로프로세서 시장을 지배하고 있었음에도 불구하고, RISC가 업계의 미래라는 공감대는 인텔의 엔지니어들에게 영향을 미쳤으며, 그들은 프로세서의 성능을 RISC와 맞먹도록 향상시키기 위해 노력했다. IBM은 IBM 메인프레임에서 가능한 한 CISC를 개선하는 유사한 접근 방식을 선택하면서도, 기존의 CISC 미드레인지 시스템과 직접 경쟁하는 새로운 RISC 기반 컴퓨터를 도입했다. 썬이 SPARC로 옮겨간 것은 CISC의 개선에 의존하는 대신 가능한 한 빨리 RISC로 전환하기로 한 결정에 근거한 것이었다. 자사의 VAX가 아닌 MIPS R2000을 사용하여 DECstation을 설계한 DEC의 엔지니어들은 비용 대비 전자가 "최소 2대 1의 성능 우위"를 제공했기 때문에 그렇게 했다고 기술했다. 1980년대 후반에 이르러 새로운 RISC 설계들은 모든 CISC 설계들을 큰 차이로 쉽게 압도하고 있었다.

1992년까지 썬, DEC, HP, IBM이 주요 상업적 RISC 회사들이었다. 다른 벤더들도 자체적인 RISC 연구를 시작했다. 당시 사용 가능했던 아키텍처로는 DEC 알파, AMD Am29000, 인텔 i860 및 i960, 모토로라 88000, IBM POWER, 그리고 조금 나중에 등장한 IBM/애플/모토로라의 파워PC가 있었다. 이들 중 다수는 동시대의 다른 아키텍처들에 비해 경쟁 우위를 제공하지 못해 사라졌다. 살아남은 것들은 종종 틈새 시장이나 다른 시스템의 일부로만 사용된다. 이러한 전통적 벤더들의 설계 중에는 SPARC와 파워PC에서 파생된 Power ISA만이 유의미한 시장 점유율을 유지하고 있다.

ARM 아키텍처는 가장 널리 채택된 RISC ISA가 되었다. 처음에는 에이콘 아르키메데스와 같이 저비용 및 제한된 열 환경에서 고성능 데스크톱 컴퓨팅을 제공하기 위해 의도되었으나, TOP500 슈퍼컴퓨터 순위에 이름을 올리는 동시에, 초기부터 상대적으로 낮은 전력 소모와 냉각 구현 덕분에 레이저 프린터 래스터 이미지 처리와 같은 임베디드 애플리케이션에 곧바로 적응되었다. 에이콘은 1990년 애플 및 VLSI와 협력하여 R&D 비용을 분담하고 새로운 시장을 찾기 위해 ARM Ltd를 설립했으며, TI, GEC, 샤프, 노키아, 오라클, 디지털과 협력하여 저전력 및 임베디드 RISC 설계를 개발하고 당시로서는 틈새 시장이었던 세그먼트를 공략했다. 모바일, 자동차, 스트리밍, 스마트 기기 컴퓨팅의 부상과 함께 ARM은 가장 널리 사용되는 ISA가 되었으며, 회사는 역사상 출하된 모든 CPU의 거의 절반이 ARM이라고 추정하고 있다.

## 특성 및 설계 철학

용어의 공식화 과정에서 파생된 RISC 정의에 대한 혼란과 함께, 상대적으로 적은 명령어(또는 명령어 그룹)를 가진 프로세서 아키텍처를 기회주의적으로 RISC 아키텍처로 분류하려는 경향으로 인해 RISC를 하나의 설계 철학으로 정의하려는 시도가 있었다. 그중 한 시도는 다음과 같이 표현되었다.

### 명령어 집합 철학
"축소 명령어 집합 컴퓨터"라는 문구에 대한 흔한 오해는 명령어가 단순히 제거되어 명령어 세트의 수가 적어졌다는 생각이다.
사실 수년에 걸쳐 RISC 명령어 집합의 규모는 커졌으며, 오늘날 그들 중 다수는 많은 CISC CPU보다 더 큰 명령어 세트를 가지고 있다. 예를 들어 파워PC와 같은 일부 RISC 프로세서는 CISC인 IBM 시스템/370만큼 큰 명령어 집합을 가지고 있다. 반대로, 대다수의 명령어가 다중 메모리 접근을 포함하기 때문에 명백히 CISC CPU인 DEC PDP-8은 단 8개의 기본 명령어와 몇 개의 확장 명령어만을 가지고 있다.
해당 문구에서 "축소된"이라는 용어는 단일 명령어가 수행하는 작업량이 줄어들었다는 사실을 설명하기 위한 것이었다. 즉, 단일 명령어를 실행하기 위해 수십 번의 데이터 메모리 사이클이 필요할 수 있는 CISC CPU의 "복잡한 명령어"에 비해, 기껏해야 단일 데이터 메모리 사이클만을 사용한다는 의미이다.

때때로 로드-스토어 아키텍처라는 용어가 선호되기도 한다.

RISC/CISC 논쟁을 바라보는 또 다른 방식은 컴파일러에게 무엇이 노출되는지를 고려하는 것이다. CISC 프로세서에서 하드웨어는 와 같은 단일 복잡 명령어를 구현하기 위해 내부적으로 레지스터와 플래그 비트를 사용할 수 있으나, 그러한 세부 사항을 컴파일러로부터 숨긴다.
RISC 프로세서의 내부 연산은 "컴파일러에게 노출"되며, 이는 'Relegate Interesting Stuff to the Compiler'(흥미로운 것들을 컴파일러에게 떠넘기기)라는 역두문자어로 이어지기도 했다.

### 명령어 형식
대부분의 RISC 아키텍처는 고정 길이 명령어와 단순한 인코딩을 가지고 있으며, 이는 페치, 디코드, 이슈 로직을 상당히 단순화한다. 이는 RISC 방식의 주요 목표 중 하나이다.

이 중 일부는 현대적인 32비트 형식으로의 전환 덕분에 가능해졌다. 예를 들어, 일반적인 프로그램에서 모든 숫자 상수의 30% 이상은 0 또는 1이고, 95%는 1바이트 내에 들어가며, 99%는 16비트 값 내에 들어간다. 컴퓨터가 8비트 또는 16비트 워드에 기반했을 때는 단일 메모리 워드 내에 오프코드와 즉시값을 결합하기가 어려웠으나, 증가 및 감소와 같은 특정 명령어들은 서로 다른 오프코드를 사용함으로써 이를 암시적으로 수행했다. 반면 32비트 기계는 즉시값을 인코딩할 수 있는 충분한 공간이 있으며, 그렇게 함으로써 값을 가져오기 위한 두 번째 메모리 읽기 필요성을 피할 수 있다. 이것이 많은 RISC 프로세서가 12비트 또는 13비트 상수를 명령어 워드에 직접 인코딩할 수 있도록 허용하는 이유이다.

MIPS 및 RISC 설계와 같이 13비트 상수 영역을 가정하면, 명령어 인코딩에 19비트가 더 남는다. 이는 오프코드와 하나 또는 두 개의 레지스터를 모두 나타내기에 충분한 공간이다. 대부분 수학 및 논리 연산인 레지스터 간 연산은 사용되는 두 개 또는 세 개의 레지스터를 인코딩할 비트가 필요하다. 대부분의 프로세서는 와 같은 3-피연산자 형식을 사용하며, 이 경우 세 개의 레지스터 번호가 필요하다. 프로세서가 32개의 레지스터를 가지고 있다면, 각각은 5비트 번호가 필요하여 총 15비트가 소요된다. 이 레지스터 중 하나가 즉시값으로 대체되더라도 나머지 두 개의 레지스터와 오프코드를 인코딩할 공간은 여전히 남는다. 명령어를 실행하기 전 읽어야 하는 워드 수를 줄여주는 나 와 같이 다중 워드 시스템에서 발견되는 일반적인 명령어들은 RISC에서 단일 레지스터와 즉시값 1로 달성할 수 있으므로 불필요하다.

원래의 RISC-I 형식은 해당 개념의 전형적인 예로 남아 있다. 오프코드에 7비트를 사용하고 조건 코드에 1비트 플래그를 사용하며, 다음 5비트는 대상 레지스터에, 그 다음 5비트는 첫 번째 피연산자에 사용한다. 그러면 14비트가 남는데, 이 중 첫 번째 비트는 나머지 13비트가 즉시값을 포함하는지 아니면 그중 5비트만을 사용하여 두 번째 피연산자를 위한 레지스터를 나타내는지를 가리킨다. 더 복잡한 예는 MIPS 인코딩으로, 오프코드에 6비트만을 사용하고 그 뒤에 두 개의 5비트 레지스터가 이어진다. 남은 16비트는 두 가지 방식으로 사용될 수 있다. 하나는 16비트 즉시값으로, 다른 하나는 5비트 시프트 값(시프트 연산에서만 사용되며 그 외에는 0)과 오프코드의 확장으로서의 나머지 6비트로 사용된다. 레지스터 간 산술 연산의 경우 오프코드는 0이었고 마지막 6비트에 실제 코드가 포함되었으며, 즉시값을 사용하는 명령어들은 앞부분의 일반적인 오프코드 필드를 사용했다.

32비트 명령어의 한 가지 단점은 코드 밀도가 떨어진다는 점인데, 이는 RISC 아키텍처가 원래 설계된 목적이었던 워크스테이션 및 서버 시장보다 임베디드 컴퓨팅 분야에서 더 불리한 특성이다. 이 문제를 해결하기 위해 슈퍼H(1992), ARM Thumb(1994), MIPS16e(2004), Power 변동 길이 인코딩 ISA(2006), RISC-V, 그리고 Adapteva Epiphany와 같은 여러 아키텍처는 선택적인 짧은 기능 축소형 압축 명령어 집합을 가지고 있다. 일반적으로 이러한 명령어들은 더 적은 수의 레지스터와 즉시값을 위한 적은 비트를 노출하며, 명령어에서 레지스터 번호 하나를 제거하기 위해 종종 2-피연산자 형식을 사용한다. 16개의 레지스터를 가진 시스템에서의 2-피연산자 형식은 레지스터 번호에 8비트가 필요하며, 오프코드 또는 기타 용도로 8비트가 더 남는다. SH5 또한 원래의 16비트 인코딩에 더 긴 32비트 명령어를 추가하며 반대 방향으로 진화했음에도 불구하고 이 패턴을 따른다.

### 하드웨어 활용
RISC의 가장 특징적인 측면은 적어도 사이클당 하나의 명령어 처리를 수행하는 것이다. 단일 사이클 운영은 "컴퓨터의 명령어 스트림을 지배하는 단순한 기능들의 신속한 실행"으로 묘사되며, 이로써 어떤 단일 명령어 스트림에 대해서도 사이클당 하나의 명령어에 근접하는 평균 처리량을 제공하고자 한다.

RISC 아키텍처의 다른 특징들은 다음과 같다.

* 핵심 로직에 할당되는 트랜지스터 수가 훨씬 적어, 원래 설계자들이 레지스터 세트의 크기를 늘리고 내부 병렬성을 증가시킬 수 있게 함.
* 균일한 명령어 형식으로, 단순한 해독을 위해 동일한 비트 위치에 오프코드가 있는 단일 워드를 사용함.
* 모든 범용 레지스터가 모든 명령어에서 소스/대상으로 동일하게 사용될 수 있어 컴파일러 설계를 단순화함(부동소수점 레지스터는 종종 분리되어 유지됨).
* 명령어 시퀀스에 의해 수행되는 복잡한 주소 지정 대신 단순한 주소 지정 방식을 사용함.
* 하드웨어 내의 자료형이 적음(예를 들어 바이트 문자열이나 이진화 십진법[BCD]이 없음).

RISC 설계는 명령어 스트림과 데이터 스트림이 개념적으로 분리된 하버드 아키텍처 메모리 모델을 특징으로 할 가능성이 더 높다. 이는 코드가 보관된 메모리를 수정하더라도 (CPU가 별도의 명령어 및 데이터 캐시를 가지기 때문에) 특수한 동기화 명령어가 내려지기 전까지는 프로세서에 의해 실행되는 명령어에 아무런 영향을 미치지 않을 수 있음을 의미한다. 별도의 명령어 및 데이터 캐시를 가진 CISC 프로세서들은 대개 이전 프로세서들과의 하위 호환성을 위해 이들을 자동으로 동기화된 상태로 유지한다.

초기 RISC 설계 중 다수는 점프나 분기 직후의 명령어 공간인 분기 지연 슬롯을 갖는 특징도 공유했다. 이 공간의 명령어는 분기 여부와 상관없이 실행된다(즉, 분기의 효과가 지연된다). 이 명령어는 분기를 수행하는 데 보통 필요한 추가 시간 동안 CPU의 ALU를 바쁘게 유지한다. 오늘날 분기 지연 슬롯은 일부 RISC 설계를 구현하기 위한 특정 전략의 불행한 부작용으로 간주되며, 현대적인 RISC 설계(파워PC나 더 최신 버전의 SPARC 및 MIPS 등)는 대개 이를 폐지했다.

1975년경 RISC라는 이름이 붙은 초기 설계들에 기여한 몇 가지 측면에는 당시 메모리가 제한적이었던 컴파일러들이 수동 어셈블리 코딩을 용이하게 하기 위해 의도된 기능들을 종종 활용하지 못했다는 관찰, 그리고 복잡한 주소 지정 방식은 필요한 추가 메모리 접근 때문에 수행하는 데 많은 사이클이 걸린다는 관찰 등이 포함된다. 이러한 기능들은 많은 레지스터를 위한 공간을 남겨 느린 메모리 접근 횟수를 줄일 수 있을 만큼 구현을 작게 만들 수 있다면, 단순한 명령어들의 시퀀스로 수행하는 것이 더 낫다는 주장이 제기되었다. 이러한 단순한 설계에서 대부분의 명령어는 균일한 길이와 유사한 구조를 가지며, 산술 연산은 CPU 레지스터로 제한되고 로드 및 스토어 명령어만이 메모리에 접근한다. 이러한 속성들은 이전보다 더 나은 파이프라인 단계의 균형을 가능하게 하여, RISC 파이프라인을 상당히 더 효율적으로 만들고 더 높은 클럭 속도를 허용한다.

RISC 및 다른 설계들 모두의 또 다른 추진력은 실제 프로그램에 대한 실질적인 측정에서 나왔다. 앤드류 타넨바움은 이들 중 많은 부분을 요약하여 프로세서들이 종종 너무 큰 즉시값을 가지고 있음을 입증했다. 예를 들어, 그는 프로그램의 모든 상수 중 98%가 13비트 내에 들어가지만, 많은 CPU 설계가 이를 저장하기 위해 16비트 또는 32비트를 할당한다는 것을 보여주었다. 이는 메모리 접근 횟수를 줄이기 위해 고정 길이 기계가 명령어 워드 자체의 사용되지 않는 비트에 상수를 저장할 수 있으며, 그러면 CPU가 필요할 때 즉시 준비될 수 있음을 시사한다(전통적인 설계의 즉시 주소 지정과 매우 유사함). 이를 위해서는 32비트 명령어 워드 내에 적절한 크기의 상수를 위한 공간을 남기기 위해 작은 오프코드가 필요했다.

많은 실제 프로그램이 대부분의 시간을 단순한 연산을 실행하는 데 보내기 때문에, 일부 연구자들은 그러한 연산을 가능한 한 빠르게 만드는 데 집중하기로 결정했다. CPU의 클럭 속도는 어떤 명령어의 가장 느린 하위 연산을 실행하는 데 걸리는 시간에 의해 제한된다. 그 사이클 타임을 줄이면 종종 다른 명령어들의 실행 속도가 빨라진다. "축소된 명령어"에 대한 집중은 그 결과로 탄생한 기계를 "축소 명령어 집합 컴퓨터"(RISC)라고 부르게 만들었다. 목표는 고주파수에서 단일 클럭 처리량을 달성하기 위해 명령어를 파이프라인화하기 쉬울 정도로 단순하게 만드는 것이었다. 이는 "중요한 산술 연산과 레지스터 전송"을 파이프라인화하기 어렵다고 간주되었던 CISC 설계와 대조되었다.

나중에 RISC 프로세서의 가장 중요한 특징 중 하나는 외부 메모리에 오직 로드 또는 스토어 명령어에 의해서만 접근할 수 있다는 점임이 주목되었다. 다른 모든 명령어는 내부 레지스터로 제한되었다. 이는 명령어의 고정 길이를 허용하고, 파이프라인을 단순화하며, 메모리 접근 완료 지연(캐시 미스 등)을 처리하기 위한 로직을 단 두 개의 명령어로 격리시키는 등 프로세서 설계의 많은 측면을 단순화했다. 이로 인해 RISC 설계는 로드-스토어 아키텍처로 불리게 되었다.

## 다른 아키텍처와의 비교
일부 CPU는 매우 작은 명령어 집합을 갖도록 특별히 설계되었으나, 이러한 설계들은 고전적인 RISC 설계와는 매우 다르므로 최소 명령어 집합 컴퓨터(MISC)나 트랜스포트 트리거드 아키텍처(TTA)와 같은 다른 이름이 붙여졌다.

RISC 아키텍처는 전통적으로 X86 기반 플랫폼이 지배적인 프로세서 아키텍처로 남아 있는 데스크톱 PC 및 범용 서버 시장에서 큰 성공을 거두지 못했다. 그러나 ARM 기반 프로세서들이 고성능 시스템을 위해 개발됨에 따라 상황이 바뀔 수도 있다. 카비움, AMD, 퀄컴을 포함한 제조사들은 ARM 아키텍처에 기반한 서버 프로세서를 출시했다. ARM은 2017년 크레이와 협력하여 ARM 기반 슈퍼컴퓨터를 생산하기도 했다. 데스크톱 분야에서 마이크로소프트는 퀄컴과의 파트너십의 일환으로 2017년에 스냅드래곤 기반 장치에서 PC 버전 윈도우 10을 지원할 계획이라고 발표했다. 이러한 장치들은 이진 변환하는 x86 프로세서 에뮬레이터를 통해 32비트 x86용으로 컴파일된 윈도우 애플리케이션을 지원할 것이다. 애플은 자사의 맥 데스크톱 및 노트북 컴퓨터를 인텔 프로세서에서 애플 실리콘이라 불리는 자체 개발 ARM64 기반 시스템 온 칩으로 전환할 것이라고 발표했으며, 애플 M1 프로세서를 사용한 첫 번째 컴퓨터들이 2020년 11월에 출시되었다. 애플 실리콘을 탑재한 맥은 x86-64에서 ARM64로의 변환기인 Rosetta 2를 통해 x86-64 바이너리를 실행할 수 있다.

그러나 데스크톱 영역 이외에서 ARM RISC 아키텍처는 스마트폰, 태블릿 및 많은 형태의 임베디드 기기에서 널리 사용되고 있다. 초기 RISC 설계는 당시의 CISC 설계와 크게 달랐으나, 2000년경에 이르러 RISC 라인의 최고 성능 CPU들은 CISC 라인의 최고 성능 CPU들과 거의 구별되지 않게 되었다.

## RISC 아키텍처의 사용
RISC 아키텍처는 현재 스마트폰과 태블릿 컴퓨터부터 2020년 11월 기준 TOP500 리스트에서 가장 빠른 후가쿠, 그리고 그 뒤를 잇는 서밋, 시에라, 선웨이 타이후라이트(Sunway TaihuLight)와 같은 세계에서 가장 빠른 슈퍼컴퓨터들에 이르기까지 다양한 플랫폼에서 사용되고 있다.

### 저사양 및 모바일 시스템
21세기 초까지 대다수의 저사양 및 모바일 시스템은 RISC 아키텍처에 의존했다. 예시는 다음과 같다.

* ARM 아키텍처는 저전력 및 저비용 임베디드 시스템 시장을 지배하고 있다. 이는 대부분의 안드로이드 기반 시스템, 애플 아이폰, 아이팟 터치, 아이패드, 애플 워치, Apple TV, 팜, 마이크로소프트 윈도우 폰(구 윈도우 모바일 / 윈도우 CE), RIM 장치, 닌텐도 게임보이 어드밴스, DS, 3DS 및 닌텐도 스위치, 라즈베리 파이 등 수많은 시스템에서 사용된다.
* IBM의 파워PC는 닌텐도 게임큐브, Wii, 플레이스테이션 3, 엑스박스 360 및 Wii U 게임 콘솔에 사용되었다.
* MIPS 아키텍처(한때 많은 SGI 컴퓨터에서 사용됨)는 플레이스테이션, 플레이스테이션 2, 닌텐도 64, 플레이스테이션 포터블 게임 콘솔, 그리고 Linksys WRT54G 시리즈와 같은 가정용 게이트웨이에 사용되었다.
* 히타치 제작소의 슈퍼H는 원래 슈퍼 32X, 세가 새턴, 드림캐스트 콘솔에서 널리 사용되었으며, 현재는 르네사스에 의해 SH4로 개발 및 판매되고 있다.
* 아트멜 AVR은 엑스박스 핸드헬드 컨트롤러와 아두이노 오픈 소스 마이크로컨트롤러 플랫폼부터 BMW 자동차에 이르기까지 다양한 제품에서 사용된다.
* RISC-V는 버클리 RISC ISA의 현재 반복 버전으로, 32비트 또는 64비트 가상 주소 공간과 소형 코어 정수 명령어 집합, 코드 밀도를 위한 실험적인 "압축" ISA를 갖추고 있으며 표준 및 특수 목적 확장을 위해 설계되었다.

### 데스크톱 및 노트북 컴퓨터
* IBM의 파워PC 아키텍처는 애플이 모토로라 68000 시리즈 프로세서에서 전환을 시작한 1994년부터 인텔 x86 프로세서로 전환한 2005년까지 애플의 매킨토시 컴퓨터에서 사용되었다.
* 일부 크롬북은 2012년부터 ARM 기반 플랫폼을 사용한다.
* 애플은 인텔 프로세서로부터의 전환 이후 데스크톱 및 노트북 컴퓨터 라인업에 ARM 아키텍처 기반의 자체 설계 프로세서를 사용하고 있으며, 첫 번째 컴퓨터들은 2020년 11월에 출시되었다.
* 마이크로소프트는 자사의 서피스 라인에 퀄컴 ARM 기반 프로세서를 사용한다. HP와 레노버는 ARM 기반 스냅드래곤을 탑재한 윈도우 PC를 출시했다.

### 워크스테이션, 서버 및 슈퍼컴퓨터
* 실리콘 그래픽스의 MIPS(2006년에 MIPS 기반 시스템 제작 중단).
* 오라클(이전 썬 마이크로시스템즈) 및 후지쯔의 SPARC.
* IBM의 IBM POWER 아키텍처, 파워PC 및 Power ISA는 IBM의 많은 슈퍼컴퓨터, 미드레인지 서버 및 워크스테이션에서 과거와 현재에 걸쳐 사용되고 있다.
* 휴렛 팩커드의 PA-RISC(HP-PA로도 알려짐, 2008년 말 단종).
* 디지털 이큅먼트 코퍼레이션, 이후 컴팩, 최종적으로 휴렛 팩커드(HP)의 단일 보드 컴퓨터, 워크스테이션, 서버 및 슈퍼컴퓨터에서 사용된 알파(2007년 기준 단종).
* 다섯 번째 버클리 RISC ISA인 RISC-V는 64비트 또는 128비트 가상 주소 공간을 가지며, 부동소수점, 원자적 연산 및 벡터 처리가 확장된 정수 코어를 갖추고 네트워킹, I/O 및 데이터 처리를 위한 명령어로 확장되도록 설계되었다. 64비트 슈퍼스칼라 설계인 "Rocket"의 사양을 다운로드할 수 있다. 이는 European Processor Initiative 프로세서에 구현되어 있다.
* ARM 아키텍처는 현재 클라우드 제공업체들이 서버용으로 사용하고 있다. 한 예로 AWS 플랫폼의 다양한 서비스에 사용되는 AWS Graviton 시리즈 프로세서가 있다. ARM은 또한 후지쯔 A64FX 칩에 사용되어 2020년 세계에서 가장 빠른 슈퍼컴퓨터인 후가쿠를 만드는 데 쓰였다.

### 오픈 소스, 표준 또는 활용
RISC 아키텍처는 구현이 비교적 간단하여 FPGA 구현 및 프로토타이핑에 적합하기 때문에 오픈 소스 프로세서 및 소프트 마이크로프로세서에서 인기를 얻었다. 예시는 다음과 같다.

* OpenRISC: 2000년에 처음 도입된 개방형 명령어 집합 및 마이크로아키텍처.
* 오픈 MIPS 아키텍처: 2019년 일부 기간 사양이 등록된 MIPS 개발자들에게 무료 및 로열티 없이 공개되었다.
* 오픈스팍(OpenSPARC): 2005년 썬은 울트라 스파크(Ultra Sparc) 문서와 사양을 GPLv2 라이선스로 공개했다.
** LEON: 우주 애플리케이션을 타겟으로 하는 SPARC V8 명령어 집합의 오픈 소스 내방사선 구현체.
* Libre-SOC: 비디오 및 3D 그래픽 확장을 포함한 Power ISA 기반의 오픈 소스 시스템 온 칩.
* RISC-V: 2010년 버클리 RISC 버전 5의 사양, 툴체인 및 브랜드가 비상업적 목적으로 무료 공개되었다.
* 슈퍼H - J 코어: 2015년 특허가 만료된 히타치 슈퍼H RISC ISA의 클린룸 구현을 제공하기 위한 프로젝트가 시작되었다.
* ARM DesignStart: 2018년 ARM은 FPGA 공급업체 자일링스와 협력하여 일부 구형 CPU 코어의 FPGA 사양을 포함한 ARM IP의 일부에 대해 무료 액세스를 제공하기 시작했다.

## 수상
2022년 스티브 퍼버, 존 L. 헤네시, 데이비드 A. 패터슨, 소피 윌슨은 축소 명령어 집합 컴퓨터(RISC) 칩의 발명, 개발 및 구현에 기여한 공로로 미국 미국공학한림원으로부터 찰스 스타크 드레이퍼 상을 수상했다.

## 같이 보기
* RISC OS

## 각주

분류:마이크로프로세서
분류:명령어 집합 구조