RISC‑V 벡터 코드 자동 생성: MLIR‑xDSL 융합 솔루션
초록
본 논문은 MLIR과 파이썬 기반 컴파일러 툴킷 xDSL을 결합해 RISC‑V Vector(RVV) 확장을 위한 고성능 GEMM 마이크로커널을 자동으로 생성하는 방법을 제시한다. 커스텀 dialect와 변환 패스를 구현해 고수준 연산을 RVV 인트린식 C 코드로 낮추고, 실제 K230·BananaPi F3 보드에서 OpenBLAS 대비 10‑35 % 향상된 성능을 입증한다.
상세 분석
이 연구는 현재 MLIR 배포판이 RVV 전용 인트린식 매핑을 지원하지 못한다는 한계를 정확히 진단하고, 그 결함을 메우기 위한 두 단계의 설계 전략을 제시한다. 첫 번째는 xDSL을 이용해 “RVV‑IR”이라 명명한 전용 dialect를 정의하고, 메모리 레퍼런스와 벡터 연산을 명시적으로 모델링한다. 이를 통해 벡터 길이‑불변(vector‑length‑agnostic, VLA) 특성을 IR 수준에서 보존하면서, 다양한 레지스터 폭(vlen)과 데이터 타입에 대한 파라미터화가 가능하도록 설계하였다. 두 번째는 MLIR의 emitc dialect와 xDSL이 생성한 RVV‑IR 사이에 변환 패스(MemRefToEmitCPass, RVVToEmitCPass)를 삽입해, 메모리 할당·해제와 벡터 로드/스토어, FMA 연산을 각각 C 함수 호출 형태의 RVV 인트린식으로 변환한다. 이 과정에서 xDSL의 파이썬 API를 활용해 자동으로 루프 언롤링, 레지스터 할당, 패킹 전략을 탐색하고, 1×1부터 mr×nr까지 모든 가능한 마이크로‑타일 조합을 생성한다는 점이 눈에 띈다.
핵심 기술적 인사이트는 다음과 같다.
- Hybrid IR 흐름: 고수준 MLIR(arith, memref) → xDSL 기반 RVV‑IR → emitc → mlir‑translate → C 코드 순서로, 각 단계에서 최적화와 검증을 독립적으로 수행할 수 있다.
- 벡터‑길이 무관성 유지: RVV‑IR은 vlen 파라미터를 메타데이터로 보관하고, 변환 패스에서 실제 인트린식 호출 시 vlen 값을 삽입함으로써 동일한 IR이 여러 하드웨어에 재사용 가능하도록 만든다.
- 자동 마이크로‑커널 파라미터 탐색: mr, nr, mr·nr 조합을 자동 생성하고, 각 조합에 대해 루프 바디를 xDSL 코드 빌더가 동적으로 구성한다. 이는 기존 hand‑tuned 어셈블리 커널을 대체할 수 있는 포괄적 커버리지를 제공한다.
- C 코드 기반 배포: 최종 산출물은 표준 C 함수 형태이므로, 기존 빌드 체인이나 OpenBLAS와 같은 라이브러리와 손쉽게 연동할 수 있다. 이는 RVV 전용 어셈블리 바이너리를 배포하는 복잡성을 크게 낮춘다.
성능 평가에서는 K230(벡터 레지스터 256‑bit)와 BananaPi F3(512‑bit) 두 실제 보드에서 GEMM 마이크로‑커널을 실행했다. 벤치마크는 정방행렬 GEMM과 BERT‑Large 모델의 Transformer 레이어(행렬 곱) 두 가지 워크로드를 포함한다. 결과는 OpenBLAS 기준 5.1 GFLOPS 대비 최고 12.2 GFLOPS를 기록했으며, 워크로드별 10‑35 % 향상을 보였다. 특히, 벡터 길이가 큰 BananaPi F3에서는 레지스터 활용 효율이 크게 증가해 성능 격차가 확대되었다.
이 논문은 MLIR과 xDSL을 결합함으로써, 기존 컴파일러 인프라가 제공하지 못하던 RVV 전용 코드 생성 파이프라인을 저비용으로 구현하고, 실제 하드웨어에서 경쟁력 있는 성능을 달성했다는 점에서 학술적·실용적 의미가 크다. 또한, 커스텀 dialect와 변환 패스 설계가 다른 도메인(예: ARM SVE, GPU)에도 확장 가능함을 시사한다.
댓글 및 학술 토론
Loading comments...
의견 남기기