본문 바로가기
개발/컴퓨터 사이언스

Instruction과 Pipelining

by Dahna 2022. 9. 27.

Instruction과 Pipelining

목차

  • Instruction
    • 구조
    • 타입
    • address와 메모리
  • Pipelining
    • Five Stage
    • Pipelining Hazards
      • Data Hazards
      • Structural Hazards
      • Control Hazards

 

Instruction

  • CPU의 PC 레지스터에 의해 instruction memory 영역에 불러들여진 4byte 단위(32bit 운영체제 기준)의 기계어 코드이다.
  • 구조
    • 4bit는 opcode로 명령어와 매핑된다.
    • rs, rt, td는 레지스터를 가리킨다.
    • address: 메모리 주소를 나타낸다.
  • 타입: opcode에 따라 instruction의 타입이 결정된다.
    • R-type: 두 레지스터를 더한 결과값을 레지스터에 저장하는 instruction이다.
      • shamt: shift-amount로 저장된 레지스터를 4byte 단위로 맞추기 위해 수행해야 하는 shift 연산량을 의미한다.
    • Load/Store: 메모리 접근이 필요한 연산으로 주소를 포함한다.
    • Branch: 프로그램의 의사 결정 기능을 구현하는데 사용된다.
      • 두 레지스터와 address값을 가진다.
      • 다음 instruction을 받아둔다.
      • ALU에서 두 레지스터를 비교한 결과값에 따라 MUX는 address로 이동할 지 여부를 결정한다.
    • Jump: 직접 주소를 사용한 점프
      • 26bit의 address를 직접 입력하여 PC를 업데이트한다.

 

address와 메모리

cpu overview

  • 위 그림은 MIPS CPU를 도식화한 것이며, 32bit 운영체제이다.
  • 32bit 운영체제의 경우 instruction의 메모리 주소를 최대 16bit로 표현한다.
  • RAM은 byte-addressable array로서 접근 가능한 최소 단위가 byte이기 때문에 shift left 2 연산을 통해 단위를 맞춰준다.
  • 따라서 한번에 RAM에서 읽어들일수 있는 데이터의 최대는 2 **(16+2) = 2 **(8+10)byte = 256kb이다.
  • Jump instruction의 경우 26bit address에 shift left 2 연산을 취해 28bit address까지 한번에 읽어들일 수 있다. 이는 한번에 2 ** (8+10+10)byte = 256mb까지 읽어들일 수 있다는 것을 의미한다.

 

 

Pipeline

  • CPU의 동작 과정을 추상화 한 것이다.

Pipelining

  • instruction 처리량을 증가시키는 하드웨어 테크닉이다.

Five Stage

  • 각각의 instruction은 완료 되기까지 5개의 단계를 거치고, 이를 Five Stage라고 한다.
  • 모든 instruction은 IF, ID, EX 단계를 거치며, 오퍼레이션의 종류에 따라 수행되는 단계가 있다.(MEM, WB)
    • IF(instruction fetch): Cache 메모리에서 다음 instruction을 읽어들여 instruction memory로 불러들인다.
    • ID(instruction decode and register fetch): instruction memory에 올라온 명령어를 Mux(control unit)에 전달한다.
      • opcode를 control unit에서 해석하는 것이 decode다.
      • Mux는 오퍼레이션을 받아서 어떤 동작을 수행할지 결정한다.
    • EX(execute): 오퍼레이션이 실행된다.
    • MEM(memory access): 메모리에 접근하여 요청한 데이터를 읽어들인다.
      • 데이터의 위치에 따라 시간이 오래 걸릴 수 있으며, load 오퍼레이션일때 발생한다.
    • WB(register write back): 연산 결과를 레지스터에 저장한다.
      • store 오퍼레이션일때 발생한다.

 

Pipelining Hazards

  • 다음 clock cycle에서 다음 instuction이 실행되지 않을때 발생한다.
  • Pipelining Hazards의 종류
    • Data hazards
    • Structural hazards
    • Control hazards

Data hazards

  • 이전 연산의 결과가 저장(WB)되기 전에 필요한 경우 발생한다.
해결 방안
  • Stalling: 이전 instruction이 완료될 때까지 기다린다.
  • 컴파일러 단계: 독립적인 instruction과 수행 순서를 바꾸거나, 아무 것도 수행하지 않는 명령어를 추가한다.
  • Data forwarding: 수행 결과를 다음 instruction 실행 단계에 바로 전달한다.
    • hardware적인 해결 방안으로 Data forwarding unit의 추가가 필요하다.

Structural hazards

  • hardware 측면에서의 문제점으로, 동일한 리소스에 동시에 접근할 때 발생한다.
  • IF stage와 MEM stage는 동일한 메모리에 접근하므로, 두 stage가 동시에 처리될때 리소스 충돌이 발생한다.
해결 방안
  • Stalling: 이전 instruction과 충돌이 발생하지 않도록 기다린다.
  • hardware: IF/MEM이 접근하는 하드웨어를 분리한다.(리소스 추가)

Control hazards

  • 함수 호출, 조건문 등의 실행으로 instruction의 순서가 바뀌었을 때, 이를 알지 못해서 발생하는 문제이다.
해결 방안
  • Stalling: 다음으로 실행해야 할 instruction을 알 때까지 기다린다.

 

 

추가 정보

Locality

  • 시간 - Temporal Locality: 프로그램 실행 시 한번 접근이 이뤄진 주소의 영역은 자주 접근하게 된다. ex) 반복문 내의 지역변수들
  • 공간 - Spatial Locality: 프로그램 실행 시 접근하는 메모리 영역은 이미 접근이 이뤄진 영역의 근처일 확률이 높음
  • 수행 속도를 향상시키기 위해 Loaclity에 따라 메모리에 한번 접근할 때 주변의 일정 범위의 메모리 데이터를 한번에 읽어들인다.

ISA

  • Instruction Set Architecture
  • 최하위 레벨의 프로그래밍 인터페이스로, 프로세서가 실행할 수 있는 모든 명령어들을 포함한다.
  • 종류
    • CISC(Complex Instruction Set Computer): 복잡한 명령어 집합을 가진 프로세서이다.
      • 인텔 계열의 프로세서가 속한다.
    • RISC(Reduced Instruction Set Computer): 적은 수의 명령어를 수행하도록 설계된 마이크로 프로세서이다.
      • 복잡한 명령어를 제거하여 사용빈도가 높은 명령어 위주로 처리 속도를 향상한 프로세서이다.
      • 주로 스마트기기에 활용되며 ARM계열의 프로세서가 속한다.
  • 기계어와 1대1로 문자화한 것이 어셈블리어이다.
  • ISA는 소프트웨어에서 하드웨어로 넘어가는 단계에서 중재자 역할을 한다.

C언어 코드를 다른 기기에서 작동하도록 컴파일하기

  • C언어의 라이브러리들은 so(shared object file)파일로 저장되기 때문에 각 CPU에 맞는 기계어로 작성되어 있다.
  • 때문에 다른 CPU에서 작동하도록 컴파일하려면 타깃 CPU에 맞는 so 파일을 별도로 설치해야 한다.
  • 만약 그렇지 않으면 링킹(ld)단계에서 컴파일이 실패하게 된다.

'개발 > 컴퓨터 사이언스' 카테고리의 다른 글

[운영체제] Memory Management  (0) 2022.12.04
스케쥴링  (0) 2022.11.20
Process와 Thread  (1) 2022.10.11
운영체제와 Kernel  (2) 2022.10.04
CPU와 RAM  (1) 2022.09.21

댓글