채널톡 아이콘

CUDA 프로그래밍 입문

GPGPU는 더 이상 낯선 기술이 아닙니다. 과거부터 과학 계산, 시뮬레이션, 그래픽 처리 등 다양한 분야에서 활용되어 왔으며, 오늘날에는 AI 기술의 성능을 결정짓는 핵심 기반으로 자리 잡았습니다. 이러한 흐름 속에서 GPU 프로그래밍 능력은 개발자의 역량을 한 단계 확장시키는 강력한 도구가 됩니다. CPU 중심의 개발을 넘어, 대규모 병렬 연산을 직접 다룰 수 있다는 것은 곧 새로운 문제 해결 방식과 더 넓은 개발 가능성을 의미합니다. 본 강의는 GPGPU의 사실상 표준이라 할 수 있는 CUDA 프로그래밍을 기초부터 실전까지 체계적으로 다룹니다. GPU 구조 이해, 병렬 프로그래밍 모델, 메모리 최적화, 커널 작성 등 실무에 바로 적용 가능한 내용을 중심으로 구성하여, 수강 후에는 스스로 GPU 기반 프로그램을 설계하고 구현할 수 있는 수준을 목표로 합니다.

11명 이 수강하고 있어요.

난이도 중급이상

수강기한 무제한

cuda
cuda
gpu-programming
gpu-programming
cuda
cuda
gpu-programming
gpu-programming
구글
배달의민족
네이버

네이버

에 관심있는 사람들도 듣는 중!

구글
배달의민족
네이버

네이버

에 관심있는 사람들도 듣는 중!

수강 후 이런걸 얻을 수 있어요

  • CUDA 병렬 프로그래밍 능력 - GPU 스레드 구조, 메모리 계층, 커널 실행 모델을 이해하고 직접 CUDA 커널을 작성할 수 있게 됩니다.

  • CPU 대비 수십~수백 배 빠른 연산 가속 코드 - 벡터 연산, 행렬 곱셈 등 실제 연산을 GPU로 가속하는 프로그램을 작성하여 성능 차이를 직접 확인할 수 있습니다.

CUDA로 확장하는 개발 역량, GPU 프로그래밍의 시작C/C++ 개발자를 위한 GPGPU 입문 강의

GPU 프로그래밍은 더 이상 특별한 분야의 전유물이 아닙니다. 이제는 AI, 시뮬레이션, 영상 처리, 과학 계산 등 거의 모든 영역에서 GPU가 핵심 역할을 맡고 있으며, 이를 다룰 수 있는 능력은 개발자의 경쟁력을 크게 확장시키는 강력한 무기가 됩니다. C/C++ 경험은 있지만 GPU 프로그래밍이 낯설어 선뜻 시작하지 못했던 개발자를 위해 본 강의를 준비하였습니다. CUDA의 기본 개념부터 GPU 구조 이해, 병렬 프로그래밍 모델, 메모리 최적화, 커널 작성, 스트림 활용, 이미지 처리까지 실전 중심으로 다루며, 수강 후에는 스스로 GPU 기반 프로그램을 설계하고 구현할 수 있을 것입니다.

이런 내용을 배워요

1. CUDA개요

GPU가 그래픽 전용 장치에서 범용 연산을 수행하는 GPGPU로 발전해 온 흐름을 살펴보고, CUDA 프로그래밍을 이해하는 데 필요한 핵심 하드웨어·소프트웨어 개념을 전체적으로 설명합니다. GPU 구조, 병렬 처리 방식, CUDA 실행 모델 등 이후 실습을 위한 기초를 가볍게 다룹니다.


2. 설치 및 환경 설정

CUDA 개발을 시작할 때 가장 많이 겪는 어려움이 바로 초기 환경 설정입니다. 이 챕터에서는 CUDA Toolkit 설치부터 컴파일러 설정, IDE 구성까지 개발에 필요한 전체 환경을 단계적으로 정리합니다. 이후 챕터의 예제를 실행하고 디버깅할 수 있는 실전 개발 환경을 구축하는 방법을 설명합니다.


3. cuda 프로그래밍 기본

CUDA 프로그램이 동작하는 기본 흐름을 설명합니다. CUDA환경 초기화와 종료 처리 과정을 살펴보고 host memory → device memory 복사, 커널 실행, device memory → host memory 복사로 이어지는 전체 실행 구조를 단계적으로 설명합니다. 또한 CUDA 커널 호출 방식, 핵심 CUDA API 사용법 등 이후 실습의 기반이 되는 필수 개념들을 정리합니다.


4. Global Memory Coalescing

GPU 성능 최적화의 핵심 요소인 global memory coalescing 개념을 다룹니다. 스레드들이 글로벌 메모리에 접근할 때 하드웨어적으로 어떤 방식으로 요청이 병합(coalesce)되는지 설명하고, 최적의 접근 패턴과 최악의 패턴이 어떤 차이를 만드는지 실제 시나리오를 통해 비교합니다. 또한 메모리 접근 성능을 극대화하기 위한 데이터 배치 전략과 스레드 구성 방법을 정리하여, 효율적인 CUDA 커널을 작성하기 위한 필수 최적화 기법을 설명합니다.


5. Thread Co-op within a Block

블록 내부에서 스레드들이 어떻게 협업하며 더 높은 성능을 이끌어낼 수 있는지를 다룹니다. Shared Memory를 활용해 블록 단위로 데이터를 효율적으로 공유하는 방법을 설명하고, 이어서 warp level intrinsic을 사용해 워프 내부 스레드 간 협업을 수행하는 기법을 소개합니다. 이러한 두 가지 협업 방식을 조합해 보다 최적화된 CUDA 커널을 작성하는 전략을 다루며, 실제 예제로 warp-level reductionblock-level reduction을 활용해 최소값을 찾는 과정을 구현해 봅니다.


6. Shared Memory - MatrixTranspose

CUDA에서 행렬을 전치(transpose)하는 과정을 통해 Shared Memory 활용의 핵심 개념을 익힙니다. 전치 연산에서 자주 발생하는 비효율적인 글로벌 메모리 접근 패턴과 그로 인한 성능 저하 사례를 살펴보고, Shared Memory를 사용해 메모리 접근을 최적화하는 방법을 설명합니다. 또한 Shared Memory에서 발생할 수 있는 bank conflicts 문제를 해결하는 기법을 다루며, 행렬 전치 예제를 통해 Shared Memory를 효과적으로 사용하는 실전 전략을 배울 수 있습니다.


7. Shared Memory - MatrixMultiply

행렬 전치(Transpose) 예제에 이어, Shared Memory를 더욱 효과적으로 활용하는 방법을 행렬 곱셈(Matrix Multiplication) 사례를 통해 다룹니다. CUDA에서 대규모 행렬 곱셈을 처리하는 기본 구조를 설명하고, 큰 행렬을 작은 타일(tile) 단위의 부분 행렬로 분할해 연산하는 기법을 소개합니다. 또한 행렬 전치와 유사하면서도 다른 행렬 곱셈의 메모리 접근 패턴을 비교하며, Shared Memory를 활용해 메모리 접근 병목을 줄이고 성능을 극대화하는 전략을 다룹니다.


8. Occupancy

메모리 접근 최적화가 아닌 warp 스케줄링 관점에서 GPU 성능을 끌어올리는 방법을 다룹니다. occupancy가 무엇인지, 그리고 GPU가 얼마나 많은 warp를 동시에 실행할 수 있는지가 왜 중요한지 설명합니다. occupancy를 높이기 위한 스레드 구성, 레지스터 사용량, Shared Memory 사용량 조절 전략을 살펴보고, occupancy가 높을 때 성능이 잘 나오는 경우높아도 오히려 성능이 떨어지는 경우를 비교합니다.


9. cuda Stream

CUDA에서 비동기 실행을 가능하게 하는 cuda stream의 개념을 다룹니다. 기본적으로 모든 CUDA 프로그램에서 암묵적으로 사용되는 default stream의 동작 방식을 먼저 이해한 뒤, 여러 stream을 활용해 연산과 메모리 복사를 겹쳐 실행함으로써 전체 성능을 향상시키는 방법을 설명합니다. 또한 Nsight Systems를 사용해 스트림 기반 비동기 실행이 실제로 어떤 성능 이점을 제공하는지 분석합니다.


10. Image Filter

이미지 프로세싱에서 널리 사용되는 커널 필터(kernel filter) 개념을 소개하고, Gaussian 필터와 Laplacian 필터를 CUDA로 직접 구현하여 GPU 기반 이미지 처리 기본기를 배워봅니다.
Texture Memory와 Shared Memory를 활용해 메모리 접근 효율을 높이는 방법을 설명하고, 동일한 알고리즘을 다양한 메모리 구조로 구현했을 때 실제 하드웨어에서 어떤 성능 차이가 발생하는지 비교 분석합니다.


11. Image Histogram

이미지의 픽셀 분포를 분석하는 히스토그램(histogram)을 CUDA로 구현하며, 병렬 환경에서의 데이터 누적 방식과 그에 따른 성능 이슈를 다룹니다. CUDA에서 히스토그램을 계산하는 기본 구조를 살펴보고, 이 과정에서 필수적으로 등장하는 atomic operation의 동작 원리와 성능 저하 문제를 설명합니다. 이어서 Shared Memory와 warp intrinsic을 활용해 atomic 연산의 병목을 줄이고, 보다 효율적인 히스토그램 계산 커널을 작성하는 최적화 기법을 다룹니다.


12. CUDA-D3D12 interop

Direct3D 12 렌더링 파이프라인과 CUDA를 결합해 GPU 그래픽스와 GPGPU 연산을 동시에 활용하는 방법을 다룹니다. 간단한 D3D12 게임 프레임워크의 Render Target과 Depth Buffer를 CUDA 리소스로 맵핑하고 D3D12의 Timeline과 CUDA의 Timeline을 동기화 하는 방법을 설명합니다.
예제코드는 CUDA 리소스로 맵핑한 텍스처들을 입력으로 받아 Gaussian Blur, 외곽선 추출, 노멀 맵 렌더링, 깊이값 시각화 등 다양한 이미지 프로세싱을 적용해 최종 화면으로 출력하는 기능을 구현합니다.


수강 전 참고 사항

실습 환경

  • 운영 체제 및 버전(OS): Windows 10/11

  • 사용 도구: Visual Studio 2026

  • cuda Toolkit 13.2

  • nvidia GPU


학습 자료

  • pdf 제공

  • 첨부파일을 통한 소스코드 제공

선수 지식

  • 필수

    • C/C++

    • 기초적인 Windows 프로그래밍

  • 권장(다음의 강의들이 도움이 될 수 있습니다.)

유의사항

  • GTX1600번대 이상의 그래픽카드가 필요합니다.

  • GTX1000번대 그래픽 카드에서도 예제를 실행할 수 있으나 프로젝트 설정을 약간 수정해야 합니다. 수정 방법은 '설치 및 개발환경 설정' 챕터에서 다룹니다.

  • CUDA 13.3 이상 최신 CUDA Toolkit사용도 가능합니다. 역시 프로젝트 설정을 약간 수정해야 합니다. 수정방법은 '설치 및 개발환경 설정' 에서 다룹니다.

  • ai기술을 다루지는 않습니다. 행렬곱이나 커널 필터 적용은 ai기술과 관련이 있으나 직접적으로 ai기술을 다루지는 않습니다.


이런 분들께
추천드려요

학습 대상은
누구일까요?

  • 그래픽스 경험이 없어서 GPU 프로그래밍에 두려움이 있지만 병렬 연산을 활용해보고 싶은 프로그래머

  • AI·시뮬레이션·과학 계산을 직접 가속해보고 싶은 개발자

선수 지식,
필요할까요?

  • C/C++

  • Visual Studio를 이용한 기초적인 Windows 프로그래밍

안녕하세요
megayuchi입니다.

인프런인증

커리어인증

3,307

수강생

95

수강평

22

답변

5.0

강의 평점

11

강의

프로그래머

C++,x86/x64 ASM, DirectX9/11/12, Metal, OpenGL, CUDA, win32, winsock/bsd socket

 

인프런 강의

D3D12프로그래밍 기초편 - https://inf.run/7gJhS

D3D12프로그래밍 기초플러스 - https://inf.run/itHDW

DirectX Raytracing 프로그래밍 - https://inf.run/cQqx7

Windows System 프로그래밍 - https://inf.run/AwfCv

Windows 디버깅 팁 - https://inf.run/zL7E4

 

블로그 : https://megayuchi.com

Youtube : https://youtube.com/megayuchi

LinkedIn : https://www.linkedin.com/in/megayuchi/

 

 

더보기

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!

megayuchi님의 다른 강의

지식공유자님의 다른 강의를 만나보세요!

비슷한 강의

같은 분야의 다른 강의를 만나보세요!

신규가입 25% 할인

월 ₩33,000

5개월 할부 시

25%

₩220,000

₩165,000