러스트 컴파일러가 직접 GPU 코드를 짤 수 있게 됐다, 안전성 포기 없이
러스트 컴파일러가 직접 GPU 코드를 짤 수 있게 됐다, 안전성 포기 없이
그동안 GPU 프로그래밍은 빠르지만 위험한 C/CUDA 방식과, 안전하지만 GPU에 못 쓰는 러스트 방식 중 하나를 골라야 했다. 이 논문은 러스트 컴파일러(rustc)와 LLVM에 직접 GPU 오프로드 기능을 심어서, 메모리 안전성을 지키면서도 엔비디아·AMD GPU에서 네이티브 CUDA/HIP 코드와 맞먹는 속도를 내는 방법을 보여준다. RAJAPerf라는 벤치마크로 실측한 결과 커널 실행 속도 자체는 경쟁력이 있었다.
METAL MEDIA 해설 도표
러스트 컴파일러가 직접 GPU 코드를 짤 수 있게 됐다, 안전성 포기 없이
- 01자동 데이터 전송(초보자용), 벤더 라이브러리 연동(cuBLAS/rocBLAS), 수동 메모리 제어(전문가용) 세 가지 인터페이스를 제공해 다양한 상황에 대응한다
- 02GPU 커널에서 여러 스레드가 같은 메모리를 건드리는 문제를 'Region'이라는 안전 장치로 해결해, 위험한 unsafe 코드 없이도 병렬 처리를 쓸 수 있게 했다
- 03호스트(CPU)용 코드와 디바이스(GPU)용 코드를 두 번에 나눠 컴파일하는 '2단계 파이프라인'을 만들어 CPU 전용 명령어가 GPU 코드에 섞이는 문제를 막았다
- 04AMD MI250X와 엔비디아 H100/RTX 계열 GPU에서 테스트한 결과 커널 자체의 실행 시간은 CUDA/HIP 대비 경쟁력 있었으나, 전체 실행 시간은 데이터 전송 방식 차이로 32% 빠른 경우부터 46% 느린 경우까지 편차가 있었다
- 05최적화 없이 단순하게 구현하면 MI250X에서 최대 400배까지 느려질 수 있어, 논문이 제시한 데이터 전송 최적화가 실질적으로 중요함을 보여줬다
무엇을 했나
- 자동 데이터 전송(초보자용), 벤더 라이브러리 연동(cuBLAS/rocBLAS), 수동 메모리 제어(전문가용) 세 가지 인터페이스를 제공해 다양한 상황에 대응한다
- GPU 커널에서 여러 스레드가 같은 메모리를 건드리는 문제를 'Region'이라는 안전 장치로 해결해, 위험한 unsafe 코드 없이도 병렬 처리를 쓸 수 있게 했다
- 호스트(CPU)용 코드와 디바이스(GPU)용 코드를 두 번에 나눠 컴파일하는 '2단계 파이프라인'을 만들어 CPU 전용 명령어가 GPU 코드에 섞이는 문제를 막았다
- AMD MI250X와 엔비디아 H100/RTX 계열 GPU에서 테스트한 결과 커널 자체의 실행 시간은 CUDA/HIP 대비 경쟁력 있었으나, 전체 실행 시간은 데이터 전송 방식 차이로 32% 빠른 경우부터 46% 느린 경우까지 편차가 있었다
- 최적화 없이 단순하게 구현하면 MI250X에서 최대 400배까지 느려질 수 있어, 논문이 제시한 데이터 전송 최적화가 실질적으로 중요함을 보여줬다
| 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 블록 · 러스트가 자동으로 안전성을 검사해주지 않는, 개발자가 직접 책임지는 코드 영역
최신 논문
- AI 코딩 에이전트에게 과학 소프트웨어 수리를 시켜보니, 절반도 제대로 못 고쳤다AI 코딩 에이전트에게 과학 소프트웨어 수리를 시켜보니, 절반도 제대로 못 고쳤다
- 논문 속 시연이 아니라 실제 서비스에 넣을 수 있는 희소 어텐션 만들기논문 속 시연이 아니라 실제 서비스에 넣을 수 있는 희소 어텐션 만들기
- 고객상담 AI 상담원이 규정을 '한 번의 행동'이 아니라 '전체 절차'로 지키게 만드는 방법고객상담 AI 상담원이 규정을 '한 번의 행동'이 아니라 '전체 절차'로 지키게 만드는 방법
- 로봇 팔에게 사람의 시연 없이 새 일 시키기, 말 잘하는 AI가 대신 가르친다로봇 팔에게 사람의 시연 없이 새 일 시키기, 말 잘하는 AI가 대신 가르친다
- 에이전트 학습용 환경을 새로 만드는 대신, 기존 환경에 '패치 부품'을 씌워 그 에이전트의 약점에 맞게 바꾸는 방법에이전트 학습용 환경을 새로 만드는 대신, 기존 환경에 '패치 부품'을 씌워 그 에이전트의 약점에 맞게 바꾸는 방법
- AI 모델을 '소유'하지 못한 조직은 안전 통제도 절반밖에 못 한다AI 모델을 '소유'하지 못한 조직은 안전 통제도 절반밖에 못 한다
- AI가 선생님 모델을 따라 배우다가, 정답에 다가가는 '좋은 생각'까지 억누르는 문제를 잡아낸다AI가 선생님 모델을 따라 배우다가, 정답에 다가가는 '좋은 생각'까지 억누르는 문제를 잡아낸다
- AI가 특정 사람 말투를 흉내내도록 시켜봤더니, 결국 AI 자신의 말투에서 못 벗어난다AI가 특정 사람 말투를 흉내내도록 시켜봤더니, 결국 AI 자신의 말투에서 못 벗어난다