강좌 목록으로 돌아가기
AI024 Professional

ROCm 및 HIP 프로그래밍 소개: 실용적인 튜토리얼

ROCm 및 HIP 프로그래밍에 대한 실용적이고 현대적인 안내서입니다. 전체 소프트웨어 스택, 설치, 빌드 워크플로우, 커널 프로그래밍, 메모리 관리, 성능 엔지니어링, 라이브러리 사용, CUDA 마이그레이션, 그리고 생산 환경에서의 디버깅 방법을 다룹니다.

5.0
30.0h
361 학생들
0 좋아요
인공지능
수강 시작하기

강좌 개요

📚 콘텐츠 요약

ROCm 및 HIP를 활용한 실용적이고 최신 기술 중심의 AMD GPU 프로그래밍 안내서입니다. 전체 소프트웨어 스택, 설치, 빌드 워크플로우, 커널 프로그래밍, 메모리 관리, 성능 엔지니어링, 라이브러리 사용, CUDA 포팅, 그리고 생산 환경에서의 디버깅 실천 방법을 다룹니다.

이 기술적 심층 분석을 통해 AMD GPU 프로그래밍과 CUDA에서 HIP로의 이식성을 완전히 마스터하세요.

저자: EvoClass

감사의 말: AMD 공식 ROCm 및 HIP 문서 기반(예: ROCm, HIP, ROCm LLVM 등)

🎯 학습 목표

  1. HIP와 그가 ROCm 생태계 내에서 맡는 역할을 한 문장으로 정의하라.
  2. ROCm(플랫폼), HIP(인터페이스), ROCm 라이브러리(구성 요소) 간의 차이점을 구분하라.
  3. 하드웨어부터 애플리케이션 프레임워크까지의 계층적 구조를 포함해 ROCm 아키텍처의 계층을 식별하라.
  4. 다양한 운영 체제에서 HIP SDK와 ROCm 플랫폼 간의 관계를 정의하라.
  5. 지원 매트릭스 확인 및 설치 후 경로 설정을 포함한 체계적인 설치 워크플로우를 실행하라.
  6. 일반적인 드라이버 및 환경 접근 문제를 진단하기 위한 최소한의 검증 프로그램을 컴파일하고 실행하라.
  7. 소스 코드 이식성과 아키텍처에 특화된 성능 간의 조화를 이루기 위해 견고한 빌드 전략이 필수적임을 이해하라.
  8. CUDA의 삼중 꺾쇠 괄호 구문 대신 hipLaunchKernelGGL 매크로를 사용하여 이식 가능한 커널 시작을 구현하라.
  9. 특정 ROCm 아키텍처를 타겟으로 하고 외부 라이브러리 종속성을 관리하는 생산 수준의 CMake 프로젝트를 구성하라.
  10. HIP 커널의 구조를 정의하고 스레드 인덱싱을 위한 기본 실행 공식을 적용하라.

🔹 수업 1: ROCm 및 HIP 아키텍처 소개

개요: 본 수업은 ROCm 플랫폼과 HIP 프로그래밍 언어에 대한 기초적인 개요를 제공합니다. 전체 ROCm 스택, HIP 인터페이스, 고급 라이브러리 간의 관계를 명확히 하고, CUDA에서 AMD로의 이식 가능성과 성능 엔지니어링에 대해 현실적인 기대를 설정합니다.

학습 결과:

  • HIP와 그가 ROCm 생태계 내에서 맡는 역할을 한 문장으로 정의하라.
  • ROCm(플랫폼), HIP(인터페이스), ROCm 라이브러리(구성 요소) 간의 차이점을 구분하라.
  • 하드웨어부터 응용 프레임워크까지의 계층적 구조를 포함해 ROCm 아키텍처의 계층을 식별하라.

🔹 수업 2: 설치 및 환경 설정

개요: 본 수업은 GPU 개발자 및 HPC 엔지니어가 리눅스 및 윈도우 플랫폼에서 HIP 호환 환경을 설정하는 데 필요한 핵심 전략을 안내합니다. "플랫폼 현실" 접근 방식을 강조하며, 구조화된 설치 워크플로우를 진행하기 전에 하드웨어/소프트웨어 호환성을 반드시 확인해야 함을 강조하고, hipcc 컴파일러를 사용한 최종 검증을 수행합니다.

학습 결과:

  • 다양한 운영 체제에서 HIP SDK와 ROCm 플랫폼 간의 관계를 정의하라.
  • 지원 매트릭스 확인 및 설치 후 경로 설정을 포함한 체계적인 설치 워크플로우를 실행하라.
  • 일반적인 드라이버 및 환경 접근 문제를 진단하기 위한 최소한의 검증 프로그램을 컴파일하고 실행하라.

🔹 수업 3: 빌드 툴체인: hipcc 및 프로젝트 구조

개요: 본 수업은 AMD 하드웨어에서 HIP 애플리케이션을 개발하기 위한 필수 툴체인과 조직 전략을 탐색합니다. hipcc 드라이버를 사용한 단순 명령줄 빌드에서 시작해, CMake를 활용한 전문적이고 생산 가능한 프로젝트 구성으로 전환합니다. 주요 초점은 이식 가능한 커널 시작 매크로, 아키텍처별 최적화, 그리고 소스 수준의 이식성과 바이너리 성능 사이의 근본적인 차이점입니다.

학습 결과:

  • 소스 코드 이식성과 아키텍처에 특화된 성능 간의 조화를 이루기 위해 견고한 빌드 전략이 필수적임을 이해하라.
  • CUDA의 삼중 꺾쇠 괄호 구문 대신 hipLaunchKernelGGL 매크로를 사용하여 이식 가능한 커널 시작을 구현하라.
  • 특정 ROCm 아키텍처를 타겟으로 하고 외부 라이브러리 종속성을 관리하는 생산 수준의 CMake 프로젝트를 구성하라.

🔹 수업 4: HIP 프로그래밍 모델 및 커널 개발

개요: 본 수업은 HIP 커널의 기본 아키텍처를 탐구하며, 논리적 문제에서 하드웨어 실행으로 작업을 매핑하는 그리드와 블록을 중심으로 설명합니다. 견고한 GPU 프로그래밍을 위한 블루프린트를 제공하며, 필수 실행 공식, 성능 저하 원인(메모리 대비 계산), 그리고 생산 가능 코드를 위한 오류 처리 및 동기화의 필수 구현을 다룹니다.

학습 결과:

  • HIP 커널의 구조를 정의하고 스레드 인덱싱을 위한 기본 실행 공식을 적용하라.
  • 그리드 및 블록 크기를 효과적으로 구성하고, 최적의 처리량을 찾기 위해 벤치마킹을 구현하라.
  • 견고한 오류 처리 매크로를 구현하고, 장치-호스트 상호작용을 관리하기 위해 동기화 의미를 적용하라.

🔹 수업 5: 메모리 관리 및 데이터 패턴

개요: 본 수업은 GPU 프로그래밍의 중심 축인 메모리 관리를 집중적으로 다룹니다. 메모리 유형(페이지 가능, 핀, 장치, 관리형)의 분류, 데이터 전송 메커니즘의 성능 영향, 특히 공유(coalescing)가 최고 성능 달성에 결정적인 역할을 한다는 점을 설명합니다. 학생들은 관리형 메모리의 편의성과 고성능 HPC 애플리케이션에서 요구되는 명시적 제어 사이의 균형을 배웁니다.

학습 결과:

  • 페이지 가능 메모리와 핀 메모리의 차이점을 구분하고, 최적의 전송 속도를 위해 각각의 사용 시기를 식별하라.
  • HIP API(hipMalloc, hipHostMalloc, hipMallocManaged)를 사용하여 장치 메모리 할당 및 통합/관리형 메모리 구현하라.
  • 메모리 접근 패턴을 분석하여 공유된 접근을 보장하고, 스트라이드 접근과 같은 성능 저하 원인을 피하라.

🔹 수업 6: 스트림, 이벤트 및 비동기 실행

개요: 본 수업은 개발자가 동기적 프로그래밍 모델에서 동시 실행 사고방식으로 전환하도록 돕습니다. HIP 스트림과 이벤트를 활용해 GPU 활용도를 극대화하는 방법을 다룹니다. 청크 기반 파이프라인을 통해 데이터 전송과 커널 실행을 겹치는 기계적 메커니즘을 설명하고, 스트림 캡처와 명시적 그래프 생성 간의 트레이드오프를 소개합니다. 또한, 그래프 안정성, 고정밀 타이밍 등의 중요한 생산 환경 고려사항을 강조합니다.

학습 결과:

  • 비동기 실행과 동시 스트림이 동기 실행보다 성능상 우월함을 식별하라.
  • 호스트-디바이스 통신과 커널 계산을 겹치기 위해 청크 기반 파이프라인을 구현하라.
  • 스트림 캡처와 명시적 그래프 생성 간의 차이점을 이해하고, 런타임 오버헤드를 줄이는 데 활용하라.

🔹 수업 7: AMD GPU에서의 성능 엔지니어링

개요: 본 수업은 AMD 하드웨어에서 소프트웨어를 최적화하기 위한 과학적 프레임워크를 제시하며, 추측 기반의 접근을 넘어 체계적이고 측정 기반의 방법론으로 전환합니다. 컴퓨팅 유닛, 웨이브프론트, 레지스터 압박 간의 아키텍처적 관계를 다루며, rocprofv3를 이용한 프로파일링 및 견고한 벤치마킹 뼈대 구현을 위한 실용적인 방법론을 제공합니다.

학습 결과:

  • 성능 저하 요인을 식별하고 해결하기 위한 6단계의 HIP 최적화 워크플로우를 구현하라.
  • 레지스터 압박과 옥류율(occupancy) 사이의 트레이드오프를 분석하여 하드웨어 활용도를 극대화하라.
  • 하드웨어 이벤트를 사용하고 다중 반복 벤치마킹 최선의 실천 방법을 통해 정확한 성능 측정을 수행하라.

🔹 수업 8: ROCm 라이브러리 생태계

개요: 본 수업은 “라이브러리 우선” 엔지니어링 철학을 소개하며, 자체 커널 개발보다는 고성능 사전 구축 라이브러리를 우선적으로 활용하도록 권장합니다. ROCm 라이브러리 스택(수학, FFT, 기초 연산, ML/AI)의 분류를 다루고, 이식성 요구사항과 성능 필요에 따라 hip* 인터페이스와 AMD 네이티브 roc* 구현 간의 선택 기준을 제시합니다. 또한, 라이브러리가 HIP 그래프 캡처 워크플로우에 통합될 때 요구되는 “그래프 안정성”의 중요성도 탐구합니다.

학습 결과:

  • “라이브러리 우선” 엔지니어링 원칙을 적용하여 사전 검증된 기초 연산을 자체 커널보다 우선적으로 사용하는 근거를 제시하라.
  • 이식성 요구사항과 성능 필요에 따라 hip* 라이브러리와 roc* 라이브러리의 차이점을 구분하라.
  • ROCm 라이브러리를 기능 도메인(수학, FFT, 기초 연산, ML/AI)에 따라 분류하라.

🔹 수업 9: CUDA 애플리케이션을 HIP로 포팅하기

개요: 본 수업은 CUDA 소스 코드를 이식 가능한 HIP C++ 프레임워크로 체계적으로 전환하는 방법을 다룹니다. hipify-perlhipify-clang과 같은 자동화 도구를 사용한 점진적 포팅 워크플로우를 실행하고, 하드웨어에 특화된 warpSize 가정과 같은 핵심 이식성 함정을 식별하며, 이식 후 성능 및 정확성 비교를 위한 엄격한 검증 절차를 구현하는 방법을 배웁니다.

학습 결과:

  • 디버깅 부담을 최소화하기 위한 6단계 점진적 포팅 워크플로우를 실행하라.
  • 소스 코드 복잡성에 따라 적절한 자동 번역 도구(hipify-perl vs. hipify-clang)를 선택하고 적용하라.
  • warpSize 및 기계적 번역 오류와 관련된 아키텍처 민감한 "이식성 함정"을 식별하고 해결하라.

🔹 수업 10: 디버깅, 테스팅 및 생산 실천 방법

개요: 본 수업은 ROCm 플랫폼에서 GPU 커널을 개발에서 생산 환경으로 전환하는 데 필수적인 도구와 방법론을 다룹니다. 오류 탐지에 대한 ROCgdb 및 AddressSanitizer의 사용을 상세히 설명하고, 엄격한 4계층 테스팅 전략을 수립하며, 커널 정확성과 성능 안정성을 보장하기 위한 생산용 체크리스트를 제공합니다.

학습 결과:

  • ROCgdb, ltrace, AddressSanitizer를 사용하여 GPU 코드 내의 소스 수준 버그 및 메모리 접근 오류를 식별하라.
  • 헬퍼 검증, 커널 정확성, 극단적 경우, 성능 저하를 모두 검증하기 위한 4계층 테스팅 전략을 구현하라.
  • 커널 인터페이스, 문서화, 환경 기반 디버깅을 관리하기 위한 생산 코드 패턴 및 체크리스트를 적용하라.