+ 한국항공대학교 길현영 교수님의 컴퓨터구조론 과목 내용을 정리한 글입니다.
"명령어 집합 복잡도에 따른 컴퓨터 구조"에서의 "명령어 집합 복잡도"란?
=> 하드웨어(CPU)가 이해할 수 있는 명령어 집합(기계어)의 복잡도
ex) 많다, 다양하다
CISC (Complex Instruction Set Computer)
< 초기의 컴퓨터 시스템 개발에서의 가장 큰 문제점 >
1. 메모리가 매우 고가이고, 속도가 느리다.
~> 메모리에서 갖고 올 명령어의 숫자를 줄이자. (한 번에 많이 가져오자.)
2. 낮은 수준의 프로그래밍 기술을 갖고 있다.
~> HW에서 지원해주자. (고급 프로그래밍 언어의 등장)
=> 명령어 집합(ISA)에서 복잡하지만 강력한 명령어들이 추가되었다. (명령어 집합의 크기 ↑)
ex) 열 줄 코드를 한 줄 코드로 축약한 명령어
즉, 초기에는 CISC 방향으로 발전했다.
< 특징 >
강력한 명령어 + 복잡하고 다양한 형식
높은 코드 밀도와 강력한 명령어를 위해 가변 명령어 형식을 사용한다.
- 가변 명령어 형식은 연산 부호를 해독할 때까지 명령어의 길이를 알 수 없다.
- 많은 종류의 피연산자 개수, 주소 지정 방식 등이 추가된다. (일관성 없는 다양한 명령어들)
강력하고 복잡한 명령어는 사용 빈도가 매우 낮으며, 일부는 거의 사용하지 않는다.
- 그러나, 시스템은 가장 길고 복잡한 명령어도 실행될 수 있도록 최대한 구현되어야 하기 때문에 명령어 형식의 복잡화는 컴퓨터 구조 설계를 어렵게 한다.
=> 명령어 인출의 효율이 감소하고, 파이프라인 등 병렬화 작업의 복잡도가 증가한다.
+ 명령어 길이를 알 수 없기 때문에 다음 명령어를 인출할 수 없다. (Program Counter)
< 장점 >
다양한 종류의 연산과 주소 지정 방식 등이 제공되어 프로그래밍 제약이 적다.
- 고급 언어와 기계 언어 mapping 측면에서는 컴파일링이 용이할 수 있다.
(복잡한 명령을 기계어에서 갖고 있기 때문)
복잡한 명령도 CPU 수준에서 지원되는 명령어(마이크로 코드)로 매칭되어, 실행 효율이 좋을 수 있다.
< 단점 >
하나의 명령어가 복잡하여 명령어 디코딩에 시간이 오래 걸리며, 해석에 필요한 회로가 복잡하다.
(하나 하나씩 비교해야하기 때문)
정확한 명령어 mapping이 어려운 경우, 컴파일러의 최적화 작업이 어렵다.
명령어의 길이가 달라서 동시에 여러 개의 명령 처리(pipeline, 병렬처리 등)이 어렵다.
파이프라이닝(pipelining)이란?
=> 모든 HW들이 놀지 말고 움직이게 해서, performance를 높이자.
ex) 세탁 순서: 세탁기 - 건조기 - 빨래 접기 - 옷장에 넣기 (각 과정의 걸리는 시간이 모두 같다고 가정)
ex) 명령어 처리 순서 (일반적): fetch - decode - execution mem access - write
(각 과정을 cycle로 나누어서 처리)
=> 파이프라이닝이 적용되기 위해서는 명령어의 길이가 일정해야한다.
(각 명령어 처리 사이클 시간이 모두 다르다면 적용하기 어렵다.)
RISC (Reduced Instruction Set Computer)
CISC의 단점으로 인한 발상의 전환, 다양한 고급 언어들의 등장 등의 이유로 탄생했다.
- 거의 사용하지 않는 비효율적인 복합 명령어보다 컴파일러로 하여금 기본 명령어의 최적 조합을 이용한다.
(컴파일러가 알아서 최적화를 하도록 한다.)
- 즉, 많이 쓰는 기본 명령어를 중심으로 HW를 설계한다.
ex) 암달의 법칙에서 1%를 아무리 성능 개선해도, 99%가 그대로면 크게 변화가 없다. 99%를 조금 개선하는 것이 더 낫다.
< HW 기술의 발전 >
1. 지속적으로 메모리의 가격이 하락했다.
=> 코드 밀도의 중요성 저하
2. 메모리의 속도가 향상되었다.
=> 폰노이만 병목(데이터 트래픽)에 대한 영향 축소
< 특징 >
내용과 형식 모두 단순화
=> HW 설계에 유리하다.
단순한 명령어를 사용한다. (상대적으로 적은 종류의 명령어를 사용한다.)
- 주로 1개의 cycle 내에서 실행되는 기본적 명령어가 중심이다.
- 데이터 경로가 간단해져서 짧은 사이클 시간이 걸린다.
- 적재/저장 구조를 사용한다. (적재/저장 명령어로만 메모리에 접근이 가능하다.)
형식이 단순하다.
- 고정 길이 명령어와, 제한된 종류의 주소지정 방식을 사용한다.
- 해독 전에 다음 명령어 Fetch가 가능하다.
< 장점 >
프로세서(HW) 설계 비용이 줄어든다.
소수의 명령어만을 사용하여 코드 생산이 효율적이다.
각 명령어가 한 클럭에 실행되도록 고정되어 파이프 라인 성능 최적화가 가능하다.
고정된 명령어이기 때문에 명령어 디코딩 속도가 빠르다.
전력 소모가 적기 때문에 임베디드 프로세서에도 많이 사용된다.
< 단점 >
컴파일러의 최적화 과정이 복잡해진다. (컴파일러 의존도 ↑)
명령어의 길이가 고정되어 있기 때문에 코드 효율이 낮다.
'Computer Science > Computer Architecture' 카테고리의 다른 글
[Computer Architecture] 데이터 표현 (1) | 2023.10.15 |
---|---|
[Computer Architecture] picoMIPS 명령어 집합 구조 (2) | 2023.10.15 |
[Computer Architecture] 주소 지정 방식 (0) | 2023.10.07 |
[Computer Architecture] 명령어 집합 분류 (1) | 2023.10.06 |
[Computer Architecture] 명령어 집합 (2) (0) | 2023.09.23 |