코스 개요
CPU/GPU 아키텍처 소개 및 가속화 컴퓨팅
- 이종 컴퓨팅과 CPU-GPU 아키텍처
- CUDA 실행 및 메모리 공간
- nvcc와 CMake를 통한 CUDA C++ 컴파일
- GPU 개발 환경 검증
Thrust와 CUB의 병렬 알고리즘
- GPU 가속화된 정렬, 리듀스(Reduce), 변환(Transform)
- GPU 실행을 위한 STL 알고리즘 리팩토링
- Thrust 디바이스 벡터와 실행 정책
- 맞춤형 파이프라인을 위한 CUB 디바이스 전반의 추상화(Primitives)
GPU 메모리 아키텍처 및 관리
- 글로벌, 컨스턴트, 텍스처 메모리 유형
- 명시적 디바이스 메모리 할당 및 전송
- 단순화된 데이터 접근을 위한 유니파이드 메모리(Unified Memory)
- 메모리 콜레스킹(Memory Coalescing)과 접근 패턴 최적화
CUDA 스트림을 활용한 비동기 실행
- CUDA 스트림 생성 및 관리
- 커널 실행과 데이터 전송의 병렬 처리(Overlapping)
- 종속성 관리를 위한 CUDA 이벤트
- 스트림 우선순위 및 동시성 튜닝
맞춤형 CUDA 커널 작성
- SIMT 프로그래밍 모델과 워프(Warp) 실행
- 커널 레이아웃 설정 및 그리드 스트라이트 루프(Grid-stride Loop)
- 스레드 인덱싱과 다차원 그리드
- 에러 처리와 CUDA 런타임 API 확인
스레드 계층 구조 및 실행 모델
- 디바이스 코드의 그리드, 블록, 스레드
- 워프 레벨 추상화와 ballot 연산
- 블록 레벨 동기화 및 배리어(Barriers)
- 점유율(Occupancy) 및 리소스 활용도 분석
유연한 병렬성을 위한 협력 그룹(Cooperative Groups)
- cooperative_groups API와 그룹 유형
- 스레드 블록 타일과 tiled_partition
- 그리드 레벨 협력 실행(Launches)
- 멀티 그리드 동기화 패턴
공유 메모리 최적화 기술
- 공유 메모리 뱅크와 뱅크 충돌 방지
- 행렬 연산을 위한 타일링 전략
- 사용자가 관리하는 캐시로서의 공유 메모리
- 다차원 뷰를 위한 cuda::shared_memory_mdspan
커널 융합( Kernel Fusion) 및 고급 병렬 패턴
- 레이치 오버헤드 절감을 위한 다중 커널 융합
- 스캔, 키별 리듀스(Reduce-by-key), 세그멘티드 알고리즘
- 원자적 연산과 락 프리(Lock-free) 데이터 구조
- 처리량 향상을 위한 워프 집합 원자적 연산(Warp-aggregated Atomics)
Nsight Systems를 통한 프로파일링 및 최적화
- CPU 및 GPU 활동의 타임라인 분석
- 메모리 전송 병목 현상 식별
- 커널 성능 및 점유율 프로파일링
- Nsight Compute를 통한 반복적 최적화
CUDA 디바이스 코드의 현대적 C++ 기능
- 커널 내 람다, constexpr, auto 사용법
- C++17 병렬 알고리즘 및 실행 정책
- 디바이스 상에서 사용하는 C++20 컨셉(Concepts)과 레인지(Ranges)
- nvcc 및 CCCL 3.x에서의 C++23 지원
CUDA 그래프 및 고급 비동기화
- CUDA 그래프 정의 및 실행
- 스트림 실행 기반 그래프 캡처
- 그래프 업데이트 및 조건부 실행 노드
- 반복적 워크로드를 위한 레이치 지연 시간 단축
기존 애플리케이션을 위한 통합 패턴
- C++ 인터페이스 뒤에서 GPU 코드 래핑하기
- 멀티 GPU 및 NUMA 시스템 관리
- CMake와 CUDA를 통한 빌드 시스템 통합
- cuda-gdb를 사용한 디바이스 코드 디버깅
요약 및 모범 사례
- Thrust, CUB, 맞춤형 커널 중 선택하기
- GPU 아키텍처 간 성능 이식성<\/li>
- CUDA 리소스를 위한 코드 조직화 및 RAII<\/li>
- 향후 학습을 위한 심화 CUDA 학습 경로<\/li>
요건
- 람다 표현식, 템플릿, STL을 포함한 기본 C++ 역량
- 표준 알고리즘, 컨테이너, 반복자에 대한 경험
- 반복문, 조건문, 함수에 대한 숙달
- CUDA 또는 GPU 프로그래밍 지식은 필수 아님
대상 수강생
- GPU를 통해 컴퓨팅 집약형 애플리케이션을 가속화하고자 하는 C++ 개발자
- CPU 전용 환경에서 이종 병렬 프로그래밍으로 전환하는 소프트웨어 엔지니어
- 대규모 데이터셋을 다루는 성능 엔지니어 및 정량가(Quantitative Developer)들
회원 평가 (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++
기계 번역됨