CISC와 RISC

김명재·2023년 5월 1일
0
post-thumbnail

이전에 cpu의 성능을 더욱 끌어 올리기 위해 명령어 파이프라이닝과 슈퍼스칼라 기법에 대해 배웠다. 그래서 실제로 이러한 기법들을 CPU에 적용하려면 명령어기 파이프라이닝에 최적화되어 있어야 한다.

조금 더 쉽게 말하면 파이프라이닝, 슈퍼스칼라 기법을 사용하기 위해서 명령어가 파이프라이닝 하기 쉽게 생겨야 된다는 말이다.

우선 CPU가 이해할 수 있는 명령어들의 모음을 명령어 집합 또는 명령어 집합구조(ISA)라고 한다.

그런데 CPU를 제조하는 회사가 모두 같은 ISA를 사용하지 않는다.

예를 들어보면 인텔의 CPU는 x86-64 ISA를 이해하고 아아폰속 CPU는 ARM ISA를 이해한다. 이렇게 회사마다 다루는 ISA가 각기 다르다.

어쨋든 ISA가 다르다는건 CPU가 이해할 수 있는 명령어가 다르다는 것이고, 명령어가 달라지면 같은 소스 코드로 만들어진 같은 프로그램이라 할지라도 어셈블리어도 달라진다는 것이다.

또한 ISA가 다르면 그에 따른 나비 효과로 많은 것이 달라진다.

예를 들어 제어장치가가 명령어를 해석하는방식, 사용되는 레지스터의 종류와 개수, 메모리 관리 방법등

여러개의 ISA중 오늘날에는 현대 ISA의 양대 산맥인 CISC와 RISC가 있다.

그리고 이중에 분명 파이프라이닝하기 쉬운 명령어가 있을 것이고 그렇지 못한 명령어도 있을 것이다.

우선 CISC먼저 살펴보자면

CISC

CISC는 Complex Instrunction Set Computer의 약자로써 복잡한 명령어 집홥을 활용하는 computer를 뜻한다.

CISC는 다양하고 강력한 기능의 명령어 집합을 활용하기 때문에 명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용한다. 또한 메모리에 접근하는 주소 지정 방식도 다양하다.

여기서 다양하고 강력한 명령어를 활용한다는 말은 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있다는 것을 의미한다.

그렇지만 이렇게 다양하고 강력한 명령어들은 워낙 복잡하고 다양한 기능을 제공하는 탓에 명령어의 크기와 실행되기가지의 시간이 일정하지 않고

실제로 IBM 연구소의 존 코크는 CISC명령어 집합 중 불과 20% 정도의 명령어가 사용된 전체 명령어의 80%가량을 차지한다는 것을 증명하기도 했다.

그렇기 때문에 명령어 파이프라인을 구현하는데 큰 걸림돌이 될 뿐만 아니라 효율적인 부분에서도 매우 좋지 않은 모습을 보여준다.

어쨋든 오늘날에 명령어 파이프라인은 높은 성능을 내기 위해 절대 놓쳐서는 안 되는 핵심 기술이기 때문에 다른 ISA가 필요했다.

그렇게 등장한 ISA가 바로 RISC이다.

RISC

우선 이전에 CISC의 한계를 한번더 정리해보자면

  • 원활한 파이프라이닝을 위해 명령어 길이와 수행시간이 짧고 규격화 되어 있어야 한다.
  • 어차피 자주 쓰는 명령어만 주로 쓰이기 때문에 복잡한 기능을 지원하는 어려운 명령어를 사용하기 보다 자주 쓰이는 기본적인 명령어를 쉽게 사용할 수 있도록 만들어야 한다.

이런 CISC의 단점을 극복하기 위해 만들어진 RISC는 CISC에 비해 명령어의 종류가 매우 적다. 그리고 CISC와는 달리 짧고 규격화된 명령어, 되도록 1클럭 내외로 실행되는 명령어를 지향한다.(RISC는 고정 길이 명령어를 사용한다.)

그리고 RISC는 메모리에 직접 접근하는 명령어를 load, store 두개로 제한할 만큼 메모리 접근을 단순화하고 최소화를 추구한다.

메모리 접근을 단순화, 최소화하는 대신 레지스터를 적극적으로 활용한다.

그렇기에 CISC보다 레지스터를 이용하는 연산이 많고, 일반적인 경우보다 범용 레지스터 개수도 더 많다.

다만 사용 가능한 명령어 개수가 CISC보다 적기 때문에 RISC는 CISC보다 많은 명령으로 프로그램을 작동시킨다.

profile
steadyness is all time way

0개의 댓글