| 개발자 | AMD |
|---|---|
| 발표일 | 2016년 11월 14일 |
| 안정화 버전 | |
| 저장소 | 메타 저장소 github |
| 프로그래밍 언어 | C, C++, 파이썬, 포트란, 줄리아 |
| 엔진 | AMDgpu 커널 드라이버, HIPCC, LLVM 기반 컴파일러 |
| 운영 체제 | 리눅스, 윈도우 |
| 플랫폼 | 지원되는 그래픽 처리 장치 |
| 이전 소프트웨어 | 클로즈 투 메탈, 스트림, HSA |
| 크기 | <2 GiB |
| 종류 | GPGPU 라이브러리 및 API |
| 라이선스 | MIT 허가서 |
| 웹사이트 | www |
ROCm은 AMD의 GPU 프로그래밍용 소프트웨어 스택이다. ROCm은 GPGPU, 고성능 컴퓨팅, 이기종 컴퓨팅을 포함한 여러 영역을 포괄한다. 이 스택은 HIP (GPU 커널 기반 프로그래밍), OpenMP (지시자 기반 프로그래밍), OpenCL과 같은 다양한 프로그래밍 모델을 제공한다.
ROCm은 자유 및 오픈 소스 소프트웨어이며(GPU 펌웨어 블롭 제외), 다양한 라이선스 하에 배포된다. 이름은 처음에 'Radeon Open Compute platform'의 약자였으나, Open Compute가 등록 상표임에 따라 더 이상 약자로 기능하지 않는다.
ATI/AMD의 첫 GPGPU 소프트웨어 스택은 클로즈 투 메탈이었으며, 이후 스트림으로 발전했다.
ROCm은 2016년경 GPUOpen의 볼츠만 이니셔티브와 함께 출시되었다. ROCm 스택은 이전의 AMD GPU 스택을 기반으로 하며, 일부 도구는 GPUOpen이나 HSA로 거슬러 올라간다.
2026년 7월, AMD는 ROCm이 6주 단위의 배포 주기를 따를 것이라고 발표했다.
HSAIL은 하드웨어에 구애받지 않는 중간 표현을 생성하여, 적절한 파이널라이저를 사용해 최종 하드웨어(GPU, FPGA 등)로 JIT 컴파일되도록 설계되었다. 이 접근 방식은 ROCm에서 중단되었으며, 현재는 LLVM과 그 LLVM의 AMDGPU 백엔드를 사용하여 GPU 코드만 빌드한다. 다만 LLVM MLIR을 활용한 모듈성 강화 연구는 계속되고 있다.
ROCm 스택은 커널 드라이버부터 최종 사용자 애플리케이션까지의 범위를 포함한다. AMD는 학습 포털을 통해 AMD GCN 하드웨어 및 ROCm 프로그래밍에 관한 입문 영상을 제공한다.
스택과 ROCm/HIP 프로그래밍에 대한 가장 뛰어난 기술적 입문 자료는 현재까지도 레딧(Reddit)에서 찾을 수 있다.
ROCm은 주로 전문 작업용 그래픽 처리 장치를 대상으로 하지만, 동일한 아키텍처를 공유하는 소비자용 GPU나 APU에서도 작동하는 것으로 알려져 있다. 예를 들어, RDNA 2 아키텍처의 모든 전문용 GPU는 ROCm 5.x에서 공식 지원되며, 사용자에 따르면 라데온 6800M APU나 라데온 6700XT GPU 같은 소비자용 RDNA2 제품에서도 작동한다.
| GPU 시리즈 이름 | Southern Islands |
Sea Islands |
Volcanic Islands |
Arctic Islands/Polaris |
Vega | Navi 1X | Navi 2X | Navi 3X | Navi 4X |
|---|---|---|---|---|---|---|---|---|---|
| 출시일 | 2012년 1월 | 2013년 9월 | 2015년 6월 | 2016년 6월 | 2017년 6월 | 2019년 7월 | 2020년 11월 | 2022년 12월 | 2025년 1월 |
| 마케팅 명칭 | 라데온 HD 7000 | 라데온 Rx 200 | 라데온 Rx 300 | 라데온 RX 400/500 | 라데온 RX 베가/라데온 VII(7 nm) | 라데온 RX 5000 | 라데온 RX 6000 | 라데온 RX 7000 | 라데온 RX 9000 |
| AMD 지원 | |||||||||
| 명령어 집합 | GCN 명령어 집합 | RDNA 명령어 집합 | |||||||
| 마이크로아키텍처 | GCN 1세대 | GCN 2세대 | GCN 3세대 | GCN 4세대 | GCN 5세대 | RDNA | RDNA 2 | RDNA 3 | RDNA 4 |
| 유형 | 통합 셰이더 모델 | ||||||||
| ROCm | 5.x 버전에서 환경 변수 필요 | 6.x 버전에서 중단됨 | |||||||
| OpenCL | 1.2 (리눅스: 1.1 (이미지 지원 없음), Mesa 3D 포함) | 2.0 (윈도우 7+의 아드레날린 드라이버) (리눅스: 1.1 (이미지 지원 없음), Mesa 3D 포함; AMD 드라이버 또는 AMD ROCm 포함 시 2.0) |
2.0 | 2.1 | |||||
| Vulkan | 1.0 (윈도우 7+ 또는 메사 17+) |
1.2 (아드레날린 20.1, 리눅스 Mesa 3D 20.0) | 1.3 | ||||||
| 셰이더 모델 | 5.1 | 5.1 6.3 |
6.4 | 6.5 | 6.7 | ||||
| OpenGL | 4.6 (리눅스: 4.6 (Mesa 3D 20.0)) | ||||||||
| Direct3D | 11 (11_1) 12 (11_1) |
11 (12_0) 12 (12_0) |
11 (12_1) 12 (12_1) |
11 (12_1) 12 (12_2) | |||||
/drm/amdgpu |
실험적 | ||||||||
다양한 딥 러닝 프레임워크가 ROCm 백엔드를 지원한다.
ROCm은 TOP500에서 중요한 위치를 차지하고 있다. ROCm은 엑사스케일 슈퍼컴퓨터인 엘카피탠 및 프론티어에 사용된다.
관련 소프트웨어는 AMD Infinity Hub에서 찾을 수 있다.
줄리아는 AMDGPU.jl 패키지를 제공하며, 이 패키지는 LLVM과 통합되어 ROCm 스택의 구성 요소를 선택한다. AMDGPU.jl은 HIP를 통해 코드를 컴파일하는 대신 줄리아의 컴파일러를 사용하여 LLVM IR을 직접 생성하며, 이후 LLVM이 이를 소비하여 네이티브 장치 코드를 생성한다. AMDGPU.jl은 ROCr의 HSA 구현을 사용하여 네이티브 코드를 장치에 업로드하고 실행하는데, 이는 HIP가 자체 생성된 장치 코드를 로드하는 방식과 유사하다.
AMDGPU.jl은 ROCm의 rocBLAS(BLAS용), rocRAND(난수 생성용), rocFFT(FFT용)와의 통합도 지원한다. 향후 rocALUTION, rocSOLVER, MIOpen 및 기타 ROCm 라이브러리와의 통합이 계획되어 있다.
리눅스와 윈도우에 대한 설치 지침은 공식 AMD ROCm 문서에서 제공된다. ROCm 소프트웨어는 현재 여러 공개 깃허브 저장소에 분산되어 있다. 기본 공개 메타 저장소 내에는 각 공식 릴리스에 대한 XML 매니페스트가 존재하며, Git 기반 버전 관리 도구인 git-repo를 사용하는 것이 로컬에서 스택을 동기화하는 권장 방법이다.
AMD는 AMD Infinity Hub 아래에 수집된 과학 연구 애플리케이션을 중심으로 ROCm을 위한 컨테이너화된 애플리케이션을 배포하기 시작했다.
AMD는 다양한 리눅스 배포판에 최적화된 패키지를 배포한다.
ROCm을 패키징하는 타사 생태계가 성장하고 있다.
리눅스 배포판들은 아치 리눅스, 젠투(Gentoo), 데비안, 페도라 리눅스, GNU Guix, NixOS 등 다양한 단계에서 공식적으로 ROCm을 네이티브 패키징하고 있다.
또한 Spack 패키지도 존재한다.
커널 공간 구성 요소인 ROCk 하나와, 약 100여 개의 사용자 공간 모듈로 구성되어 있다.
비공식적인 표기 정책은 ROC는 대문자로, 하위 수준 라이브러리는 소문자(예: ROCt)로, 사용자 대상 라이브러리는 그 반대(예: rocBLAS)로 표기하는 것이다.
AMD는 LLVM 커뮤니티와 적극적으로 개발을 진행하고 있지만, 업스트리밍은 즉각적이지 않으며 2022년 1월 기준으로 여전히 지연되고 있다. AMD는 아직 업스트림되지 않은 부분(독점적으로 남을 컴파일러 최적화, 디버그 지원, OpenMP 오프로딩 등)을 위해 다양한 LLVM 포크를 공식 패키징하고 있다.
LLVM 비트코드로 구현된 지원 라이브러리. 수학 연산, 원자 연산, 시작 매개변수 쿼리, 장치 내 커널 실행 등을 위한 다양한 유틸리티와 기능을 제공한다.
Thunk는 스택에서 발생하는 모든 처리 및 큐잉을 담당한다.
ROC 런타임은 호스트 애플리케이션이 컴퓨트 커널을 실행할 수 있도록 하는 API/라이브러리 세트이다. 이는 HSA 런타임 API에 대한 AMD의 구현이다. ROC 공통 언어 런타임과는 다르다.
ROCm 코드 객체 관리자는 LLVM 중간 표현과의 상호 작용을 담당한다.
공통 언어 런타임은 리눅스의 ROCr 호출과 윈도우의 PAL 호출을 조정하는 간접 레이어이다. 과거에는 HSAIL 컴파일러와 같은 여러 컴파일러 간의 라우팅 기능을 가졌으나, 현재는 상위 간접 레이어(HIP 및 OpenCL)로 흡수되고 있다.
ROCm은 installable client driver (ICD) 로더와 OpenCL 구현을 번들로 제공한다. 2022년 1월 기준으로 ROCm 4.5.2는 OpenCL 2.2를 제공하며 경쟁 기술보다 뒤처져 있다.
AMD GPU를 위한 구현은 HIPAMD라고 불린다. 데모용 CPU 구현도 존재한다.
HIP는 Clang을 래핑하여 LLVM 오픈 AMDGPU 백엔드로 컴파일하거나 NVIDIA 컴파일러로 리디렉션하는 HIPCC 컴파일러를 구축한다.
HIPIFY는 소스 간 컴파일 도구이다. Clang 기반 도구나 sed와 유사한 펄 스크립트를 사용하여 CUDA를 HIP으로, 또는 그 반대로 번역한다.
HIPIFY와 마찬가지로 GPUFORT는 소스 코드를 다른 3세대 언어 소스로 컴파일하여 사용자가 CUDA Fortran에서 HIP Fortran으로 마이그레이션할 수 있게 해준다. 이는 연구 프로젝트의 레퍼토리에도 포함되어 있다.
ROCm 상위 수준 라이브러리는 주로 기계 학습 프레임워크와 같은 애플리케이션 소프트웨어에서 직접 사용된다. 아래 라이브러리의 대부분은 GPU 아키텍처가 뛰어난 성능을 보이는 행렬 곱셈 (GEMM) 범주에 속한다.
이러한 사용자 대상 라이브러리는 대부분 이중 형태로 제공된다. 즉, 엔비디아 하드웨어로 라우팅할 수 있는 간접 레이어인 'hip' 라이브러리와, AMD 구현체인 'roc' 라이브러리로 나뉜다.
rocBLAS와 hipBLAS는 상위 수준 라이브러리의 핵심이며, BLAS에 대한 AMD 구현체이다. 내부적으로 Tensile 라이브러리를 사용한다.
이 라이브러리 쌍은 ROCm을 위한 LAPACK 구현을 구성하며 rocBLAS와 강력하게 결합되어 있다.
ROCm은 엔비디아 CUDA, 인텔 OneAPI와 같은 다른 GPU 컴퓨팅 스택과 경쟁한다.
엔비디아의 CUDA는 폐쇄 소스인 반면, AMD ROCm은 오픈 소스이다. RAPIDS와 같이 폐쇄 소스인 CUDA 기반 위에 구축된 오픈 소스 소프트웨어도 존재한다.
CUDA는 소비자용 GPU에서도 실행할 수 있는 반면, ROCm 지원은 주로 AMD 인스팅트 및 라데온 프로와 같은 전문 하드웨어에 집중되어 있다.
엔비디아는 C/C++ 중심의 프론트엔드와 PTX LLVM GPU 백엔드를 엔비디아 CUDA 컴파일러로 제공한다.
oneAPI 관련 라이브러리는 모두 GitHub 페이지에 공개되어 있다.
Unified Acceleration Foundation (UXL)은 OneAPI 이니셔티브를 계승하여 활동하는 새로운 기술 컨소시엄이다. 작업 그룹과 특별 관심 그룹(SIG)을 통해 새로운 오픈 표준 가속기 소프트웨어 생태계, 관련 오픈 표준 및 사양 프로젝트를 만드는 것을 목표로 한다. 이 목표는 엔비디아의 CUDA와 경쟁하게 될 것이다. 이 컨소시엄에는 인텔, 구글, Arm, 퀄컴, 삼성, Imagination, VMware 등이 참여하고 있다.
ROC_ENABLE_PRE_VEGA
AMD Instinct MI50, Radeon Pro VII, and Radeon VII products (collectively gfx906 GPUs) enters maintenance mode in ROCm 6.0. [...] end of maintenance [EOM] will be aligned with the closest ROCm release [...] Distribution and operating system updates will continue per the ROCm release cadence for gfx906 GPUs until EOM.