코스 개요
GPU 가속 컴퓨팅 소개
- 이기종 컴퓨팅 및 CPU-GPU 아키텍처 개요
- CUDA 실행 메커니즘과 다양한 메모리 영역
- nvcc와 CMake를 활용한 CUDA C++ 컴파일 방법
- GPU 개발 환경 점검 절차
Thrust 및 CUB을 활용한 병렬 알고리즘
- GPU에서 실행되는 정렬, 축약 연산 및 변환 알고리즘
- STL 기반 알고리즘을 GPU 실행에 맞게 리팩토링하는 방법
- Thrust의 디바이스 벡터와 실행 정책 활용법
- CUB을 이용한 사용자 정의 파이프라인 구현 기본 개념
GPU 메모리 아키텍처 및 관리 방법
- 글로벌, 상수형, 텍스처 메모리의 특성 분석
- 디바이스 메모리의 수동 할당 및 데이터 전송 절차
- Unified Memory를 통한 데이터 접근 간편화 기법
- 메모리 사용 패턴 최적화와 효율적인 액세스 방식
CUDA 스트림을 활용한 비동기 실행
- CUDA 스트림의 생성 및 관리 방법
- 커널 실행과 데이터 전송 과정을 중첩시키는 방식
- CUDA 이벤트를 이용한 작업 간 의존관계 관리
- 스트림 우선순위 지정 및 동시성 튜닝 방법
커스텀 CUDA 커널 작성법
- SIMT 프로그래밍 모델과 워프 단위 실행 구조 이해
- 커널 실행 설정값 및 그리드-스트라이드 루프 활용법
- 다차원 그리드 내 스레드 인덱스 관리 기법
- 오류 처리와 CUDA 런타임 API 점검 절차
스레드 계층 구조 및 실행 모델 이해하기
- 디바이스 코드 내 그리드, 블록, 스레드 관계 파악
- 워프 단위 기본 연산과 배럴리지 작업 활용법
- 블록 단위 동기화와 배리어 설정 방법
- GPU 점유율 및 리소스 사용률 분석 절차
협력적 그룹을 통한 유연한 병렬 처리 기법
- cooperative_groups API의 역할과 다양한 그룹 타입 설명
- 스레드 블록 단위 분할 및 tiled_partition 활용법
- 그리드 단위에서의 협력적 커널 실행 기법
- 다중 그리드 간 동기화 패턴 구현 방법
공유 메모리 최적화 기법
- 공유 메모리 뱅크 개념 및 충돌 회피 방안
- 행렬 연산에 적합한 타일링 전략 활용법
- 사용자가 직접 제어하는 캐시 역할을 하는 공유 메모리 이용법
- cuda::shared_memory_mdspan을 통한 다차원 데이터 접근 방식
커널 융합 및 고급 병렬 패턴 활용하기
- 여러 커널을 하나로 결합해 실행 오버헤드 줄이기
- 스캔 연산, 키 기반 축약 처리 및 분할형 알고리즘 구현법
- 원자적 연산 활용과 잠금 없는 데이터 구조 설계 방법
- 워프 단위 원자적 작업으로 처리량 극대화하는 기법
Nsight Systems를 통한 성능 분석 및 최적화
- CPU와 GPU 활동을 시각화한 타임라인 분석법
- 메모리 전송 병목 지점 식별 기법
- 커널 성능과 점유율 측정 방법 및 그 의미 파악
- Nsight Compute를 활용한 반복적 최적화 절차
CUDA 디바이스 코드에서의 현대적 C++ 기능 적용
- 커널 내 람다 표현식, constexpr, auto 활용법
- C++17 병렬 알고리즘과 실행 정책의 디바이스 적용 가능성
- C++20 개념 및 범위 라이브러리를 디바이스에서 활용하는 방법
- nvcc와 CCCL 3.x에 포함된 C++23 지원 내용 소개
CUDA 그래프와 고급 비동기 처리 기법
- CUDA 그래프의 정의 및 실행 절차 안내
- 스트림 실행 내용을 바탕으로 그래프를 캡처하는 방법
- 그래프 업데이트 및 조건부 실행 노드 관리 기법
- 반복 작업에서 실행 지연 시간을 줄이기 위한 접근 방식
기존 애플리케이션에 GPU 가속 기능 통합 방법
- C++ 인터페이스를 통해 GPU 코드를 외부와 연결하는 방식
- 다중 GPU 및 NUMA 시스템을 효과적으로 관리하는 절차
- CMake와 CUDA 연동을 통한 빌드 시스템 통합 방법
- cuda-gdb를 활용해 디바이스 코드 디버깅하는 법
요약 및 모범 사례 소개
- Thrust, CUB, 커스텀 커널 중 어떤 방식을 선택할지 판단 기준
- 다양한 GPU 아키텍처 간 성능 호환성 유지 방법
- CUDA 리소스 관리에 있어 RAII 패턴 활용법 및 코드 구성 전략
- 향후 학습 방향과 고급 CUDA 관련 자료 소개
요건
- 람다 표현식, 템플릿 및 STL에 대한 기본적인 C++ 역량 필요
- 표준 알고리즘, 컨테이너, 이터레이터 사용 경험 필수
- 반복문, 조건문 및 함수 사용에 익숙해야 함
- CUDA 또는 GPU 프로그래밍에 대한 사전 지식은 요구되지 않음
대상 수강생
- GPU를 활용해 연산 집약적 애플리케이션의 속도를 높이고자 하는 C++ 개발자
- CPU 기반 프로그래밍에서 이기종 병렬 프로그래밍으로 전환하려는 소프트웨어 엔지니어
- 대규모 데이터 세트를 다루는 성능 엔지니어 및 양적 분석 개발자
회원 평가 (3)
세부적인 설명과 매우 미묘한 방식으로 포인트를 재강조하여 지식을 효과적으로 전달했습니다. 로드는 우리가 제기한 이상한 질문들을 다시 확인하고 그 답변이 100% 정확하도록 하는 의지가 있었습니다. 또한, 대체 코딩 스타일의 장단점을 논의하는 데 관심을 보여서, C++를 우리가 의도한 방식으로 사용하는 방법뿐만 아니라 그렇게 해야 하는 이유까지 배울 수 있었습니다.
Nick Dillon - cellxica Ltd
코스 - Using C++ in Embedded Systems - Applying C++11/C++14
기계 번역됨
경험 공유는 선생님의 지식과 가치가 있습니다.
Carey Fan - Logitech
코스 - C/C++ Secure Coding
기계 번역됨
온라인으로 진행된 점 덕분에 많은 시간을 절약할 수 있었습니다. 매우 감사했습니다. 또한 트레이너가 C#과 C++를 모두 알고 있다는 사실이 큰 도움이 되었는데, 이미 우리가 알고 있는 지식을 통해 모든 것을 설명해 주셨기 때문입니다.
Gabor - Rheinmetall Electronics Hungary Kft
코스 - Advanced C++
기계 번역됨