ISA란, 컴퓨터에서 실행 될 수 있는 명령어의 집합이다.
여기서의 명령어란, 컴퓨터의 state (Register와 Memory의 값)을 변경시키는 역할을 하는 것이다. 즉, 하나의 명령어가 수행되고 나면 각각의 operation에 따라 컴퓨터의 메모리와 레지스터 중 적어도 하나가 변화한다.
ISA는 성능 개선을 위한 방법론에 따라 RISC와 CISC 두가지 종류로 구분된다.
CISC의 핵심 목표는 소프트웨어에 의존하지 않는 ISA
이다.
즉, 필요한 모든 명령어를 전부 하드웨어로 설계하여 만들어 둔다.
그렇기 때문에 다음의 단점을 가진다.
RISC의 핵심 목표는 소프트웨어로 더 간단하게 구현할 수 있는 ISA
이다.
즉, RISC의 ISA는 간단한 명령어들의 집합을 만들어 둔 뒤, 복잡한 명령어들은 간단한 명령어들을 활용하여 구현한다.
때문에 전력 소모가 적고, (명령어들이 간단하기 떄문), Instruction set이 작다.
CISC와 RISC의 차이점을 자세히 알아보자.
CISC : Instruction can take several clock cycle
-> CISC는 모든 instruction들이 ISA에 구현되어 있기 때문에, 복잡한 instruction들을 가지고 있다. 때문에 몇 cycle이 소요가 된다.
RISC : Single cycle instruction
-> RISC는 간단하고 필수적은 몇몇 instruction을 구현한 뒤, 복잡한 instruction들은 간단하게 구현 된 instruction을 조합하여 구현한다. 때문에 ISA에 구현되어 있는 모든 instruction들은 single cycle 내에서 실행이 되는 간단한 instruction이다.
CISC : Smaller
-> CISC는 필요한 모든 instruction들이 구현이 되어있기 때문에, high level language 프로그램이 instruction들로 변환되는 과정에서 프로그램을 구성하는 instruction들의 수가 많아지지 않는다.
RISC : Larger
-> RISC의 복잡한 instruction들은 간단한 여러개의 instruction들을 조합하여 사용한다. 때문에, 필요한 모든 instruction을 구현해 사용하는 CISC에 비해 프로그램을 구성하는 instruction들의 수가 많아진다.
CISC : IC
-> CISC는 각 프로그램을 구성하는 instruction의 수가 RISC에 비해 상대적으로 적으므로 IC에서 강점을 가진다.
RISC : CPI
-> RISC에서 사용되는 instruction들은 각각의 instruction이 실행되는데 필요한 clock cycle이 적어 CPI에서 강점을 가진다.
CISC : Smaller -> easy to optimize compiler
-> IC가 적기 때문에 code size는 적고, 때문에 컴파일을 최적화하기 편하다.
RISC : Larger -> difficult to optimize compiler
-> RISC는 프로그램의 IC가 크기 때문에 code size가 커진다. 때문에 컴파일을 최적화 시키기 어렵다.
CISC : Hardware-centric
-> CISC는 필요한 모든 instruction들을 하드웨어로 구현하기 때문에 하드웨어 위주의 디자인을 한다.
RISC : Software-centric
-> RISC의 복잡한 instructon들은 쉽게 구현되어 있는 instruction을 조합하여 만들기 때문에 소프트웨어 위주의 디자인을 한다.
CISC : More efficient use of RAM
-> CISC는 프로그램의 명령어 수가 적고, 때문에 코드를 가지고 오기 위해 메모리에 접근을 하는 횟수가 더 적다.
RISC : Heavy use of RAM
-> RISC는 명령어의 수가 많기 때문에 더 많은 메모리로의 접근을 필요로 한다.
CISC : High (more transistors) -> expensive
-> CISC의 ISA를 구현하기 위해선 칩이 훨씬 복잡하게 구현되어야 한다. 때문에 구현이 힘들고, 비싸다.
RISC : Low -> Cheap
-> RISC의 ISA를 구현하기 위해선 칩의 구현이 간단하고 쉽다.
CISC : Smaller
-> CISC는 instruction 구현이 훨씬 복잡하기 때문에 칩에 많은 수의 register를 넣을 만한 공간이 남지 않는다.
RISC : Larger
-> 반대로 RISC는 instruction 구현이 비교적 간단하기 때문에 많은 수의 register를 사용할 수 있는 공간이 확보가 된다.
CISC : Larger number of complex and variable length instructions ( > 1000 instructions, 1 to 15 - byte wide each )
-> CISC는 instruction의 길이가 제각각이며, 그 수 역시 많다.
RISC : Smaller number of simple and fixed length instructions (~200 instructions, 32-bit wide each)
-> RISC는 32비트의 고정된 길이의 명령어를 가지며, 그 수는 200여개로 상대적으로 적다.
CISC : Bad for pipelining (less pipelined)
-> CISC는 명령어마다의 길이가 제각각이어서 pipeline을 하기에 불편하다.
RISC : Good for pipelining (high pipelined)
-> pipeline은 명령어의 구조와 size가 동일할 때 훨씬 활용하기 쉽고, 때문에 RISC가 Pipeline에 유리하다.
CISC : High (desktop of server)
-> CISC의 하드웨어 구조가 복잡하기 때문에, 전력소모가 심하다..
RISC : Low (embedded systems)
-> RISC는 상대적으로 하드웨어 구조가 간단하여 전력소모가 적고, 때문에 모바일, 임베디드 시스템에서는 RISC가 유리하다.