TIL: [Computer Science] RISC vs CISC

CISC vs RISC

CISC

Complex Instruction Set Computer 모든 고급언어 문장들에 대해 각각 기계 명령어가 대응되도록 하는 것

RISC

Reduced Instruction Set Computer CISC의 많은 명령어 중 주로 쓰이는 것만을 추려서 하드웨어로 구현하는 것

명령어 세트가 축소되어 핵심적인 명령어를 기반으로 최소한의 명령어 세트를 구성함으로써 파이프라이닝이라는 획기적인 기술을 도입할 수 있어 빠른 동작 속도와 하드웨어의 단순화와 효율화를 만들 수 있다. 또한 가격 경쟁력에서도 우위를 얻었다.

장단점

CISC

  1. 하드웨어의 회로가 복잡해진다.
  2. RISC에 비해 가격이 비싸지고 발열이 많다. 그러므로 전력소모도 많다.
  3. 고급언어 컴파일러의 번역과정을 간단하게 해준다.
  4. 다양한 명령어를 사용하기 때문에 컴파일러가 복잡하다.
  5. 프로그램을 만들 때 적은 명령어로 구현 가능하다.
  6. 명령어의 개수가 많고, 길이가 다양하며, 실행 사이클도 명령어마다 다르다.
CISC를 사용하는 이유
  1. 아직까지는 많은 프로세서가 CISC 모델로 구축되어 있다. 이는 바꾸는 데에 큰 비용이 든다.
  2. CISC 성능의 취약점은 RISC와 같은 파이프라인을 일부 사용하고 집적도는 더 높임으로써 부분적으로 보완이 가능하다.
  3. RISC에 비해 호환성이 좋다.

RISC

  1. 적은 명령어로 구성되어있다.
  2. 간단한 명령어로 실행속도가 빠르다.
  3. 명령어 길이가 고정적이다.
  4. 워드, 데이터 버스 크기가 동일하고 실행 사이킅도 모두 동일하다.
  5. 회로 구성이 단순하다.
  6. 프로그램을 구성할 때 상대적으로 많은 명령어가 필요하다.
  7. 파이프라이닝을 사용한다.
  8. 명령어 개수가 적어서 컴파일러가 단순하게 구현된다.

실행 속도를 따질 때, 예를 들면

X=(A+B)*(C+D)
이러한 기능을 수행하는 코드를 각 머신으로 작성한다고 했을때

(CISC)
ADD R1,A,B   R1<- M[A]+M[B]
ADD R2,C,D   R2<- M[C]+M[D]
MUL X,R1,R2  M[X]<- R1 * R2

(RISC)
LOAD R1,A    R1<-M[A]
LOAD R2,B    R2<-M[B]
LOAD R3,C    R3<-M[C]
LOAD R4,D    R4<-M[D]
ADD R1,R1,R2 R1<-R1+R2
ADD R3,R3,R4 R3<-R3+R4
MUL R1,R1,R3 R1<-R1*R3
STORE X,R1   M[X]<-R1

결론은 CISC 각각의 명령어는 머신코드는 길지만 전체 프로그램 사이즈는 RISC보다 작다.
즉 코드를 수행할 때 RISC가 메모리를 더 많이 참조해야한다. 그러므로 CISC가 RISC보다 빠른 요인이 된다.

CISC는 복잡한 하드웨어를 가지게 된다. 그래서 보통 hard wired 방식보다는 microprogram 방식을 사용하게 된다. 반대로 RISC는 hard wired 방식을 사용한다.
RISC가 CISC보다 빠른 요인이 된다.

CISC는 레지스터의 양이 많을 필요가 없다. 하지만 RISC는 레지스터의 양이 많아야한다. 그러므로 CISC가 메모리의 접근이 많아지게 된다.
RISC가 CISC보다 빠른 요인이 된다.

참고 :

  • https://kldp.org/node/56072
  • https://frontalnh.github.io/2018/04/17/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0-risc-%EC%99%80-cisc-%EA%B5%AC%EC%A1%B0/