https://www.youtube.com/watch?v=lJwIERMo_N4&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=16
- 명령어가 어떻게 생겨야 파이프라이닝에 유리할까?
명령어 파이프라이닝, 명령어 병렬처리기법은 현대 CPU가 꼭 차용해야하는 핵심기술
명령어 파이프라이닝에 유리하게 생긴 명령어가 있다.
명령어 파이프라이닝에 불리하게 생긴 명령어가 있다.
명령어 집합이란?
명령어 집합(구조)는 CPU가 이해할 수 있는 명령어들의 모음을 말한다.
CPU는 명령어를 실행한다. 이 세상의 모든 CPU가 똑같이 생긴 명령어를 실행하는 것은 아니다.
명령어의 생김새, 연산방식, 주소지정방식 등은 CPU마다 다르다.
즉, CPU마다 이해하는 명령어 종류가 다른 경우가 있다.
같은 소스코드를 컴파일해도 아래와 같이 CPU의 종류에 따라서 어셈블리어의 종류도 달라질 수 있다.
명령어 집합이 달라지면, 어셈블리어 한줄한줄도 명령어이기에
같은 소스코드를 컴파일 할지라도 각각 다른 형태를 가지고 있는 저급언어가 나온다.
명령어 집합(명령어집합 구조) 는 CPU의 언어라고 할 수 있다.
명령어의 종류가 달라지면, 나비효과로 많은것이 달라질 수 있다.
(명령어 해석방식, 레지스터 종류나 개수, 파이프라이닝의 난이도 등)
그렇기에 CPU의 구조, 나아가서 컴퓨터의 구조까지 결정되기에
명령어 집합구조(ISA Instruction set Architecture) 라고도 부른다.
명령어가 달라지면 하드웨어도 달라진다.
그래서 ISA는 CPU의 언어이기도 하지만 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속이기도 하다.
명령어 집합의 가장 큰 2개의 카테고리
CISC & RISC : 현대 명령어 집합의 가장 크고 대표적인 종류
◼︎ CISC (Complex Instruction Set Computer)
복잡한 명령어 집합을 활용하는 컴퓨터(CPU라고 이해해도 됨)
인텔이나 AMB 사의 CPU로 대표되는 x86, x86-64 는 CISC(씨스크) 기반의 명령어 집합구조이다.
복잡하고 다양하고 강력한 명령어를 활용한다.
명령어의 형태와 크기가 다양한 가변길이 명령어를 활용한다.
상대적으로 적은수의 명령어로도 프로그램을 실행할 수 있다.
독특한 기능을 수행하는 명령어나, 독특한 주소지정방식을 지원하는 경우 등,
복잡하고 명령어 수의 자체도 다양한 가변길이 명령어 집합을 활용한다.
► CISC의 단점
메모리를 최대한 아끼며 개발해야 했던 시절에 인기가 높았으나, 명령어 파이프라이닝이 불리하다는 치명적인 단점이 있다. 명령어가 복잡하고 다양한 기능을 제공하기에 명령어 크기와 실행되기까지의 시간이 일정하지 않고, 복잡한 명령어때문에 명령어 하나를 실행하는데에 여러 클럭주기가 필요하다. 명령어 파이프라이닝이 잘 되려면 명령어가 실행되는 시간이 비교적 정형화 돼 있어야 한다. 가급적 한 클럭 주기로 탁탁 실행이 돼야한다. 명령어 길이나 실행시간이 들쑥날쑥하지 않아야, 명령어를 겹쳐서 실행하는 파이프라이닝이 제대로 동작할 수 있다. 또한 대다수 복잡한 명령어는 사용빈도가 낮다. CISC가 명령어 집합이 다양하고 복잡한 기능을 지원하긴하지만, 실제로는 자주 쓰는 명령어만 계속 쓰이게 된다.
◼︎ RISC (Reduced Instruction Set Computer)
명령어의 종류가 적고, 짧고 규격화된 명령어를 사용한다. (가급적 1클럭 내로 실행되는 명령어) 단순하고 적은 수의 고정길이 명령어 집합을 활용한다. 그래서 CISC에 비해서 명령어 파이프라이닝에 유리하다. 그리고 리스크 구조의 특징은, 메모리 접근방식을 최소화하는 경우가 많다. 메모리에 접근하는 것을 로드, 메모리에 저장하는 것을 store 라는 두개의 명령어로 제한할 만큼 메모리 접근을 최소화한다. 대신, 레지스터를 활용한다. 그래서 리스트는 시스크에 비해 범용레지스트의 종류가 많은 경우가 많다.
► RISC의 단점
다만, 명령어 종류가 CISC보다 적기에, 더 많은 명령어로 프로그램을 동작시키게 된다.
아래 그림과 같이 적은 명령어 종류로 컴파일시 더 많은 명령어가 나올 수 있다.
정리
CISC 는 가변길이 명령어를 사용하기에 하나의 명령어가 실행되기까지의 주기가 일정하지 않은 경우가 있다.
여러 클럭에 걸처 명령어가 수행되기에 RISC에 비해 파이프라이닝 하기가 어렵다.
이렇게 정리한 것은 이론적인 이야기고, 현대 CPU의 실제 설계에 대해 설명하자면,
CISC 기반의 명령어 집합을 사용하는 CPU 제조사 입장에서는 당연히 단점을 해결해야한다.
특히 명령어 파이프라이닝 같은 경우 현대에 매우 중요한 부분이기 때문이다.
그래서 이론적으로 위와 같다고는(여러클럭에 걸쳐 수행 등..) 하지만,
CISC가 실제로 실행될때는 CPU 내부적으로 명령어보다도 실행단위로써 더 작은 단위로,
가급적 1클럭 이내로 잘게 쪼게서 실행하는 경우가 많다.
즉, 내부적으로는 RISC 처럼 수행을 한다고 볼 수 있다.
요약
명령어 집합이란, CPU가 이해할 수 있는 명령어들의 모음이자 CPU의 언어라고 할 수 이다.
명령어의 생김새, 연산방식, 주소지정방식 등은 CPU마다 다르기에
CPU마다 이해하는 명령어 종류가 다른 경우가 있다.
명령어 종류가 달라지면, 해석방식, 레지스터 종류나 개수, 파이프라이닝의 난이도 등이 달라진다.
그렇기에 CPU의 구조, 나아가서 컴퓨터의 구조까지 결정되기에
명령어 집합구조(ISA Instruction set Architecture) 라고도 부른다.
ISA는 CPU의 언어이기도 하지만 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속이기도 하다.
현대 명령어 집합의 가장 크고 대표적인 종류로는 CISC와 RISC가 있다.
CISC는 다양하고 강력한 명령어를 사용하여 컴파일 후의 어셈블리어를 보면 적은 명령어로 나타난다. 그리고 명령어 형태와 크기가 다양한 가변길이 명령어를 사용하기에 명령어 파이프라이닝에 불리하다. 다시말해 명령어 크기와 실행되기까지의 시간이 일정하지 않고 명령어 하나를 실행하는 데에 여러클럭주기를 사용해야한다. 물론 현대 CPU의 실제 설계에서는 이런 CISC의 단점을 보완하기 위해 CPU 내부적으로 명령어보다도 실행단위로써 더 작은단위로 (가급적 1클럭 이내로) 잘게 쪼게서 실행하는 경우가 많기에 내부적으로는 RISC처럼 수행한다고 볼 수 있다.
RISC는 명령어의 종류가 적고, 짧고 규격화된 명령어를 사용한다. (가급적 1클럭 내로 실행되는 명령어) 단순하고 적은 수의 고정길이 명령어 집합을 활용하기에 CISC에 비해서 명령어 파이프라이닝에 유리하다. 그리고 RISC의 특징은 메모리 접근을 최소화하고 레지스터를 활용한다는 것인데, RISC 아키텍처의 설계철학이 단순성과 효율성에 중점을 두고 있기 때문이다. 메모리 접근은 레지스터에 비해 상대적으로 느리기에 이를 최소화하면 명령어를 더 빠르게 실행할 수 있어 전체 프로세서 성능이 향상된다. 그리고 RISC는 메모리 접근에 있어 Load와 Store 같은 간단한 메모리 접근 명령어를 사용하는데, 이는 명령어 집합을 단순화하고 각 명령어의 실행시간을 균일하게 만들어 pipelining 과 같은 기법을 적용하기 유리하다. 메모리와 반대로 레지스터는 CPU 내부에 있어 메모리에 비해 접근속도가 매우 빠르다. 계산에 필요한 데이터를 레지스터에 저장하고 레지스터간 연산을 수행하여 명령어 실행속도를 높일 수 있다. 위에서 언급했듯 RISC 아키텍처에서는 대부분의 연산이 레지스터 간에 이뤄지는데, 데이터를 레지스터로 로드한 후 레지스터끼리 연산을 수행하고 결과를 다시 레지스터에 저장하는 식이다.
'CS 공부 > [강의] 혼공 컴퓨터구조 + 운영체제' 카테고리의 다른 글
[9/30] 다양한 보조기억장치 (하드디스크) (0) | 2023.09.30 |
---|---|
[9/21] 캐시 메모리 (0) | 2023.09.21 |
[8/28] 명령어 병렬 처리 기법 (0) | 2023.08.28 |
[8/20] 빠른 CPU를 위한 설계기법 (0) | 2023.08.27 |
[8/19] 명령어 사이클과 인터럽트 (0) | 2023.08.25 |