본문 바로가기
IT_Study/CS_Study

[Computer Architecture] (8) CISC vs. RISC

by 두번째얼룩 2024. 4. 29.

사용하는 Instruction Set 구성 방식에 따라 CISC(Complex Instruction Set Computer)와 RISC(Reduced Instruction Set Computer)로 구분할 수 있다.

먼저 용어를 살펴보면 'Complex' 와 'Reduced'의 차이를 보인다. 즉, 하나는 복잡하고 다른 하나는 간단하다는 의미를 가진다.

 Instruction이 복잡하다는  것은 여러 가지 많은 종류의 Instruction이 있고, 각 Instruction의 길이가 동일하지 않다는 것을 말한다. 이렇게 복잡해진 이유는 전형적인 프로그래밍 테스크를 수행하기 위하여 계속 추가가 되었기 때문이다. 

 반대로 Instruction이 간단하다는 것은 심플한 종류의 Instruction이 있고, 각 Instruction의 길이가 동일하다는 것을 말한다. 이렇게 간단하게 할 수 있었던 이유는 Compiler를 활용하여, 전형적인 프로그래밍 테스크를 간단한 Instruction의 조합으로 구성할 수 있었기 때문이다. 즉, Compiler에게 최적화를 수행하도록 요구한다.

 또한 메모리를 접근 하는 방식에 따라서도 복합한 것(CISC)와 간단한 것(RISC)로 나눌 수 있다. 

 메모리 접근이 복잡하다는 것은 여러 Instruction에서 메모리 접근이 가능하다는 것이다. 예를 들어 Arithmetic instuction 중 하나인 addl %eax, 12(%ebx, %ecx,4)를 수행하면 '12(%ebx, %ecx,4)'를 통해서 메모리에 접근가능하다. 그리고 address를 표현하는 방식이 다양하다. 

 반대로 메모리 접근이 간단하다는 것은 특정 Instruction에서만 메모리 접근이 가능하다는 것이다. RISC에서는 Load/Store만이 Memory에 접근 가능하다. 예를 들어, 다른 Instruction에서 수행한 연산 결과를 메모리에 저장하려면, 우선, 연산 결과를 Register에 저장을 해두고, Store Instruction을 통해서 해당 데이터를 메모리에 저장한다.

 앞서 RISC는 Reigster를 기반으로 Instruction을 수행했다면, CISC는 일반적으로 Stack을 기반으로 Instruction을 수행한다. Stack 상에 push로 데이터(arguments)를 올려두고, Instruction을 수행한다. Stack을 사용하면 가지고 있는 Register보다 많은 argument를 사용할 수 있다. 

 CISC와 달리 RISC는 Condition code를 사용하지 않는다. 사용하지 않으므로 동작은 더 간단해 진다. 

Conditional codes는 status bit과 같이 Arithmetic 이나 logical operation을 수행 시 발생하는 상태를 기록한다. 예를 들어 Zero Flag, Negative Flag, Carry Flag, Overflow Flage 등이 있다.

이런 부분을 체크하기 위해서 'slt' <set less than>, 'slti' <set less than immediate> 등을 지원하여, Register에 0/1로 각 상태를 알 수 있도록 한다. 

Arm, even in AArch32 days, made this a lot less painful by having variants of instructions that set flags and not setting them for most operations. RISC-V decided to avoid this and instead folds comparisons into branches and has instructions that set a register to a value (typically one or zero) that can then be used with a compare-and-branch instruction such as branch if [not] equal (which can be used with register zero to mean branch of [not] zero).[1]

 

정리하면, 

CISC

1. 여러 가지 많은 종류의 Instruction이 있고, 각 Instruction의 길이가 동일하지 않다는 것을 말한다.

2. 여러 Instruction에서 메모리 접근이 가능하다는 것이다.

3. 일반적으로 Stack을 기반으로 Instruction을 수행한다.

4. Condition code를 지원한다.

 

RISC

1. 심플한 종류의 Instruction이 있고, 각 Instruction의 길이가 동일하다는 것을 말한다.

2. 특정 Instruction에서만 메모리 접근이 가능하다는 것이다.

3. Reigster를 기반으로 Instruction을 수행한다.

4. Condition code를 사용하지 않는다. 

 

 

 

[1] How to Design an ISA: The popularity of RISC-V has led many to try designing instruction sets.

 

댓글