본문 바로가기

RISC-V

[Background] Why RISC-V?

ChatGPT에게 RISC-V의 역사와 마일스톤에 대해서 간략히 설명해 달라고 하면 아래와 같은 답을 줍니다. 훌륭한 요약이네요. 덧붙이자면 SiFive의 설립자들이 이 역사를 시작했습니다. 

RISC-V란 무엇인가?
RISC-V는 오픈 소스 명령어 집합 구조(ISA)로, Reduced Instruction Set Computing의 약자인 RISC 아키텍처의 철학을 따릅니다. 이는 프로세서 설계에 필요한 명령어를 최소화하여 효율성과 확장성을 높이는 것을 목표로 합니다. RISC-V의 가장 큰 특징은 공개된 표준을 기반으로 하여 누구나 무료로 사용하고 수정할 수 있다는 점입니다.


역사와 주요 마일스톤
  • 2010년: 캘리포니아 대학교 버클리에서 RISC-V 프로젝트가 시작되었습니다. 연구 및 교육 목적으로 개발되었으며, 교수와 대학원생들이 참여했습니다.
  • 2014년: RISC-V 명령어 집합의 첫 번째 공개 버전이 발표되었습니다. 이를 통해 전 세계 개발자들이 RISC-V를 활용할 수 있는 길이 열렸습니다.
  • 2015년: RISC-V 재단(RISC-V Foundation)이 설립되었습니다. 이 재단은 RISC-V의 표준화를 추진하고 생태계를 조성하는 역할을 맡았습니다. 주요 기업과 기관들이 회원으로 참여하여 기술 개발과 협력을 진행했습니다.
  • 2018년: RISC-V 재단이 스위스로 본부를 이전하였습니다. 이는 글로벌 협력을 강화하고 국제적인 표준화 노력을 반영하기 위한 결정이었습니다.
  • 2020년대: 많은 기업들이 RISC-V 기반 프로세서를 개발하고 상용화하기 시작했습니다. 특히 IoT, 임베디드 시스템, 인공지능 분야에서의 활용이 두드러집니다.
RISC-V의 영향과 미래
RISC-V는 오픈 소스 하드웨어 운동의 핵심으로 부상하고 있습니다. 기존의 독점적인 ISA와 달리, RISC-V는 누구나 접근 가능하기 때문에 혁신과 협업을 촉진합니다. 이는 스타트업부터 대기업, 학계까지 다양한 분야에서 기술 발전을 이끌고 있습니다.
또한, RISC-V의 모듈식 설계는 확장성과 맞춤화를 용이하게 하여 특정 응용 분야에 최적화된 프로세서 개발을 가능하게 합니다. 이러한 특징은 앞으로의 컴퓨팅 환경에서 RISC-V의 역할을 더욱 중요하게 만들 것으로 예상됩니다.

 

RISC-V의 아버지인 David Patterson 교수가 쓴 "The RISC-V Reader: An Open Architecture Atlas" 책의 도입부인 "Why RISC-V"에서는 RISC-V의 기술적인 지향점을 잘 설명하고 있습니다. 아래에 간략히 요약해 보겠습니다.

RISC-V ISA의 Goal은 Univeral instruction set architecture (ISA)가 되는 것이다.
  • 아주 작은 embedded controller부터 high performance computer 등, 모든 크기의 Processor를 지원한다.
  • 범용의 Software stack과 Programming language을 잘 구동할 수 있어야 한다.
  • FPGA, ASIC, full custom chip 등 모든 종류의 기술로 구현이 가능하여야 한다.
  • 모든 Microarchitecture style (microcoded/hardwired control, in-order/decoupled/out-of-order, single/superscalar etc.)에 효율적이어야 한다.
  • Customized accelerator의 기반으로 동작할 수 있도록 광범위한 Specialization을 지원할 수 있어야 한다.
  • Base ISA는 절대 변경되지 않고 중단되지 않도록 안정성을 유지해야 한다.

 

목표만 보면 굉장히 완벽한 ISA를 추구하는 것으로 보여, 과연 실현 가능할까 하는 의문이 듭니다. 현재 가장 많이 쓰이는 ISA들(x86, ARM)은 대체로 그 뿌리가 1970, 80년대 기술에 의존하기 때문에 최신 기법들을 도입하기 위해 굉장히 많은 변종과 Backward compatibility를 위한 Patch가 많이 붙어있습니다. 이에 반해, 근래 10년 내에 발표된 RISC-V는 가장 Advanced 된 Architecture와 최신의 Hardware 구현 환경을 고려할 수 있어서 기존 ISA가 가지고 있는 비효율을 걷어내고 가장 효율적인 ISA를 구현할 수 있다고 합니다. 직접 Design을 해보면 이 주장이 옳은 지 확인해 봅시다.

 

책에서 주장한 Universal 한 ISA를 구현하기 위해 RISC-V는 Modular ISA 방법을 도입했습니다. 인텔은 High performance processor를 궁극적으로 구현하려 하였고 8086은 당시의 Zilog에 대항하기 위해 임시로 만든 Processor로 얼마가지 않아 수명을 다할 것으로 생각했으나 계속 진화하여 80186, 286, i386, i486, Pentium,...으로 계속 살아남게 됩니다. 이런 식으로 Incremental 하게 진화하게 되면 과거의 모든 것을 계속 끌고 가야 하는 비효율이 생깁니다. RISC-V는 RV32I라는 Core base를 지정하고 모든 Software stack이 수행될 수 있는 가장 기본적인 ISA를 만들어 절대 변경하지 못하게 합니다. 이후 추가로 필요한 모듈을 Add 하는 Modular 방식을 도입하게 됩니다. 이럴 경우 Backward compatibility를 걱정할 필요 없이 Compile option만 각 모듈에 맞게 지정하면 되기 때문에 모든 Software를 Core의 옵션과 상관없이 구동할 수 있습니다. 예를 들어 RV32IMFD라는 Core spec을 본다면, 이것은 기본 RV32I에 Multiply M, Floating point F, Double-precision floating point D를 추가한다는 의미입니다. 그 외에 Memory load/store 방식을 달리 가져갈 수 있는 Atomic A 및 16bit으로 구동할 수 있는 Compress C 옵션등도 있습니다. 64bit 연산을 위해 RV64I도 지정했으며, 비교적 최근에 Vector Extension이 표준으로 지정되어 RVV라고 부르는데, AI Accelerator의 설계에 많이 활용될 것으로 예상됩니다. 별도의 Option으로 지정되지는 않았지만 기본적으로 Custom instruction을 추가할 수 있는데, 이것은 Open ISA의 큰 장점이라 할 수 있습니다. 같이 코어를 설계해 가면서 Custom instruction도 구현해 보게 될 것입니다.

 

Patterson 교수가 쓴 책을 한번 읽어 볼 것을 추천합니다. 각 ISA를 설명하면서 왜 이런 Architecture를 선택하게 되었는지 다음 7가지의 요소를 고려하여 재미있게 설명하고 있습니다. 무엇보다 100페이지 내로 짧게 쓰여 있어서 부담이 덜하고 RISC-V Spec을 보는 것보다는 좀 덜 지루할 것입니다.

  • Cost
  • Simplicity
  • Performance
  • Isolation of architecture from implementation
  • Room for growth
  • Program size
  • Ease of programming/Compiling/Linking

이 블로그에서 같이 설계하게 될 Design은 가장 기본인 RV32I입니다. 그리고, Custom instruction을 추가하는 방법을 설명하기 위해 M Extension을 Full로 구현하지 않고 Multiplication만 수행하는 Custom1 instruction, 32bit register에 저장된 Data를 4개의 8bit Data로 나누어 각각 그 값을 곱하고 최종 더하는 MAC 기능을 하는 Custom0 Instruction도 구현해서 그 효과를 확인해 보게 될 것입니다. RV32I와 Custom instruction으로 Matrix multiplication에서 얻어지는 Gain을 비교하여 볼 수 있을 것입니다. 이것은 AI Accelerator를 디자인할 수 있는 인사이트를 제공할 것으로 기대합니다.

 

다음 포스트에는 구현 방향을 간단히 설명하고, 왜 HLS인지, HLS가 무엇인지 간략히 소개하고 RV32I instruction을 설명해 보도록 하겠습니다.

 

Next: [Background] Design Methods (Why HLS?)