RISC-V에서 부동소수점 지원 이해하기: 스칼라에서 벡터 확장까지

RISC-V 아키텍처는 모듈성으로 유명하며, 구현자는 특정 목표 워크로드에 필요한 기능만 포함할 수 있습니다. 이 철학은 부동소수점(FP) 연산에 대한 접근 방식에서 가장 뚜렷하게 드러납니다. 많은 단일형 ISA와 달리, RISC-V 기본 ISA(RV32I 또는 RV64I)에는 부동소수점 명령이 전혀 없으며, 대신 애플리케이션의 정밀도와 성능 요구에 따라 계층화할 수 있는 풍부한 확장 생태계를 제공합니다.

이 모듈성 덕분에 개발자는 소프트-플로트 라이브러리를 사용하는 작은 임베디드 컨트롤러부터, 넓은 벡터 레지스터와 특수 저정밀도 포맷을 활용하는 고성능 컴퓨팅(HPC) 또는 AI 가속기까지 확장할 수 있습니다.

스칼라 부동소수점 아키텍처

전용 vs. 통합 레지스터 파일

RISC-V에서 가장 중요한 설계 결정 중 하나는 전용 Floating-Point Register File(FRF)의 사용입니다. 표준 F 확장은 FLEN 너비의 32개 레지스터를 도입합니다.

General Purpose Register 파일(XRF)과의 분리는 여러 장점을 제공합니다:

  • 리소스 경쟁 감소: 부동소수점 연산이 정수 연산과 동일한 아키텍처 저장소를 놓고 경쟁하지 않습니다.
  • 유연한 크기 지정: 일반 목적 레지스터(XLEN)의 너비는 부동소수점 레지스터(FLEN)와 다를 수 있습니다. 예를 들어, RV32 + D 구성은 32비트 정수 레지스터와 64비트 부동소수점 레지스터를 사용합니다.
  • 단순화된 할당: 두 데이터 타입이 분리되어 있으면 컴파일러가 레지스터를 보다 효율적으로 할당할 수 있습니다.

하지만 이에는 비용이 따릅니다: 전용 로드/스토어 명령과 FRF와 XRF 사이의 데이터 이동 연산이 필요합니다.

"In-X" 대안: Zfinx

추가 레지스터 파일에 대한 하드웨어 오버헤드를 완화하기 위해, RISC-V는 Zfinx 계열의 확장을 제공합니다. 이를 통해 부동소수점 연산이 General-Purpose Register(XRF)에서 직접 수행될 수 있습니다.

  • ZfinxF 확장(단정밀도)과 동등합니다.
  • ZdinxD 확장(배정밀도)에 해당합니다.
  • Zhinx/Zhinxmin은 반정밀도 지원에 해당합니다.

XRF를 재사용함으로써 구현자는 부동소수점 전용 로드와 스토어가 필요 없게 되지만, 별도 레지스터 압력 및 유연한 크기 지정의 이점을 잃게 됩니다.

정밀도 수준 및 IEEE 754 준수

RISC-V는 주로 IEEE 754-2008 표준을 따르며, 이는 CPU에 가장 널리 받아들여지는 연산 표준과의 호환성을 보장합니다.

표준 정밀도 확장

  • F (Single Precision): binary32(FP32)를 지원합니다. 이는 대부분의 다른 FP 확장의 기본이 됩니다.
  • D (Double Precision): binary64를 지원합니다.
  • Q (Quad Precision): binary128을 지원하지만 채택은 제한적입니다.
  • Zfh / Zfhmin (Half Precision): binary16을 지원합니다. Zfhmin은 최소 부분집합으로, binary16을 저장 포맷으로 사용하고 실제 연산 시 binary32로 승격시켜 하드웨어 면적을 절감합니다.

향상된 기능: Zfa

Zfa 확장은 표준 포맷에 유틸리티 연산을 추가합니다. 여기에는 부동소수점 로드 즉시값(32개의 유용한 상수 제공), 조용 비교, 다양한 정수 반올림 연산이 포함됩니다.

벡터 부동소수점 및 AI 가속

기본 벡터 지원은 RVV 1.0을 통해 도입되며, 거의 모든 스칼라 명령에 대한 벡터 변형을 제공합니다. 특히 벡터 곱-누적 명령은 "파괴적"이며, 하나의 피연산자가 목적지 레지스터로 덮어써서 레지스터 사용을 최적화합니다.

저정밀도로의 전환

머신러닝(ML)의 폭발적 성장으로, 극한 정밀도보다 처리량과 에너지 효율을 우선시하는 포맷에 대한 수요가 증가하고 있습니다.

  1. BFloat16 (BrainFloat16): 16비트 포맷으로 binary32를 절단합니다. RISC-V는 Zfbfmin(스칼라)과 Zvfbfmin/Zvfbfwma(벡터)를 통해 이를 지원합니다. 보다 포괄적인 확장인 Zvfbfa가 현재 개발 중이며, BFloat16에 대한 거의 완전한 벡터 지원을 제공할 예정입니다.
  2. OFP8 및 OFP4: 메모리 대역폭을 더욱 줄이기 위해, RISC-V는 Open Compute의 8비트(Zvfofp8min)와 4비트(Zvfofp4min) 부동소수점 포맷을 탐색하고 있습니다.
  3. Micro-scaling (MX): OpenCompute MX 스케일링 포맷을 기반으로, 이 접근 방식은 공유 스케일링 팩터를 가진 값 블록을 저장하여 텐서 전체를 표현하는 데 필요한 비트를 크게 감소시킵니다.

향후 전망 및 과제

RISC-V가 확장됨에 따라 경쟁 표준과의 충돌이라는 과제에 직면합니다. Open Compute Project(OCP)는 소수의 집중된 포맷을 제공하는 반면, IEEE P3109 프로젝트는 수백 개의 가능한 소형 포맷을 위한 광범위한 프레임워크를 만들고 있습니다. RISC-V는 생태계 파편화를 방지하기 위해 특정 프로파일을 정의해야 할 가능성이 높습니다.

커뮤니티 관점

RISC-V 확장 명명 규칙의 복잡성과 옵션의 방대함은 압도적일 수 있습니다. 한 커뮤니티 구성원이 언급했듯이:

"관찰자의 관점에서 보면, 여러 다른 확장을 기억하는 것이 지나치게 어렵습니다. 명명 방식이 이 작업을 완화해 주지는 않습니다."

또한 IEEE 754 자체를 대체하려는 논의도 진행 중이며, Posits와 같은 대안이 부동소수점 표현의 근본적인 결함을 해결하려고 시도하고 있지만, 산업계의 당면 과제는 여전히 IEEE 호환성 유지입니다.

주요 확장 요약

확장 목적 레지스터 파일
F 단정밀도 (FP32) 전용 (FRF)
D 배정밀도 (FP64) 전용 (FRF)
Zfinx 단정밀도 (FP32) 일반 목적 (XRF)
Zfh 반정밀도 (FP16) 전용 (FRF)
Zvfbfmin BFloat16 (벡터) 벡터 레지스터
Zve32f 벡터 단정밀도 벡터 레지스터

Sources