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 };

scoresStackscoresHeap은 같은 데이터를 가진 배열이지만 메모리 할당 방식에 차이가 있습니다.

메모리 stack and heap

위 예제에서 scoresStackscoresHeap은 각각 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(디바이스) 간의 메모리 관리와 병렬 처리가 중요한 개념이 될 것입니다.