최근 수정 시각 : 2024-11-03 16:02:09

ROCm



||<tablewidth=100%><tablebordercolor=#000><bgcolor=#fff,#000><color=#000,#fff><nopad>
||<tablealign=center><tablebordercolor=#fff,#000><tablebgcolor=#fff,#000> 파일:AMD Radeon 로고.svg파일:AMD Radeon 로고 화이트.svg ||<(>
AMD Radeon Graphics
둘러보기 ||
||
{{{#!wiki style="margin:0 -10px -5px; min-height:calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-5px -1px -11px"
GPU 마이크로아키텍처
TeraScale GCN RDNA UDNA
CDNA
<rowcolor=white> 그래픽 카드 제품군 가속기 제품군
RADEON RX RADEON PRO INSTINCT
드라이버 및 소프트웨어
Radeon Software ROCm GPUOpen
기술
Video Core Next · CrossFire · Eyefinity · FreeSync · Fluid Motion · FidelityFX }}}
}}}}}}

ROCm
Radeon Open Compute platform
파일:AMD ROCm logo.webp
<colbgcolor=#000><colcolor=#fff> 기업 파일:AMD 로고.svg
출시 Linux: 2016년 11월
Windows: 2023년 7월 27일
최신 버전 Linux: 6.0.0 (2023년 12월 15일)
Windows: 5.7.1 (2023년 12월 23일)
플랫폼 파일:Linux 로고.svg파일:Linux 로고 화이트.svg | 파일:Windows 로고.svg파일:Windows 로고 화이트.svg
웹페이지 파일:홈페이지 아이콘.svg홈페이지 | 파일:홈페이지 아이콘.svgWindows 전용

1. 개요2. 역사3. ROCm 스택4. HIP5. 문제점

[clearfix]

1. 개요

파일:ROCM.png

하드웨어배틀의 소개

AMD가 2016년에 발표한 GPGPU 소프트웨어 스택 및 HPC 플랫폼. NVIDIACUDA에 대응된다. 현재 최신 버전은 리눅스 기준 6.0 이다.

XILINX의 XDNA 아키텍처를 사용하는 Ryzen AI 개발은 Ryzen AI 소프트웨어를 사용한다.

발음은 사람마다 다르긴하나 로캠(Rockcam),록햄(Rockham) 등등 어려 발음이 존재한다.

2. 역사

ATI 시절에는 Close to Metal 이라는 GPGPU API가 있었으나 금방 사장되었고, 이후에는 FireStream이라는 전용 그래픽카드[1]를 내놓으며 ATI Stream이라는 SDK를 등장시켰다. 이는 CAL(저수준), Brook+(고수준)의 두 가지 언어로 이루어져 있었다.

이후 2011년부터 ATI APP Software Development Kit의 2.5 버전에서부터 OpenCL을 지원하기 시작하며 다시 사장되었다. 그러나 OpenCL 생태계가 많이 지지부진해지며 AMD는 2015년 11월에 개최된 SC15에서 볼츠만 계획(Boltzmann Initiative)을 발표하였고 이에 따라 # 2016년에 런칭된 플랫폼이 ROCm이다.

2023년 7월 27일, ROCm 5.5에서 드디어 Windows 지원이 추가되었다. 다만 AI에선 다른 프로그램들이 윈도우 상에서 지원하지않아 사실상 미지원이었으나 ZLUDA가 등장하면서 간접적으로나마 지원하게 되었다. 다만 라이센스 개정으로 개발에 제한이 걸리고 여러부분에서 모자른점이 많았다. 그러다가 이번엔 확실하게 라이센스 개정과 같은 위험없이 리눅스 호환 레이어로 구동하는 방법이 나왔다.[2]

3. ROCm 스택

ROCm은 소프트웨어 스택으로 이루어져 있다. GPGPU 코드를 구동하기 위한 HIP 런타임과 컴파일러를 기본으로 가지며 연산 라이브러리인 HIPBLAS, HIPRAND, HIPDNN, HIPFFT 등으로 이루어져 있다.

4. HIP

HIP(Heterogeneous-Compute Interface for Portability)라는 언어를 기반으로 하며, HCC(Heterogeneous Compute Compiler)라는 컴파일러를 사용한다. 기존 시장의 풍부한 생태계를 가진 CUDA를 의식한 듯이 코드의 문법과 사용법이 CUDA와 매우 유사하여 단순 매크로로 재정의만 해도 어지간하면 CUDA코드를 HIP코드로 바꿔 쓸 수 있을 정도이며[3] 이렇게 HIP으로 작성된 코드는 HCC를 사용해 CUDA바이너리 트랜스컴파일을 지원해 기존 CUDA 플랫폼과의 호환성을 갖추었다.

C++의 병렬 코드에서는 HIP 코드로의 변경이 필요하나, Tensorflow, Pytorch, Caffe 프레임워크에서는 기존의 코드를 그대로 사용할수 있도록 배려되어 있다. 심지어 pytorch 에는 cuda 객체도 포함되어 이식성을 높였다.

Windows용 HIP SDK의 경우 PRO Edition 드라이버에 통합된 형태로 제공된다.

5. 문제점

한동안 AMD Instinct가 탑재된 데이터센터 및 슈퍼컴퓨터를 사용하는 기업 및 정부를 대상으로 개발 및 지원이 진행되어서 일반 사용자가 사용하기에는 아직 여러운 점이 있다.

ROCm이 출시된 지 거의 7년 반 동안 Windows를 지원하지 않았다. 비 Linux 환경에서 라데온을 사용해 GPGPU 프로그램을 구동하려는 경우 OpenCL만을 사용할 수밖에 없었다. 그래서 지지부진한 OpenCL 환경과 마찬가지로, 아니 어쩌면 더 시장에서 존재감이 없었다. GPT가 대두된 2023년부터는 AMD의 AI, SW 투자가 대폭 늘어난 덕분에 이전보다는 나아졌다고는 하나, 여전히 갈 길이 멀다는 평가가 많다#1, #2(댓글 참고). 특히 일각에서는 이미 CUDA에 대항하기에는 너무 늦었다는 평가도 있을 정도.
  • 미흡한 문서화와 부실한 개발 지원이 지적된다. 예를 들어 HIP을 컴파일하는 HIPCC는 Perl로 작성되어 있고 Perl 인터프리터를 필요로 하지만 이에 관한 내용을 언급한 곳은 문서 어디에서도 찾아볼 수 없다. 특히 이 때문에 Windows 환경에서 개발하는 경우 HIPCC 펄 스크립트의 버그로 인해 사용이 매우 까다롭다.
  • IL의 부재. NVIDIA의 PTX, OpenCL/SYCL의 SPIR과 같이 바이트코드 컴파일을 통해 호환성을 확보하는 방법이 HIPRTC와 같이 평문 코드를 런타임 환경에서 컴파일하는 방법 외에는 전무하다. 이러한 방식의 단점은 첫 실행시 OpenCL과 마찬가지로 커널을 컴파일 하기 위한 딜레이가 생기며 이는 유저의 실시간 개입이 필요한 프로그램들에서 UX적 단점을 가져오고 평문 코드를 프로그램 어딘가에는 집어 넣어둬야 한다. CUDA와 SYCL이 바이트코드 중간 언어 컴파일을 지원해 최소 지원만 설정한다면 Forward compatibility 도 보장되는 것에 비해 분명한 단점이며 실행 성능을 위해 바이너리 컴파일을 하면 모든 하드웨어에 맞게 컴파일을 해야 하는데 만약 새로운 하드웨어가 출시되었고 이 시점 이전에 컴파일 한 바이너리는 사용하지 못 한다. CUDA, OpenCL, SYCL에도 하드웨어 전용 바이너리를 컴파일 하는 방법이 제공되긴 하지만 이는 여러 선택지중 한가지인 반면 HIP은 이러한 선택지가 없다.
  • 제한적인 하드웨어 지원. 특히 컨슈머 하드웨어에 대한 지원은 매우 빈약하다. 위의 IL 부재와 합쳐져 ROCm 소프트웨어 스택은 선택적인 하드웨어만을 지원하며 디버거도 마찬가지다. ROCm가 따라한 CUDA가 컨슈머용 하드웨어도 차별 없이 지원해 말 그대로 범용적인 성격을 띄고 있는 것에 비해 AMD ROCm은 특정 하드웨어가 아니면 ROCm 스택을 바탕으로 한 소프트웨어를 사용할 수 없다. NVIDIA CUDA의 클론이지만 막상 그 지원은 동급도 아니고 저열하다. RDNA가 탑재된 APU가 발매되기 이전까지 지배적으로 보급된 Vega (gfx90c)조차도 지원 목록에 빠져 있는데 HIP 컴파일러 버그로 인한 사용이 불가한 상황이어도 이를 리포트하면 AMD로 부터 지원하지 않는 하드웨어라 지원을 하지 않는다는 답변만 돌아올 뿐이다.


[1] 그러나 항상 돈이 부족했던 ATi/AMD의 절약 사상 특성상 한가지 칩으로 여러가지 돌려막기를 했었기 때문에 일반 그래픽카드를 사서 드라이버만 바꿔도 FireStream이 되었다. 반면 당시 엔비디아는 같은 아키텍처에서도 다르게 컷한 그래픽 칩을 사용했고, 나중에는 아키텍처 사이에 Volta등의 연산 전용 아키텍처가 등장하기 시작했다. 결국 AMD 또한 RDNA 세대부터 게이밍용 RDNA와 연산용 CDNA를 분리하여 취급한다.[2] 더군다나 컴파일과 같은 과정이 줄어듬으로써 약간의 성능향상이 있었다.[3] CUDA코드의 cu, cuda 심볼 prefix를 hip으로 바꾸기만 해도 어지간하면 컴파일이 된다.


파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 문서의 r32에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r32 (이전 역사)
문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)


파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 문서의 r168에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r168 (이전 역사)
문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)

문서의 r (이전 역사)