본문 바로가기
컴퓨터 구조

축소 명령어 세트 컴퓨터 : RISC

by ash9river 2024. 3. 28.

축소 명령어 세트 컴퓨터 : RISC

들어가기에 앞서, 컴퓨터 조직과 아키텍처의 저자는 CISC보다 RISC가 좀 더 좋다는 편향적인 생각을 가지고 있음을 밝힌다.

RISC vs CISC

  • Computer
    • CISC(Complex : *intel PC*) : 복잡한 data access(High Level Language에 최적화)
    • RISC(Reduced : *ARM*) : Embedded, Mobile 등 간단한 기기에 맞춰, 단순한 명령어 세트, 단순한 data access

몇 가지 CISC, RISC 및 슈퍼스칼라 프로세서의 특징들



명령어 실행 특성들


HLL 연산들의 상대적 동적 빈도


오퍼랜드들


프로시저 변수들과 지역 스칼라 변수들


제안들(RISC)

  • HLL 프로그램에서 가장 많은 시간을 소비하는 특성들의 성능을 최적화함으로써 HLL이 가장 잘 지원될 수 있다.
  • RISC 구조는 크게 다음과 같은 세 가지 요소들에 의하여 특성이 결정될 수 있다.
    1. 많은 수의 레지스터들을 사용하거나, 레지스터 용도를 최적화하기 위해서 컴파일러를 이용한다.(Memory Access, Loop, Call 최적화)
    2. 명령어 파이프라인의 설계에 신중한 주의를 기울인다.(Loop 조심하는 경향)
    3. 명령어들은 예측할 수 있는 비용을 가지고 있어야 하며, 고성능 구현과 일관성이 있어야 한다.(Embedded: 다용성, 다기능, cost, 성능 등)


RISC의 큰 레지스터 파일의 사용

  • 소프트웨어 해결책
    • 컴파일러가 레지스터의 사용 극대화
    • 주어진 시간 내에 가장 많이 사용되는 변수들을 레지스터에 할당
    • 정교한 프로그램 분석 알고리즘 사용
  • 하드웨어 해결책
    • 더 많은 레지스터들
    • 더 많은 변수들이 오랜 시간 동안 레지스터에 머무를 수 있게 만든다.


중첩 레지스터 윈도우(Overlapping Registor Window)


중첩된 윈도우의 순환 버퍼 조직



전역 변수들(Global Variables)

  • 고급 언어에서 전역(global)로 선언된 변수들에게 컴파일러가 기억장치 내 장소들을 지정할 수 있다.
    • 이 변수들을 참조하는 모든 기계 명령어들은 기억장치-참조 오퍼랜드를 사용한다.
    • 자주 액세스되는 전역 변수들에 대해서는 비효율적이다.
  • 다른 방법으로 CPU 내에 전역 레지스터 세트(Global Registor Set)를 둔다.
    • 레지스터들은 수가 고정되어 있고, 모든 프로시저에 의해 이용될 수 있다.
    • 레지스터의 번호를 단순하게 지정하면 명령어 형식이 간단해진다.
  • 레지스터들을 서로 다른 주소 지정 방식으로 분리하면 하드웨어에 대한 부담이 늘어난다.

KakaoTalk_20231202_215131753

큰 레지스터 파일 대 캐시 조직의 특성들


스칼라의 참조



그래프 컬러링



왜 CISC인가?

  • 명령어 세트는 점점 명령어의 수가 많아지고 더 복잡해진다.
    • 그 이유들
      1. 컴파일러의 단순화 : C(HLL) -> Compiler -> 기계어
      2. 성능 향상
  • 프로그램이 짧아짐에 따른 두가지 이점
    1. 프로그램이 기억장치를 적게 차지하므로 자원(기억장치 공간)이 절약된다.
    2. 성능이 향상된다.
      • 명령어들의 수가 적어지면 인출할 명령어 바이트의 수가 감소한다.
      • 페이징(paging)이 사용될 경우, 짧은 프로그램은 페이지를 적게 차지하므로, 페이지 부재(page fault)가 감소한다.
      • 더 많은 명령어들을 캐시에 적재할 수 있다.

RISC와 비교한 CISC의 상대적 코드 크기



축소 명령어 세트 구조의 특성들


레지스터 간 방식과 기억 장치 간 방식의 비교


몇 가지 프로세서들의 비교



스테이지에 따른 파이프라인의 효과


파이프라이닝의 최적화

성능 저하의 요인

  1. data dependency
  2. 불규칙성(branch, loop 등)

  • 지연된 분기(Delayed Branch)
    • 다음 명령어의 실행이 완료될 때까지는 영향을 주지 않는 분기의 이용
    • 분기 바로 다음의 명령어는 지연 슬록(delay slot)이라고 불린다.
      • 지연된 적재(Delayed Load)
    • 적재의 목표가 되는 레지스터는 CPU에 의해 lock된다.
    • 레지스터를 필요로 하는 명령어를 만나면 CPU는 적재가 완료될 때까지 기다린다.
    • 만약 컴파일러가 명령어를 재배열할 수 있어서 Load 명령어가 파이프라인 내에 있는 동안에 다른 유용한 작업이 처리될 수 있다면, 효율이 높아진다.
      • 루프 언롤링(Loop Unrolling) : 루프를 풀어 헤친다.
    • 루프의 body를 언롤링 팩터(unrolling factor)라고 불리는 u번만큼 복제한다.
    • 단계 u 반복
    • 성능개선
      • 루프 오버헤드 줄임
      • 파이프라인 성능을 개선하여, 명령어의 병렬성을 높임
      • 레지스터, 데이터 캐시 or TLB의 지역성 개선

loop 100번, 이하의 코드 실행시

$A[i] = B[i] + C[i]$

다음과 같이 변경하면, loop 50번 실행 가능

$A[2i] = B[2i] + C[2i]$

$A[2i+1] =B[2i+1]+C[2i+1]$



정상 및 지연된 분기



MIPS




SPARC

Scalable Processor Architecture

  • Java 회사에서 개발
  • Sun MicroSystems에 의해 정의된 구조(아키텍처)
  • 다른 제조 회사들도 SPARC-호환 프로세서들을 생산할 수 있도록 허가
  • Berkeley RISC 1 프로세서에 의해 계기가 되었으며, 명령어 세트와 레지스터 조직이 Berkeley RISC 모델에 바탕을 두고 있다.

레지스터 윈도우 배치


주소 지정 방식 및 명령어 포맷의 비교


RISC와 CISC 간의 논쟁

  • 양적 논쟁
  • 질적 논쟁

하지만 엄격한 비교가 불가능하고, 현대에 이르러서는 RISC와 CISC가 상당히 비슷하게 구현된다.

RISC, CISC는 서로의 장점을 수용하여 논쟁의 의미가 없어졌다.