반응형
지난 글에서는 Host-Device 메모리 전송, cudaMalloc, cudaMemcpy 등을 활용하여 벡터 덧셈 예제를 성공적으로 구동해봤습니다. 이제 GPU 병렬 프로그래밍의 핵심인 스레드, 블록, 그리고 그리드 개념을 파고들 차례입니다. 이 개념들은 GPU 상에서 대규모 병렬 연산을 구성하는 뼈대와 같습니다. 오늘은 스레드와 블록, 그리고 이들을 묶어 전체 문제를 분할하는 방식인 그리드(Grid)에 대해 차근차근 살펴보며, "내가 원하는 만큼 병렬화"하는 방법을 이해해보겠습니다.스레드(Thread)란?스레드는 GPU 병렬 연산의 최소 실행 단위입니다. CPU에서도 멀티스레딩을 통해 병렬 처리를 하지만, GPU에서는 수백만 개의 스레드를 가볍게 실행할 수 있습니다. 각각의 스레드는 독립적으로 실행되..
이제 우리는 Host(CPU)와 Device(GPU) 코드 구조를 이해하고, 간단한 커널 호출 예제를 통해 GPU 코드가 어떻게 동작하는지 살펴봤습니다. 이번 글에서는 실제로 데이터를 GPU로 보내고, 연산한 뒤 다시 결과를 가져오는 과정을 좀 더 구체적으로 다뤄볼 예정입니다. 즉, Host Device 메모리 전송(cudaMemcpy) 및 메모리 할당(cudaMalloc) 방법을 배우고, 이를 활용한 간단한 벡터 덧셈 예제를 통해 GPU 병렬 연산의 기본을 체험해보겠습니다.Host와 Device 메모리 관리의 기본앞서 말했듯 Host와 Device는 별개의 메모리 공간을 사용합니다. 이는 마치 서로 다른 섬에 사는 두 존재가 다리를 통해 상자를 옮기는 상황과 비슷합니다. 여기서 상자는 데이터, 다리는..
앞선 첫 글에서는 개발 환경을 설정하고, GPU 상에서 “Hello, GPU!” 문자열을 출력하는 예제를 통해 CUDA 코드가 동작하는 것을 확인했습니다. 이제 두 번째 단계로, Host 코드와 Device 코드의 역할을 파악해보겠습니다. 이 개념을 확실하게 알아야 앞으로 진행될 벡터 덧셈이나 메모리 전송, 블록/스레드 개념을 자연스럽게 이해할 수 있습니다.Host 코드와 Device 코드란?Host 코드(호스트 코드): CPU에서 실행되는 코드우리가 평소에 작성하는 일반적인 C++ 코드와 크게 다르지 않습니다.메모리 할당, 입출력, CUDA 커널 호출 등의 작업을 담당합니다.Device 코드(디바이스 코드): GPU에서 실행되는 코드병렬 계산을 수행하는 부분입니다.“커널 함수(Kernel Functio..
이 시리즈는 총 10개의 글로 진행됩니다. 이번 첫 글에서는 Ubuntu 기반의 개발 환경을 준비하고, 가장 단순한 CUDA 예제를 통해 “Hello, GPU!”를 출력해보겠습니다. Windows 환경 설정에 대한 언급도 곁들이니, OS에 관계없이 따라 할 수 있을 거예요. 앞으로 진행될 10개의 단계 중 첫 번째 스텝으로, "내 GPU에 손을 흔들어보기"라고 생각해주세요!이 시리즈를 시작하며GPU 프로그래밍은 처음 접하면 조금 낯설게 느껴질 수 있습니다. 하지만 CPU 프로그래밍을 시작할 때 “Hello, World!”를 먼저 찍어봤듯이, CUDA에서도 비슷하게 기초부터 천천히 쌓아나갈 수 있습니다. 앞으로 이 시리즈를 통해 다음 단계들을 차근차근 진행할 예정입니다:개발 환경 설정 (Ubuntu & W..