C++ 복습
CUDA를 배우기 전 확인
CUDA를 활용할 수 있는 언어는 Python 등이 있지만, 가장 활용성이 높은 언어는 역시 C++입니다. GPU 하드웨어에 가깝게 동작해야 하기 때문에, Low Level을 다루는 C, C++을 사용하는 것이 효율적입니다.
C++이 어렵다고 느끼실 수 있지만, CUDA를 배우기 위해 필요한 내용은 생각보다 많지 않습니다. 극단적으로 말하면 class
의 개념을 깊이 이해하지 못해도 CUDA 프로그래밍이 가능합니다.
C++ 선수지식
기본 문법
C++, C에서 필요한 가장 간단한 기본 문법은 알고 있어야 합니다. 가장 기본적인 문법으로는 for 루프와 if 문이 있습니다.
for(int i=0 ; i < 10 ; i++)
{
if(i==5)
{
break;
}
}
이 정도는 개발을 하시는 분들이라면 익숙하실 거라고 생각합니다.
메모리 배열
CUDA는 많은 양의 데이터를 다루기 때문에, 메모리 개념을 어느 정도는 잘 알고 있어야 합니다. 많은 양의 데이터를 다룰 때 우리는 보통 Array(배열)를 사용합니다. 예를 들어:
int scores[5] = { 100, 90, 80, 70, 60 };
이는 연속적인 메모리 공간에 숫자들이 저장되어 있는 것입니다. Modern C++을 이용한다면 배열을 다음과 같이 표현할 수도 있습니다:
std::array<int, 5> scoresStack = { 100, 90, 80, 70, 60 };
//or
std::vector<int> scoresHeap = { 100, 90, 80, 70, 60 };
위 scoresStack
과 scoresHeap
은 같은 데이터를 가진 배열이지만 메모리 할당 방식에 차이가 있습니다.
메모리 stack and heap
위 예제에서 scoresStack
과 scoresHeap
은 각각 C++ 메모리 공간에서 stack과 heap에 생성됩니다. stack은 함수를 호출할 때 자동으로 메모리 공간이 확보되고, heap은 system call을 통해 OS로부터 메모리 공간을 동적으로 할당받는 개념입니다.
TODO: 그림첨부
복습
위에서 설명한 개념들이 CUDA 학습을 위한 필수 C++ 지식입니다. 이 개념이 익숙하지 않으신 분들은 C++ 기초 강의를 짧게 듣고 오시면 좋습니다. 코드없는 프로그래밍 C++ 채널에서 특히, 메모리 챕터를 특히 참고하시면 도움이 될 것입니다
빌드환경
C++은 주로 CMake를 활용해서 빌드 환경을 구성하고 컴파일합니다. CUDA 기초 강의에서도 CMake를 활용해 빌드 환경을 구성할 것이므로, 한 번쯤은 직접 빌드해보시는 것을 추천드립니다.
github code link :
해당 폴더에는 main.cpp와 CMakeLists.txt 파일이 있습니다:
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
return 0;
}
cmake_minimum_required(VERSION 3.14)
project(HelloWorld)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_executable(HelloWorld main.cpp)
위 저장소를 클론하여 CMake를 통해 빌드하고 실행하면 “Hello World!”가 출력됩니다.
다음 단계
이제 C++의 기본적인 개념을 알아보았으니, 다음 강의에서는 CUDA의 기본 구조와 GPU 프로그래밍의 특징에 대해 알아보겠습니다. CUDA 프로그래밍에서는 CPU(호스트)와 GPU(디바이스) 간의 메모리 관리와 병렬 처리가 중요한 개념이 될 것입니다.