컴백부터 K-뷰티까지 — K-컬쳐의 모든 것을 메일로 받아보세요메일로 받아보기

METAL MEDIA

러스트 컴파일러가 직접 GPU 코드를 짤 수 있게 됐다, 안전성 포기 없이

arXiv:2608.137592026-08-17

GPU Offload in Rust: Portable, Safe, and Fast

러스트 컴파일러가 직접 GPU 코드를 짤 수 있게 됐다, 안전성 포기 없이

그동안 GPU 프로그래밍은 빠르지만 위험한 C/CUDA 방식과, 안전하지만 GPU에 못 쓰는 러스트 방식 중 하나를 골라야 했다. 이 논문은 러스트 컴파일러(rustc)와 LLVM에 직접 GPU 오프로드 기능을 심어서, 메모리 안전성을 지키면서도 엔비디아·AMD GPU에서 네이티브 CUDA/HIP 코드와 맞먹는 속도를 내는 방법을 보여준다. RAJAPerf라는 벤치마크로 실측한 결과 커널 실행 속도 자체는 경쟁력이 있었다.

METAL MEDIA 해설 도표

러스트 컴파일러가 직접 GPU 코드를 짤 수 있게 됐다, 안전성 포기 없이

  1. 01자동 데이터 전송(초보자용), 벤더 라이브러리 연동(cuBLAS/rocBLAS), 수동 메모리 제어(전문가용) 세 가지 인터페이스를 제공해 다양한 상황에 대응한다
  2. 02GPU 커널에서 여러 스레드가 같은 메모리를 건드리는 문제를 'Region'이라는 안전 장치로 해결해, 위험한 unsafe 코드 없이도 병렬 처리를 쓸 수 있게 했다
  3. 03호스트(CPU)용 코드와 디바이스(GPU)용 코드를 두 번에 나눠 컴파일하는 '2단계 파이프라인'을 만들어 CPU 전용 명령어가 GPU 코드에 섞이는 문제를 막았다
  4. 04AMD MI250X와 엔비디아 H100/RTX 계열 GPU에서 테스트한 결과 커널 자체의 실행 시간은 CUDA/HIP 대비 경쟁력 있었으나, 전체 실행 시간은 데이터 전송 방식 차이로 32% 빠른 경우부터 46% 느린 경우까지 편차가 있었다
  5. 05최적화 없이 단순하게 구현하면 MI250X에서 최대 400배까지 느려질 수 있어, 논문이 제시한 데이터 전송 최적화가 실질적으로 중요함을 보여줬다
METAL MEDIA이 원문을 바탕으로 재구성한 해설 도표이며, 논문 저자의 원문 figure가 아닙니다.

무엇을 했나

  1. 자동 데이터 전송(초보자용), 벤더 라이브러리 연동(cuBLAS/rocBLAS), 수동 메모리 제어(전문가용) 세 가지 인터페이스를 제공해 다양한 상황에 대응한다
  2. GPU 커널에서 여러 스레드가 같은 메모리를 건드리는 문제를 'Region'이라는 안전 장치로 해결해, 위험한 unsafe 코드 없이도 병렬 처리를 쓸 수 있게 했다
  3. 호스트(CPU)용 코드와 디바이스(GPU)용 코드를 두 번에 나눠 컴파일하는 '2단계 파이프라인'을 만들어 CPU 전용 명령어가 GPU 코드에 섞이는 문제를 막았다
  4. AMD MI250X와 엔비디아 H100/RTX 계열 GPU에서 테스트한 결과 커널 자체의 실행 시간은 CUDA/HIP 대비 경쟁력 있었으나, 전체 실행 시간은 데이터 전송 방식 차이로 32% 빠른 경우부터 46% 느린 경우까지 편차가 있었다
  5. 최적화 없이 단순하게 구현하면 MI250X에서 최대 400배까지 느려질 수 있어, 논문이 제시한 데이터 전송 최적화가 실질적으로 중요함을 보여줬다
Figure 1. Current three-pass implementation pipeline for Rust offloading.
host.o
.text / .rodata
.llvm.offloading
llvm_offload_entries

왜 중요한가

지금까지 슈퍼컴퓨터나 과학 계산 분야는 메모리 버그 위험을 감수하고 C/C++/CUDA를 쓸 수밖에 없었는데, 이 연구는 러스트로도 GPU 고성능 코드를 안전하게 짤 수 있는 길을 열었다. 개발자가 특정 GPU 회사에 종속되지 않고, 안전성과 성능을 동시에 챙길 수 있는 선택지가 생긴 셈이다.

이 논문의 용어

  • noalias · 이 포인터가 다른 포인터와 같은 메모리를 가리키지 않는다는 컴파일러 힌트로, 최적화에 도움을 줌
  • MIR · 러스트 컴파일러 내부에서 사용하는 중간 단계 코드 표현
  • LLVM Offload · CPU에서 GPU로 계산을 넘기는 작업을 처리하는 LLVM 컴파일러의 하부 인프라
  • RAJAPerf · GPU/CPU 성능을 비교 측정하기 위해 쓰이는 벤치마크 모음
  • unsafe 블록 · 러스트가 자동으로 안전성을 검사해주지 않는, 개발자가 직접 책임지는 코드 영역

저자 · linggen

arXiv에서 원문 보기

최신 논문

논문 전체 보기 →

METAL MEDIA 최신 기사