CPU 명령어 집합 구조(Instruction Set Architecture)는 크게 두 가지로 나뉩니다. CISC와 RISC.

 

CISC(Complex Instruction Set Computer)

직역하자면 복잡한 명령어 집합 컴퓨터 입니다.

 

장점

컴파일러 작성이 간단합니다.

명령어들의 길이가 각자 다 다르기 때문에 CISC에서 2비트짜리 명령어도 RISC에서는 고정된 크기의 명령어가 되기 때문에 전체적인 프로그램의 용량이 줄어들게 됩니다.

 

복잡한 명령어를 쓸 때에는 CISC 가 RISC 에 비해서 코드를 하나만 입력해도 작동하기 때문에 직접 어셈블리어를 수정하는 사람의 입장에서는 생산성이 높으며, RISC는 여러 코드를 입력해야지 되는 것에 비해서 CISC는 한 코드로 수행이 가능하기 때문에 명령어의 길이가 줄어들며, 메모리에 접근하는 횟수도 줄어들게 됩니다.

 

RISC는 CPU 구조가 바뀌어 처리 비트 단위가 바뀌게 되면 기존의 명령어를 사용할 수 없지만, CISC 는 명령어의 길이가 다 달라서 CPU의 구조가 바뀐다 해도 예전 명령어들을 사용할 수 있습니다.

 

예전에 메모리 가격이 매우 비쌌던 시절에는 CISC가 메모리를 적게 쓰기 때문에 CISC를 먼저 쓰게 되었습니다.

단점

명령어가 복잡한 것이 많고 길이가 가변적이기 때문에 프로세서의 설계가 힘듭니다.

 

일정한 길이로 명령어가 나뉜 RISC와 다르게 CISC는 명령어의 길이가 가변적이며, 메모리를 소스 혹은 타겟으로 이용할 수 있어서 사이클 계산이 어렵고, 다중 사이클 명령어가 많아 파이프라이닝 구현이 매우 어렵습니다. CISC는 몇 클럭의 마이크로코드가 입력될지 알 수 없기 때문에 이를 적절하게 쪼개 파이프라인으로 전달해줘야 해, 파이프라이닝 구현이 RISC에 비해 난해해집니다. 그래도 지금은 인텔이 슈퍼스칼라를 고치면서 해결방법을 찾아서 파이프라이닝 구현 난이도가 많이 낮아졌습니다. 하지만 그래도 RISC 가 CISC에 비해서 파이프라이닝 효율도 좋고 확장도 편합니다.

 

해독이 어려워 디코더 설계가 까다로우며 디코더가 굉장히 커집니다.

 

CISC는 코드 길이를 가변적으로 입력할 수 있기에, 프로그래머의 실력이 떨어지면 코드를 필요 이상으로 길게 작성하는 일이 발생해 큰 퍼포먼스 저하를 유발할 수 있습니다.

 

기술이 발전해가면서 장점들이 의미가 없어지게 되었습니다.

 

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

RISC(Reduced Instruction Set Computer)

직역하자면 줄어든 명령어 집합 컴퓨터입니다.

CISC보다 명령어가 줄어들었고, 명령어의 길이가 다 같아졌습니다.

 

장점

컴퓨터는 수행해야할 각 명령어 형태마다 트랜지스터와 회로들이 추가되어야 하기 때문에, 많은 수의 컴퓨터 명령어 셋을 갖춘 마이크로프로세서는 만들기도 복잡하고, 실행속도도 늦습니다. RISC는 명령어 셋이 CISC보다 적습니다.

 

메모리를 직접 소스, 타겟으로 이용할 수 없어서 사이클 계산이 쉽습니다.

 

명령어셋이 적기 때문에 하드웨어가 간단해지고 아키텍쳐를 설계하는데 어렵지 않습니다.

 

전력 소모가 적으며 속도가 빠르고 가격이 저렴합니다.

 

모든 명령어의 길이가 똑같고 명령어는 한 개당 하나의 동작만을 수행하게 되므로 메모리에서 데이터를 레지스터에 가져온 이후에 다른 명령어가 메모리 접근하지 않기 때문에 파이프라인이 끊기지 않고 수행될 수 있습니다. 그래서 파이프라인 구현이 쉽습니다.

 

단점

단순화를 위해 코드 밀도가 감소하여 같은 내용을 처리하는 데 더 많은 코드 용량이 필요하게 되었습니다.

- 항상 16bit 혹은 32bit를 차지하는 고정 길이 명령어는 상황에 따라 8~32bit를 오가는 CISC의 가변 길이 명령어에 비해 코드 밀도 면에서 불리합니다.
- 메모리를 대상으로 하는 연산 명령어의 경우 CISC에서는 1개 명령어로 표현 가능하지만 반면 RISC에서는 load-execute-store로 3개의 명령어가 필요합니다.
- 마이크로코드로 한 줄로 구현된 CISC 명령어를 몇 개, 혹은 수십 개의 RISC 명령어로 변환해야 합니다.
- 평균적으로 같은 역할을 수행하는 RISC의 코드 길이는 x86에 비교하면 2배나 길다.

 

메모리를 소스 혹은 타깃으로 쓸 수 없게 되면서 그 역할을 대체해야 하는 더 많은 레지스터가 필요하게 되었습니다.

 

명령어 길이가 제약되면서 분기 명령의 점프 범위가 제약되었다. CISC에서는 분기 명령의 점프 범위를 단순히 코드 길이를 늘리는 것으로 해결할 수 있지만 RISC 명령어는 불가능해졌습니다.

 

x86이 아니였기 때문에 Windows 를 돌릴 수 없다는게 가장 큰 단점이였습니다.

728x90

+ Recent posts