CISC

큰숲백과, 나무를 보지 말고 큰 숲을 보라.
Senouis (토론 | 기여)님의 2024년 10월 11일 (금) 00:37 판
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

CISC(Complex Instruction Set Computing)이란 1980년대까지 유행했던 CPU 프로세서의 설계 경향이다. 사실, RISC를 정의하는 과정에서 CISC란 표현이 등장했기에 처음부터 CISC라 불렀던 것은 아니지만, 컴퓨터구조 이론이 CS의 한 세부 분야로 정립되기 시작하면서 RISC에 대비되는 개념으로 지금까지 사용한다.

특징

  • 2의 n승 개의 코드값(예: 32비트 명령어는 대략 42억 개)에 원하는 동작을 하는 명령어를 자유롭게 집어넣으면 된다. 참 쉽죠? 명령어를 더 넣으려면 일부 코드값을 prefix로 정해서 뒤쪽에 추가로 offset 역할을 하는 코드값을 둘 수 있다.
  • 복잡한 명령어를 단 하나의 명령어로 커버할 수 있다 보니 프로그램 내 코드 공간을 차지하는 코드값의 밀도가 높다. 주로 저전력이 필요한 임베디드 CPU 시장에서 지금도 어필이 되는 장점이다.
  • 분기 명령어로 갈 수 있는 메모리 주소 범위에 제한이 없다. 왜냐하면 이론상 메모리 주소가 가리킬 수 있는 비트 수의 최대치가 없기 때문이다. 그래서 명령어 세트 구조(ISA)의 변형이 자유로운 편이라, ISA를 비트 수 관점에서 어느 정도 바꿔도 에뮬레이션(Emulation)으로 레거시 애플리케이션의 동작을 모사할 필요가 없게 설계하기 쉽|다.
  • 분기 예측이 어렵고 실제로 명령어를 실행하는 단계에 가야 사용할 레지스터를 알 수 있는데, 그 원인으로 명령어에 레지스터 관련 정보를 넣지 않기 때문이다. 성능 측면에서 RISC에 비해 확실히 불리한 단점이다.
    • 디코더 역할을 할 디멀티플렉서를 많이, 복잡하게 배치해야 해서 디코더가 대체로 매우 비대하며, 그로 인해 발열이 생긴다. 실행 유닛이나 캐시 메모리를 많이 넣지 못하게 되어 최대 성능 잠재력이 떨어지는 것은 덤이다.

현황

RISC가 발표된 후에는 모토로라 68000 시리즈와 같이 사실상 사장된 명령어 설계 방식이다. 유일하게 살아남은 CISC 기반이었던 x86 ISA 호환 CPU도 현재는 내부적으로 RISC 명령어를 처리하도록 명령어 변환 단계가 존재하는 하이브리드 구조로 바뀌었다.

대신 이렇게 하나만 남고 다 사장된 덕에 역설적으로 CPU 제조사 간 소프트웨어 호환성은 대단히 뛰어나다. ARM의 사례와 같이 제조사마다 지원하는 명령어 세트의 파편화가 적고, 32비트 프로세싱 애플리케이션을 64비트 데이터 프로세싱 ISA에서 그대로 처리할 수 있도록 ISA를 개조하는 것이 가능하기 때문이다.

그래서 소프트웨어 호환성이 어쩌다 보니 몇 안 남은 x86/AMD64의 장점이 되었다. 물론 이건 CISC의 장점 만으로 된 건 아니고, 21세기 초까지 인텔이 IBM 호환 PC 플랫폼의 득세에 힘입어 다른 CISC CPU들과 x86 호환 프로세서 제조사를 AMD만 남기고 압도적인 힘으로 모조리 깔끔하게 죽인 결과에 가깝다. 그에 따라 마이크로코드 디코딩을 하는 전통 CISC CPU(예: 인텔 8051, 자일로그 Z80, 레거시 인텔 8086 등)은 현재 마이크로컨트롤러로만 사용한다.