[컴퓨터 구조] CPU 성능 향상기법: CISC & RISC

bien·2024년 8월 15일
0

컴퓨터구조

목록 보기
9/10

명령어 파이프라이닝과 슈퍼스칼라 기법을 실제로 CPU에 적용하려면 명령어가 파이프라이닝에 최적화되어 있어야 한다. 쉽게 말해 CPU가 파이프라이닝과 슈퍼스칼라 기법을 효과적으로 사용하려면 CPU가 인출하고 해석하고 실행하는 명령어가 파이프라이닝 하기 쉽게 생겨야 한다.

파이프라이닝 하기 쉬운 명령어란 무엇일까?

명령어 집합

  • CPU가 제각기 이해하고 시행하는 명령어의 세세한 생김새, 연산, 주소 지정 방식은 CPU마다 조금씩 다르다.
  • 이 각 CPU 별로 이해할 수 있는 명령어들의 모음을 명령어 집합(instruction set)또는 명령어 집합구조(ISA; Instruction Set Architecture)라고 한다.

명령어 집합에 '구조'라는 단어가 붙은 이유는 CPU가 어떤 명령어를 이해하는지에 따라 컴퓨터 구조 및 설계 방식이 달라지기 때문이다.

  • 인텔의 노트북 속 CPU는 x86 혹은 x86-64 ISA를 이해하고, 애플의 아이폰 속 CPU는 ARM ISA를 이해한다.
    • x86(x86-64)과 ARM은 다른 ISA이기 때문에 인텔 CPU를 사용하는 컴퓨터와 아이폰은 서로의 명령어를 이해할 수 없다.
    • 실행 파일은 명령어로 이루어져 있고, 서로의 컴퓨터가 이해할 수 있는 명령어가 다르기 때문이다.

어셈블리어는 명령어를 읽기 편하게 표현한 언어이다.
ISA가 다르다는 건 CPU가 이해할 수 있는 명령어가 다르다는 뜻이고, 명령어가 달라지면 어셈블리어도 달라진다. 다시 말해 같은 소스 코드로 만들어진 같은 프로그램이라 할지라도 ISA가 다르면 CPU가 이해할 수 있는 명령어도, 어셈블리어도 달라진다.

그림에서 x86-64 CPU는 우측의 명령어 집합을 이해할 수 없고, ARM의 CPU들은 좌측의 명령어 집합을 이해할 수 없다.

언어가 달라지면, 언어에 따라 사람들의 가치관과 생활양식도 달라진다.
이처럼, CPU의 언어인 명령어 집합이 다르면 CPU의 다른 부분에도 큰 차이가 생긴다.

  • 명령어 집합(구조): CPU의 언어
    • 따라서, 명령어의 종류가 달라지면 그에 대한 나비효과로 많은 것들이 달라진다.
    • 명령어 해석 방식, 사용하는 레지스터의 종류와 개수, 메모리 관리 방법, 파이프라이닝의 용이성 등등...
    • 나아가 CPU 하드웨어 설계(구조) 더 나아가 컴퓨터의 구조까지 결정한다.
      • 이러한 이유로 명령어 집합 구조 라고 부른다.

  • 우리가 실행하는 프로그램은 명령어로 이루어져 있다.
    • 따라서, ISA는 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속이기도 하다.

CISC

  • CISC (Complex Instructino Set Computer)
    • 복잡한 명령어 집합을 활용하는 컴퓨터
      • 컴퓨터 = CPU
      • x86, x86-64는 대표적인 CISC 기반의 ISA
    • 복잡하고 다양한, 강력한 기능의 명령어 집합을 활용한다.
      • 따라서 명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용한다.
        • 가변 길이 명령어: 메모리에 접근하는 주소 지정 방식도 다양해서 아주 특별한 상황에서만 사용되는 독특한 주소 지정 방식들.
    • 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있다.
      • 앞서 살펴본 x86-64와 ARM의 어셈블리어의 경우, x86-64가 훨씬 짧은 것을 확인할 수 있는데, 이는 ARM 명령어 여러개로 수행할 수 있는 일을 x86-64 명령어 몇 개만으로도 수행할 수 있음을 의미한다.

프로그램을 실해아는 명령어 수가 적다는 말은 '컴파일된 프로그램의 크기가 작다'는 것을 의미한다. 같은 소스 코드를 컴파일해도 CPU마다 생성되는 실행 파일의 크기가 다를 수 있는 것이다.

  • 위와 같은 CISC의 특성 때문에, 메모리를 절약해야 했던 과거에는 인기가 높았다.
    • 적은 수의 명령어 만으로 프로그램을 동작시킬 수 있기에, 메모리 공간이 절약 가능했기 때문이다.
  • 그러나 아래와 같은 단점들로 오늘은 사용이

단점 1. 명령어 파이프라이닝이 불리하다.

  • 명령어 파이프라이닝이 잘 되려면, 명령어가 실행되어야 하는 시간이 비교적 정형화되어 있어야 한다.
    • 그래야만 명령어 들을 겹쳐서 실행하는 파이프라이닝이 제대로 동작한다.
  • 그러나 CISC의 명령어들은 규격화되지 않아, 파이프라이닝을 어렵게 만든다.
    • 명령어가 워낙 복잡하고 다양한 기능을 제공하는 탓에 명령어의 크기와 실행되기까지의 시간일정하지 않다.
    • 또한 복잡한 명령어 때문에 명령어 하나를 실행하는데 여러 클럭 주기가 필요하다.
  • 명령어 파이프라인이 제대로 동작하지 않는다는 것은 현대 CPU에서 아주 치명적인 약점이다.
    • 현대 CPU에서 명령어 파이프라인은 높은 성능을 위해 필수적이기 때문이다.

단점 2. 복잡한 명령어는 사용 빈도가 낮다.

  • 대다수의 복잡한 명령어는 거의 사용되지 않는다.
    • CISC 명령어 집합 중 20% 정도의 명령어가 전체 사용된 명령어의 대략 80%를 차지한다는 논문도 있다.


RISC

CISC의 한계로 확인할 수 있는 교훈은 아래와 같다.

  1. 빠른 처리를 위해 명령어 파이프라인을 이용해야 한다.
    • 원활한 파이프라이닝을 위해 명령어 길이와 수행 시간이 짧고 규격화되어 있어야 한다.
  2. 어차피 자주 쓰이는 명령어만 줄곧 사용된다.
    • 복잡한 기능을 지원하는 명령어를 추가하기보다는 자주 쓰이는 기본적인 명령어를 작고 빠르게 만드는 것이 중요하다.

위의 원칙으로 부터 등장한것이 RISC이다.
따라서 RISC는 아래와 같은 특징을 가진다.

  • RISC(Reduced Instruction Set Computer)
    • 명령어의 종류가 적고, 짧고 규격화된 명령어를 사용.
    • 고정 길이 명령어를 활용한다.
    • 명령어가 규격화되어 있고, 하나의 명령어가 1클럭 내외로 실행된다.
    • 메모리 접근을 단순화하고 최소화한다.
      • 메모리에 직접 접근하는 명령어를 load, store로 제한한다.
      • CISC보다 주소 지정 방식의 종류가 적은 경우가 많다.
      • 대신 레지스터를 적극적으로 사용한다. 따라서 일반적으로 범용 레지스터 개수도 더 많다.
    • 사용 가능한 명령어 개수가 CISC보다 적기 때문에 더 많은 명령어로 프로그램을 작동시킨다.

CISC vs RISC

명령어 파이프라이닝은 현대 CPU에서는 절대로 놓쳐서는 안되는 중요한 기술이기 때문에, CISC 방식에도 많은 개선이 이루어져왔다. 오늘날의 CISC 방식 CPU역시, 명령어를 실행하는 동작 자체도 가급적 1클록 내로 작게 쪼개서 실행하는 경우가 많다.


Reference

profile
Good Luck!

0개의 댓글