RISC

덤프버전 :


명령어 집합
CISC
AMD64x86 · M68K · 68xx · Z80 · 8080 · MOS 65xx · VAX
RISC
AArch64 ARM · RISC-V · MIPS · DEC Alpha · POWER PowerPC · CELL-BE
LoongArch · OpenRISC · PA-RISC · SPARC · Blackfin · SuperH · AVR32 AVR
VLIW
EPIC
E2K · IA-64 · Crusoe


1. 개요
2. 상세
3. RISC에 대한 평가
4. 오해
5. 현황
6. RISC 방식을 사용한 CPU들
7. 관련 문서


1. 개요[편집]


Reduced Instruction Set Computer, RISC

IBM에서 1980년에 발표하고 MIPS를 창시한 컴퓨터과학자 존 헤네시 와 데이비드 패터슨 등이 정립한 CPU의 명령어셋 아키텍처와 마이크로 아키텍처 설계에 대해 새로 제시한 개념 내지는 그 개념에 의해 설계된 CPU를 의미한다.

기본적인 개념은 트랜지스터 기반의 메인프레임을 개선하는 과정에서 개발된 아키텍처 개념으로, 최대한 단순히 설명하자면 그동안 별 생각 없이 중구난방으로 만들어 온 CPU 명령어셋을 CPU를 고속화시키는 데 적절하게 재정립하여 같은 트랜지스터 숫자를 투입하면서도 더 높은 성능의 CPU를 만들자는 것이다.

2. 상세[편집]


1980년대 당시 CISC 명령어셋에 대해 지적되는 문제점은 다음과 같았다.

  • 명령어 길이가 제각각이다. 따라서 명령어를 인출할 때 언제가 명령어 종료 시점인지 알 수 없으며 다중 사이클이 소요되는 명령어를 그대로 파이프라인 처리를 할 경우 파이프라인 버블이 발생하여 처리효율을 떨어뜨린다.
  • 명령어 포맷이 중구난방이다. 때문에 명령어 해석기에서 특정 내용을 액세스하려고 할 경우 그 명령어에 대한 인출과 해석이 완전이 끝나야 가능하다.
  • 명령어에 레지스터 대상이 아닌 메모리를 대상으로 한 연산이 섞여 있다. 메모리를 대상으로 한 연산의 경우 메모리 액세스 사이클의 손실이 정확히 얼마일지 알 수 없기 때문에 파이프라인의 정확한 운용이 어려워진다.
  • 각 명령어들의 실행 사이클이 제각각이다. 어떤 명령어는 1사이클, 어떤 명령어는 3사이클 하는 식으로... 이러한 구조는 파이프라인의 효율성을 심각하게 저하시킨다.
  • 마이크로코드를 통해 구현된 복잡한 기능의 명령어는 처음 도입할 때는 타당성이 있었을지 모르지만 CPU 기술이 발전하면서 다른 방식으로 처리하는 게 더 빨라지는 사태가 발생했다.
  • 마이크로코드 방식 자체가 CPU의 명령어 해석기 고속화에 발목을 잡게 되었다.
  • 명령어의 구조가 누산기 구조를 유지하고 있다. 명령어가 2개의 레지스터/메모리만을 액세스 가능하므로 a+b의 연산을 c에 따로 저장하지 못하고 b의 내용에 덮어쓰면서 b의 내용을 재활용하지 못하게 된다.
  • 레지스터의 기능이 일정하지 못하고 특수기능이 포함된 경우가 많아 컴파일러의 복잡성을 증대시켰다.
  • 프로그램 코드와 데이터가 단일 캐시메모리 공간에 위치하고 있는 폰노이만 구조는 코드의 메모리 동작 특성과 데이터의 메모리 동작 특성이 크게 다르다는 사실을 반영하지 못하고 있다.
  • ROM 기반이던 마이크로코드 해석기는 수정이 불가능하고 유연성이 떨어지지만 속도가 상대적으로 빠르다는 장점이 있었는데 RAM 기술이 비약적으로 발달하면서 이런 장점도 퇴색되었다.

이러한 문제점들을 해결하기 위해 RISC가 등장하였고 아래와 같은 방법으로 문제를 해결하였다.

  • 명령어 길이를 비교적 일정하게 정리하고 포맷을 일정하게 다듬었다. 그 결과 명령어 디코더가 크게 단순화되었다. 또한 파이프라인에 버블이 낄 가능성이 낮아졌다. 남아도는 트랜지스터는 다른 목적으로 할당되면서 성능이 향상되었다.
  • 메모리를 대상으로 하는 연산은 load/store 연산만 가능하게 하고 나머지는 즉 모두 레지스터를 사용하게 했다. 즉 메모리와 레지스터를 대상으로 하는 연산을 분리하여 복잡성과 레이턴시를 낮추고 명령어 낭비를 줄였다.
  • 각 명령어들의 실행 사이클을 1사이클로 일정하게 조정하였다.
  • 누산기 구조를 폐지하였다. 명령어는 소스 레지스터와 별도의 타겟 레지스터를 지정할 수 있다. 즉 b+=a에 종속된 구조에서 탈피하여 c=a+b 동작이 가능해졌다. 이는 불필요한 레지스터간 데이터 복사를 피할 수 있다.
  • 레지스터는 기본적으로 일반목적레지스터(GPR)로 설계되어 복잡도를 낮추고 컴파일러 설계를 단순화하였다 또한 레지스터 개수를 늘려 상대적으로 느린 메모리에 대한 의존도를 낮춘다.
  • 가능한 명령어 시퀀스의 경우의 수가 줄어 어셈블러, 컴파일러 설계가 단순해졌다.
  • 하드웨어 최적화를 방해하던 마이크로코드를 폐지하였다.

다만 RISC는 다음과 같은 단점을 가지게 되었다.
  • 메모리를 소스 혹은 타겟으로 쓸 수 없게 되면서 그 역할을 대체해야 하는 더 많은 레지스터가 필요하게 되었다.
  • 명령어 길이가 제약되면서 분기 명령의 점프 범위가 제약되었다. CISC에서는 분기 명령의 점프 범위를 단순히 코드 길이를 늘리는 것으로 해결할 수 있지만 RISC 명령어는 그게 불가능하다.
  • 그리고 가장 현실적인 단점은... x86이 아니더라는 것이었다. 당시 x86으로 대세가 흘러가는 시장 상황에서 이것만큼 큰 단점도 달리 없었다. 단적으로 이 시기에서는 PowerPCMicrosoft Windows를 돌리긴 했지만 ARM으로는 Microsoft Windows를 못 돌렸다! x86이 다소 쇠퇴하고 있는 2010년대의 시점에서 보면 상전벽해가 따로 없을 지경.

3. RISC에 대한 평가[편집]


이렇게 장점만 보면 RISC가 CISC보다 진보된 아키텍처로 보이겠지만 현실적으로 PowerPC가 단종되고 POWER를 장착한 서버와 메인프레임이 금융권에서마저 퇴출되는 데에는 이유가 있는 법이다.

AMD64 vs ARM 문서 참고.

4. 오해[편집]


RISC와 관련하여 여러가지 오해가 생기고는 한다. 아래는 오해가 생길만한 내용들을 정리했다.

  • RISC는 정말로 명령어가 적은가?
절반만 맞다. RISC에는 명령어를 줄이는 것도 포함하지만 RISC에서 보다 본질적이고 핵심적인 것은 피연산자 지정 모드를 줄이는 것이다.
현존하는 RISC 프로세서에는 곱셈, 나눗셈이 없는 것부터 명령어가 천 개가 넘는 것까지 그 목적에 따라 다양하다. RISC라고 하여 성능을 희생하여 다른 명령으로 쉽게 대체할 수 없는 명령을 없애는 것은 아니다. 특히 ARM의 경우 MIPS나 RISC-V등과 비교하면 명령어가 더 많은 편이다.

  • RISC는 성능이 낮은가?
전혀 그렇지 않다. 80년대와는 달리 현대 컴퓨터 기술에서 명령어 집합은 성능에 거의 관여하지 않는다. 파이프라인, 캐시 메모리, SIMD 명령, 코어 개수, 소프트웨어 최적화 등의 요소가 훨씬 크게 작용하며 전력과 성능 중에서 우선시하는 설계 목적에 따라서도 완전히 달라진다.

  • RISC는 저전력인가?
초저전력 임베디드를 제외한다면 그렇지 않다. 일반적인 CPU에서 디코더는 칩 면적을 별로 차지하지 않고 전력도 1%정도먼 소모한다. 전력 소모에 영향을 미치는 것은 위에서 언급한 모든 요소, 설계 목적과 더불어 동작 전압과 공정 선폭 등이 매우 크게 작용한다.

  • RISC는 명령어 밀도가 낮은가?
상황에 따라 다르다.
아래는 SPECint2006 바이너리의 코드 크기이다.
RV32C, Thumb, microMIPS (MIPS16e)와 같이 명령어 단위를 16비트 단위로 간략화하여 성능을 조금 희생하되 임베디드와 같이 작은 메모리를 가진 환경에서 동작시키기 위한 명령어 세트로, CISC인 x86을 RV32C, Thumb-2, MIPS16e와 비교하면 비슷하거나 오히려 코드 밀도가 낮아 보이지만 32비트 단위인 표준 세트인 RV32, Armv7-A, MIPS32와 x86을 비교하면 가변 길이를 가진 CISC보다 밀도가 낮음을 확인할 수 있다.
파일:69AE8AD6-3413-4269-9709-BC946ED55387.jpg

5. 현황[편집]


이 기술이 개발된 뒤 RISC 기술은 마이크로프로세서의 클럭 속도 향상에 큰 도움을 주었다. 90년대 중반이 지나서는 PowerPC, POWER, UltraSparc, Alpha 등 대부분의 고성능 CPU와 ARM과 같은 저전력 CPU, 그리고 일부 MCU들까지도 RISC이거나 RISC 구조를 기반으로 하였다. CISC의 대표 주자인 인텔도 RISC 기반 마이크로프로세서 개발에 심혈을 들였는데 그 예로 IA-64[1]와 iAPX 계열 CPU(Intel i960, Intel i860) 등이 있다.

인텔은 인텔 펜티엄 프로에서부터 내부적으로는 CISC 명령어를 RISC 구조의 코드로 변환해서 실행하는 P6 아키텍처로 개편하였다. 또한 인텔보다 한발 앞서서 AMD는 K6에 동일한 설계를 구현하였다. 인텔이 IA-64를 개발뻘짓하는 동안 AMD가 x64 시장의 주도권을 가져갔다.[2] 그래도 완전한 RISC 구조와 비교하면 한계가 있어서, 펜티엄 프로만 해도 파이프라인이 무려 10단계에 이르렀다. 반면 당시 대부분의 RISC CPU는 5단계 혹은 7단계, 많아야 9단계 정도.

기술이 발전하며 CISC와 RISC에 대한 사실도 많이 변화하였다.

CISC와 RISC의 차이 중 하나는 실행 속도라고 배웠을 텐데 RISC 아키텍처 기반 프로세서와 CISC 아키텍처 기반 프로세서의 실행속도는 거의 차이가 나지 않는다. CPU 기술의 발달로 클럭 속도는 전력 소모량과 온도 조절에 달린 문제라 해도 과언이 아니다. 이론상 RISC 프로세서의 클럭속도를 더 높일 수는 있겠지만 CPU의 성능 증가 대비 전력 소모량과 발열 문제가 더 크기에 두 프로세서의 실행속도는 결과적으로 거의 차이가 나지 않는다.

또한 RISC 아키텍처 기반 프로세서의 제작 단가가 더 싸다고 아는 사람들이 많은데 이것은 명백한 오류이다. 설계 및 제작 비용이 비싼 명령어 해석기의 크기를 획기적으로 줄였지만 현대 CPU에서 명령어 해석기가 차지하는 면적은 1% 이하이다. 하지만 RISC 명령어 코드가 메모리 대역폭을 평군적으로 2배 더 잡아 먹기에 같은 성능의 CISC 기반 프로세서에 비해 RISC 기반 프로세서는 2배 더 많은 캐시가 필요하다. 요즘 CPU의 75–80%가 캐시 혹은 레지스터인 것을 감안하여 1% 이하의 회로를 줄이기 위해 80%를 더 추가하는 셈이다. SRAM을 구성하는 셀은 4개의 트랜지스터가 필요한데 32MB의 대용량 캐시를 구성하기 위해서 10억 단위가 나온다. AMD의 8코어 CPU의 트랜지스터 집적 숫자가 60억에 달하는데 이중에 6분의 1이 캐시 메모리에 사용된다는 것이다. 명령어가 많다고 무조건 단가가 비싼 것도 아니고 적다고 싼 것도 아니다. 정확히는 설계 스타일에 따라 달려 있고 RISC도 고성능 지향으로 간다면 설계 면적이 넓어진다.

흔히 CISC와 RISC를 서로 대립되는 포지션으로 취급하는 경우가 많은데 이는 RISC가 등장하게 된 이유나 최근의 CPU 설계 경향 등에 비추어 봤을 경우 적절한 취급이라고 할 수 없다. 우선 상기한 바와 같이 RISC는 CISC에서의 단점을 분석하고 극복하는 연구 과정에서 탄생한 명령어셋으로 명백하게 CISC보다 더 발전된 개념을 포함한 차세대 기술이다. 그렇기 때문에 RISC가 출현한 이후 100% CISC 기술에 기반한 신규 명령어셋은 실질적으로 도태되는 수순을 밟게 되었고 주류 컴퓨터 산업에서는 CISC 아키텍처 기반 프론트엔드에 RISC가 흡수된 형태의 하이브리드를 보여주고 있다. 일반적 PC 프로세서[3]는 모두 CISC x86 아키텍처를 기본으로 하며Acorn RiscPC 600 위에 서술했듯 내부적으로 RISC 명령어 체제를 사용하는 하이브리드이다.

하지만 CPU의 클럭 속도를 더 이상 올리는 한계가 도래한 지금, 명령어 길이가 일정하다는 특징으로 명령어 병렬처리(Out-of-Order 실행)에 엄청난 이득이 발생, Apple의 M1칩이 CISC의 맹주인 Intel과 AMD의 속도를 따라 잡았다. Apple M1칩은 왜 그렇게 빠를까?영어 원문


6. RISC 방식을 사용한 CPU들[편집]


명령어 집합
CISC
AMD64x86 · M68K · 68xx · Z80 · 8080 · MOS 65xx · VAX
RISC
AArch64 ARM · RISC-V · MIPS · DEC Alpha · POWER PowerPC · CELL-BE
LoongArch · OpenRISC · PA-RISC · SPARC · Blackfin · SuperH · AVR32 AVR
VLIW
EPIC
E2K · IA-64 · Crusoe




7. 관련 문서[편집]


파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-11-02 12:59:36에 나무위키 RISC 문서에서 가져왔습니다.

[1] IA-64가 채택한 EPIC 아키텍처는 VLIW 기반이지만 RISC를 참조하여 만들어졌다.[2] 아이타닉[3] 예를 들어 인텔, AMD