TIL - 2021.10.05

Wanna be __·2021년 10월 9일
0

TIL

목록 보기
40/45
post-thumbnail

Today, I Learned

1. CA

RISC-V Instructions

CISC 방식으로 instruction 을 복잡하게 만들 수 있으면, 프로그램을 짜기에는 좋은데, Hardware의 속도를 개선하는것은 힘들다.
따라서 꼭 필요한 Instruction만 두고, 그것들로 프로그램이 돌아갈 수 있도록 하면, hardware를 만들기도 쉽고 좋다.

Intel의 insturction은 1~10바이트 길이까지 길어지기도 하기 때문에, 명령어의 경계를 알아차리기도 힘들고, 불편한것이 많음.
반면에 RISC는 한 명령어당 4바이트로 고정이 되어있기 때문에, Instruciton의 수도 줄이고, 간단하게 만들 수 있다는 장점이 있음.

80년대에 RISC 방식의 다양한 architecture가 등장했고, MIPS, RISC-1, ARM, PowerPC등 다양한게 등장.

RISC-V는 버클리에서 만든 RISC방식의 ISA중에 하나임.

이 책은 최초 MIPS버전, 이후 ARM버전, 근래에. RISC-V버전이 나왔음.
RISC-V는 기존에 회사 중심으로 CPU를 만들어서 팔던 방식에서 벗어나서, Architecture를 오래 지속할 수 있도록 Open ISA로 제대로 개발

APPLE은, MOTOROLLA RISC -> POWER PC -> x86 -> ARM 방식을 변경하면서 채택해왔는데, 애플은 독자적으로 소프트웨어를 만들기 때문에 최적화함.

RISC 형태에 속하는 RISC-V의 경우 Add를 할 때는 Register에 있는 값 혹은 상수만 Operand가 될 수 있다.
Intel의 경우 Memory에 있는 값에도 접근을 허용하는데, 그렇게되면 동일한 Add연산에 대해서 어떤 값을 연산하냐에 따라 시간의 차이가 많이 나기때문에, RISC 방식에서는 이를 지양하는편이다.

  1. Arithmatic Operations
    -, +, -, *, /, >>, << 등을 하는 산수 연산을 하는 연산자들
    총 9개가 있다.
    Add - 두 수를 더한다.
    Substract - 두 수를 뺀다.
    Addi - 두 수를 더하는데 하나는 constant

    Set less than - 첫번째가 더 작으면 1 아니면 0
    Set less than i - 두번째 인자가 constant인 set less than
    Set less than unsigned - unsigned에 대한 비교
    Set less than unsigned i - 두번째 인자가 constant인 unsigned에 대한 비교

    Load Upper Immediate - 20비트 constant를 받아서 그거를 뒤에서부터 12번 shift한 자리에 넣음
    Add Upper immediate to PC - PC에 대하여 LUI실행.

    비교하는데는 unsigned와 signed를 구분하는데, add, substract에는 이를 구분하지 않는다. 왜?
    두 연산 모두 동일한 로직으로 해도 무방하기 때문. (32bit + 32bit 결과를 32bit에 담는거나 - 결과를 담는거나 동일함)
    마찬가지로 Substract Immediate가 없는 이유임.

  2. Data Transfer Operations
    Data를 Memory <-> Register로 불러오거나 저장하는 로직.
    Memory -> Register는 Load
    Register -> Memory는 Store 라고 한다.

    일부 ISA는 Memory에 data를 저장할때 word가 alligned되기를 요구하는데 RISC-V는 굳이 그러지 않음.
    왜 Load와 Store가 필요하냐? Arithmatic 연산을 위해서 Register로 불러오고, 값을 다시 저장하기 위해서 Memory에 Store한다.

profile
성장하는 개발자

0개의 댓글