branch Instructions

  • 일반적으로는 순차적인 명령 수행을 위해, RV32I에서는 각 명령 후에 PC가 명령어의 크기만큼(4byte)씩 증가함
  • branch 명령어는 PC가 코드의 섹션을 건너뛰거나 이전 코드를 반복할 수 있도록 함
    • Conditional branch
      • beq (branch if equal) : if (a == b)
      • bne (branch if not equal) : if (a != b)
      • blt (branch if less than) : if (a < b)
      • bge (branch if greater than or equal) : if (a >= b) (단, a, b is signed)
      • bltu (branch if less than for unsigned) : if (a < b) (단, a, b is unsigned)
      • bgeu (branch if greater than or equal for unsigned) : if (a >= b)
    • Unconditional branch (ex. jump)
      • jal (jump and link)
      • jalr (jump and link register)

 


 

beq, bne, blt, bge, bltu, bgeu

 

 


 

slt, sltu, slti, sltiu

 

 

 


 

jal

 

 


 

Procedure (Function)

  • 프로그래머들은 프로그램을 짜기 위해 프로시저(또는 함수)를 사용함
  • 파라미터(인자)는 프로시저와 프로그램의 나머지 부분간의 인터페이스 역할을 함

 

 


 

jal - ret pair

 

 

 


 

jalr (jump and link register)

 

'cs 공부 > 컴퓨터 구조' 카테고리의 다른 글

Lec4. RISC-V Instructions #2  (2) 2023.05.07
Lec4. RISC-V & RISC-V Instructions #1  (0) 2023.04.27
Lec3. Performance  (0) 2023.04.26
Lec2. Instructions and High-level to Machine Code  (0) 2023.04.25
Lec1. Computer and Technology  (0) 2023.04.25

CPU가 메모리에 접근하는 이유

  1. Instruction Access (Read)
    • 모든 CPU에는 실행중인 현재 명령어의 위치(주소)를 추적하는 특수 레지스터가 있음
    • 많은 CPU들이 Program Counter(PC)라는 동일한 용어를 사용함
      • X86는 예외, Instruction Pointer(IP)라는 용어 사용
      • RISC-V 또한 CPU 내부에 PC라고 하는 32bit의 특수 레지스터를 갖고있음 (Flip-Flop으로 구현)
    • 전원킬 때, 리셋시에 PC는 미리 정의된 주소로 초기화됨
    • PC가 미리 정의된 주소로부터 첫 번째 명령어를 읽어서 실행한 후엔 자동으로 inclement 됨 (자동으로 일정한 값만큼 증가, RISC-V는 4씩 증가, 각 명령어의 크기가 4byte이기 때문)
    • 각 명령어가 실행될 때(혹은 그 후에) PC가 업데이트됨
  2. Data Read/Write
    • 모든 것(코드 및 데이터)은 메인 메모리에 저장됨
    • CPU 내부의 레지스터는 제한된 용량을 가짐
      • CPU내부의 레지스터가 수용할 수 있는 것보다 훨씬 많은 데이터가 프로그램에 들어있음
      • RV32I의 경우 CPU 내부에는 32개의 범용 레지스터가 있음
      • 따라서 CPU는 적은 양의 데이터만을 레지스터에 즉시 저장 가능함
    • 따라서 RISC-V(및 다른 모든 CPU)는 메모리와 레지스터 간에 데이터늘 전송하는 명령을 제공해야 함
      • 이러한 명령어들을 memory access instruction이라 함
      • 메모리에 있는 데이터에 접근하기 위해서는, 데이터 전송 명령어가 메모리 주소를 제공해야 함

 

 


Word

  • 메모리와 레지스터의 크기를 word로 match
  • word는 특정 컴퓨터 설계에 사용되는 데이터의 natural unit을 나타내는 용어
  • data path의 크기
    • word는 단순하게 함께 처리되는 고정된 크기의 bit 그룹
    • word안에 bit의 수는 컴퓨터 구조의 중요한 특징
    • word의 크기는 컴퓨터 구조와 작동의 여러 측면에 반영됨
    • 컴퓨터에 있는 대부분의 레지스터는 보통 word 크기를 가짐
  • 현대 컴퓨터의 word 크기는 보통 32 또는 64bits
    • RV32I의 word 크기는 32bits(=4 Bytes)
    • x86의 경우, 컴퓨터가 64-bit CPU 기반임에도 불구하고 과거 호환성 이유로 인해 여전히 word 크기가 16bit임
    • Alignment restriction
      • word의 메모리 주소는 자연 word 경계(RV32I에서는 4의 배수)에 있어야 함

 

 

 

 


 

lw (load word)

 

 

 


 

sw (store word)

 

 

 

 

 


Byte, Half-word Load/Store

  • 대부분의 아키텍처는 메모리의 개별 byte(4bit) 또는 half-word(16bit) 주소를 지정하고 액세스할 수 있는 기능을 제공함
    • lb(load byte), lh(load half-word), lbu(load byte unsigned, 기본적으로 u가 없으면 signed임), lhu(load half-word unsigned), sb(store byte), sh(store half-word)
  • byte 주소를 지정할 수 있는 명령어
    • lb(load byte), lbu(load byte unsigned), sb(store byte)

 

 


 

lb

 

 


 

sb

 

 


 

Endianness

 

  • Big-endian machines
    • IBM 360/370, Motorola 68k, Sparc, HP PA
  • Little-endian machines
    • x86, DEC Vax, DEX Alpha, RISC-V
  • Endianness의 종류는 임의로 선택하는 것이지만 big-endian과 little-endian 컴퓨터 간에 데이터를 공유할 때에 번거로움이 발생할 수 있음

 

 

 

 


 

lui, auipc

 

 

 


auipc 사용 이유

 

 

 


Pseudo Instructions

  • RISC-V는 실제론 명령어 집합의 일부가 아니지만 프로그매어와 컴파일러 및 어셈블러에 의해 일반적으로 사용되는 유사 명령어를 정의함
  • 즉, 프로그래밍 편의를 위해 수도 명령어 제공함

'cs 공부 > 컴퓨터 구조' 카테고리의 다른 글

Lec4. RISC-V Instructions #3  (0) 2023.05.07
Lec4. RISC-V & RISC-V Instructions #1  (0) 2023.04.27
Lec3. Performance  (0) 2023.04.26
Lec2. Instructions and High-level to Machine Code  (0) 2023.04.25
Lec1. Computer and Technology  (0) 2023.04.25

 

CISC vs. RISC

  • CISC (Complex Instruction Set Computer)
    • 하나의 instruction으로 여러가지(복잡한) 작업 수행
    • 가변 길이 instruction
    • 장점: program size 작음
    • 단점: cpu complexity 높음
    • ex) x86(Intel, AMD), Motorola 68k
  • RISC (Reduced Instruction Set Computer)
    • 각각의 instruction이 작은(단위의) 작업 수행
    • 고정 길이 instruction
    • 장점: cpu complexity  낮음
    • 단점: program size 큼
    • ex) RISC-V, Arm, MIPS

 


 

Instruction 종류

  • Data processing instructions (데이터처리 명령어)
    • Arithmetic and Logical (Integer)
    • 산술연산, 논리연산 등을 하기 위한 명령어
  • Memory access instructions (메모리접근 명령어)
    • Load/Store
    • cpu가 데이터를 메모리에서 레지스터로 가져오는 명령어, 레지스터 값을 메모리에 쓰기위한 명령어
    • 레지스터: 연산 전 잠깐 cpu에 가져오는 곳
  • Branch instructions (분기 명령어)
    • if, for, while 같은 조건문, 반복문이나 함수호출을 위한 명령어

 

 

 


 

Memory Hierarchy 

 

 

 

 

 


 

CPU 동작 방식

  • add x5, x6, x7                      # x5 = x6 + x7
    • x6과 x7은 피연산자, x5는 목적지
    • 산술 명령어의 피연산자는 cpu 내부의 register라고 불리는 특별한 위치로부터 옴
  • add x5, x6, 5                      # x5 = x6 + 5
    • 여기서 5는 immediate이며 숫자 5를 가리킴
    • 산술 명령어의 피연산자는 immediate field에서도 올 수 있음
  • 모든 cpu(x86, Arm, RISC-V)는 내부에 레지스터를 가짐
  • RISC-V는 32*32-bit 레지스터를 가지고 있음

 


 

RV32I Register File

  • 레지스터는 FF(Flip-Flops)로 구현되고 실행됨
  • cpu 내부의 구조적인 레지스터 집합(프로그래머가 볼 수 있는 / 알 수 있는)을 레지스터 파일이라고 부름
  • 레지스터 파일은 ff(이 수업에서 다룸) 또는 SRAM(실제 산업에서 쓰임)으로 구현 가능
  • RV32I 레지스터 파일은 32*32bit 레지스터를 가짐
    • 2 read ports
    • 1 write ports
  • 레지스터 파일에 대한 access는 메인메모리 또는 캐시에 대한 access보다 훨씬 빠름
  • 왜냐하면 레지스터의 수자 제한되어 있고, cpu 내에 있기 때문
  • 따라서 컴파일러들은 high-level 코드를 어셈블리 코드로 변환할 때 레지스터 파일을 사용하려 함

 

 


 

RISC-V Register Convention

 

 


 

RISC-V Instruction Formats

  • Arithmetic and Logical (Integer)
  • Load/Store
  • Jump and Branch

 

 


 

R-type Instruction

 

 

  • opcode
    • 7-bit (128 종류 나타낼 수 있음)
    • operation(ex. and, or, xor, +, -, load, store 등) code
  • funct7
    • 7-bit
    • opcode와 함께 명령어가 어떤 동작을 하는지 명시하는 부분
  • funct3
    • 3-bit
    • opcode와 함께 명령어가 어떤 동작을 하는지 명시하는 부분
  • rs1
    • 5-bit
    • register of the first sorce operand
  • rs2
    • 5-bit
    • register of the second sorce operand
  • rd
    • 5-bit
    • register of the destination operand
    • 레지스터의 개수가 32개이므로 32개 중 1개를 명시하려면 최소한 5-bit(2^5 = 32) 필요 

 

 


 

add

 

 

 


 

sub

 

 

 


 

I-type Instruction

 

  • R-type 명령어는 레지스터에 3개의 피연산자를 모두 갖고있음
  • I-type 명령어에서는 하나의 피연산자를 명령어 자체에 저장할 수 있음 => immediate(즉치값)
  • Immediate
    • 레지스터나 메모리 접근이 필요x
    • 12-bit의 immediate 필드는 2의 보수법을 사용하므로 -2^11 ~ 2^11-1로 값이 제한되어있음
  • R-type과 비교했을 때 funct7과 rs2가 없음

 


2's Complement Number

  • 2의 보수법은 부호가 있거나 없는 숫자의 덧셈과 뺄셈을 하는 편리하고 간단한 방법을 제공 
  • 2의 보수를 얻는 빠른 방법은 모든 bit를 뒤집고 1을 더하면 됨

 

 


 

addi

 

 

 


 

Logical Instructions

  • and, or, xor, andi, ori, xori
  • 논리 명령어는 2개의 source 피연산자를 bit 별로 연산하고 그 결과를 목적 레지스터에 기록함

 

 


 

R-type Instruction (and, or, xor)

 

 


 

I-type Instruction (andi, ori, xori)

 

 


 

Sign Extension

  • I-type 에서 immediate는 12bit임
  • 하지만 source 레지스터의 크기는 32bit임 
  • 따라서 12bit인 immediate를 32bit로 늘려줘야함
  • 이를 Extension이라함 
    • Zero-extension
      • 나머지 20bit를 전부 0으로 채움
      • (음수일 때) 숫자가 바뀜
    • Sign-extension
      • 12bit의 가장 앞 bit를 MSB(Most significant Bit)라 함
      • 이 MSB를 20bit에 전부 채워넣음
      • 숫자 바뀌지 않음
  • 일반적인 CPU에서 
    • arithmetic inst => SE 사용
    • logical inst => ZE 사용
  • RISC-V에서는 둘다 SE 사용 (ZE 사용하는 것이 큰 이점이 X)

 

 


 

Shifting

 

 


 

Shift Instructions

  • sll : shift-left logical
  • srl: shift-right logical
  • sra: shift-right arithmetic (sla는 없음, sll이랑 똑같음)
  • slli: shift-left loghical immediate
  • srli
  • srai

 


'cs 공부 > 컴퓨터 구조' 카테고리의 다른 글

Lec4. RISC-V Instructions #3  (0) 2023.05.07
Lec4. RISC-V Instructions #2  (2) 2023.05.07
Lec3. Performance  (0) 2023.04.26
Lec2. Instructions and High-level to Machine Code  (0) 2023.04.25
Lec1. Computer and Technology  (0) 2023.04.25

 

컴퓨터의 성능을 측정하는 방법

  • Response time (응답 시간)
    • Execution time + Latency (실행시간 + 대기시간)
    • 작업이 시작되어서 완료까지 걸리는 시간
    • 개별 사용자에게 중요
    • 임베디드 컴퓨터 혹은 pc가 응답시간에 더 집중하는 편
  • Throughput (처리량)
    • 주어진 시간에 수행된 총 작업 개수
    • 데이터 센터 및 슈퍼 컴퓨터 관리자에게 중요
    • 서버는 throughput에 더 집중하는 편

 

 

 

  • 문제

 

  • 1) Sequential Laundry에서 Response time과 Throuput은?

 

더보기
  • Response time: 90 mins
  • Troughput: 0.67 (4/6) tasks / hr (= 90mins/task, 6 hours for 4 loads)

 

 

  • 2) Pipelined Laundry에서 Response time과 Throuput은?

 

더보기
  • Response time: 90 mins
  • Troughput: 1.14 (4/3.5) tasks / hr (= 52.5mins/task, 3.5 hours for 4 loads)

 

  • Pipelining
    • 파이프라인은 단일 작업의 응답시간에는 도움이 되지 않음
    • 파이프라인은 전체 workload의 처리량에 도움이 됨
    • 동시에 여러 작업을 처리
    • 파이프라인의 각 단계의 길이가 일정하지 않다면 속도향상이 저하될 수 있음
    • Potential speedup = # of pipeline stages

 

 

 

 

Abstraction (추상화)

  • 추상화는 복잡성을 해결하는 데에 도움이 됨
    • 저수준의 세부사항을 숨겨줌
  • Instruction set architecture (ISA)
    • 하드웨어와 저수준 소프트웨어간의 추상화 인터페이스

 


 

Abstractions in Computer

 

 


 

Hardware/Software Stack in Computer

  • Application software
    • Written in high-level language
  • System software
    • Compilers (컴파일러)
      • high-level언어로 쓰여진 코드를 기계어로 변환해줌
    • Operating Systems (운영체제)
      • user에게 매우 유용
      • 입출력 처리, 메모리 및 스토리지 관리, 작업관리 및 리소스 공유 등
    • BIOS (Basic Input/Output System)
      • very low-level software
      • 컴퓨터를 키면 해당 컴퓨터를 스캐닝 (ex. 마우스 있는지 등등)
  • ISA
    • 하드웨어와 low-level 소프트웨어 사이의 인터페이스
    • 하드웨어가 매우 복잡하기 때문에 추상화 계층이 존재함
  • Hardware
    • Processor, memory, I/O controllers

 

 


 

Instructions (명령어)

  • CPU마다 명령어 집합이 다름
  • X86, ARM, RISC-V 는 자기 자신만의 명령어 집합을 가짐
  • 하지만 많은 공통점을 가짐
  • 이번에는 RISC-V instruction sets를 배울거임

 


 

Levels of Program Code

  • High-level language
    • 문제 영역에 가까운 추상화 수준
    • 생산성 및 휴대성 제공
  • Assembly language
    • 명령어들의 텍스트 및 기호 표현
  • Machine code (object code or binary)
    • 명령어와 데이터의 이진수 bits

 

 


 

High-Level code is Portable

 

 

 


 

Levels of Program Code

 

 

 


 

High-level Code to Executable (Binary)

  • 리눅스에서 hello.c를 실행하는 방법 예시

 

 

  • High-level 언어를 기계어로 변환하기 위한 단계
    • Preprocessing
      • 포함된 매크로와 헤더파일을 expand하는데에 사용
      • 예시) cpp simple_sub.c > simple_sub.i 
      • cpp: C preprocessor
    • Compilation
      • 특정 cpu에서의 어셈블리 언어로 preprcess된 코드를 실제 컴파일
      • 예시) gcc -S simple_sub.i
      • 결과값은 simple_sub.s에 저장됨
    • Assembler
      • 어셈블리 언어를 기계어로 변환하고 실행파일(object file) 생성
      • 예시) as simple_sub.s -o simple_sub.o
      • as: Assembler
    • Linker
      • 마지막 단계
      • object file을 연결하여 executable 생성
      • 실제로 실행파일에는 시스템과 c 라이브러리의 많은 외부기능이 필요
      • 따라서, gcc가 내부적으로 사용하는 실제 링크 명령은 복잡함
      • 예시)  

 

  • 실행파일 실행방법
    • 예시) ./simple_sub
    • 리눅스 커널은 프로그램을 메모리에 loads

 

 

 

 


 

Stored Program Concept (저장된 프로그램의 개념)

  • Instruction과 data는 이진법으로 표기됨
  • Instruction과 data는 memory에 저장됨
  • cpu는 실행할 Instruction과 data를 가져옴
  • 바이너리 호환성을 통해 컴파일된 프로그램은 동일한 ISA를 가진 다른 컴퓨터에서도 작동될 수 있음 (표준화된 ISA의 필요성)

 


 

Cross Compiler

  • RISC-V와 x86는 다른 ISA를 가짐
  • 그럼에도 불구하고 x86에서 RISC-V 기계 코드를 생성하는 방법은? Cross Compiler
  • 컴파일러가 실행되는 플랫폼이 아닌 다른 플랫폼에서 실행가능한 코드를 만들 수 있는 컴파일러
  • 다른 cpu의 machine code 생성 가능

 

'cs 공부 > 컴퓨터 구조' 카테고리의 다른 글

Lec4. RISC-V Instructions #3  (0) 2023.05.07
Lec4. RISC-V Instructions #2  (2) 2023.05.07
Lec4. RISC-V & RISC-V Instructions #1  (0) 2023.04.27
Lec3. Performance  (0) 2023.04.26
Lec1. Computer and Technology  (0) 2023.04.25

 

Main Memory and Storage

  • Main Memory (메인 메모리)
    • Volatile (휘발성)
    • 전원을 끄면 instructions와 data 소실
  • Secondary storage (보조 스토리지)
    • Non-volatile (비휘발성)
    • 하드디스크
    • SSD, Flash memory
    • Optical disk

 

CPU(프로세서)의 종류

  • x86
    • PC에 사용
    • intel, AMD, Via의 프로세서를 가리키는 총칭
  • POWER, PowerPC
    • 슈퍼컴퓨터에서 사용
    • 예전에는 mac에서 사용되었지만 지금은 intel로 교체됨
    • 예전 모토로라
  • Sparc
    • 요새 잘 사용 안함
  • Arm
    • 최근 mac에서 사용, 아이폰, 갤럭시 등등에서도 사용
  • RISC-V
    • 임베디드 및 고성능 컴퓨팅 분야에서 많이 사용될 것
    • 컴퓨터 구조 공부할 때 배울 CPU

 

N-bit CPU의 의미

  • basic unit of data processor
    • 16bit, 32bit, 64bit
  • ALU의 input, output이 몇 bit인지를 결정함 (즉,  몇 bit를 다룰 것인가)

'cs 공부 > 컴퓨터 구조' 카테고리의 다른 글

Lec4. RISC-V Instructions #3  (0) 2023.05.07
Lec4. RISC-V Instructions #2  (2) 2023.05.07
Lec4. RISC-V & RISC-V Instructions #1  (0) 2023.04.27
Lec3. Performance  (0) 2023.04.26
Lec2. Instructions and High-level to Machine Code  (0) 2023.04.25

+ Recent posts