호스트 측 연결하기
할당하고, 복사하고, 실행하고, 다시 복사한 뒤 해제합니다.
호스트 측 연결하기은(는) CoddyKit의 무료 CUDA Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 CUDA Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. CUDA Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
호스트에도 할 일이 있습니다
커널이 계산을 담당하지만 호스트 CPU가 모든 준비를 수행합니다. 호스트의 역할은 할당, 입력 복사, 실행, 결과 복사, 해제입니다. 🧩
두 종류의 포인터
CPU 배열에는 호스트 포인터를 사용하고 GPU 버퍼에는 별도의 디바이스 포인터를 사용합니다. 일반적으로 h_A와 d_A처럼 이름을 지정합니다.
float *h_A, *h_B, *h_C;
float *d_A, *d_B, *d_C;CPU에서 입력을 채우세요
먼저 일반 호스트 메모리에서 데이터를 준비합니다. 여기서는 GPU가 나중에 더할 값으로 h_A와 h_B를 초기화합니다.
for (int i = 0; i < n; i++) {
h_A[i] = i; h_B[i] = 2 * i;
}디바이스에 할당하세요
GPU에는 자체 버퍼가 필요하므로 각 배열에 cudaMalloc을 호출합니다. 크기는 바이트 단위이며 개수에 sizeof(float)를 곱해 계산합니다.
size_t bytes = n * sizeof(float);
cudaMalloc(&d_A, bytes);입력을 업로드하세요
cudaMemcpy와 HostToDevice 방향을 사용해 입력 배열을 GPU로 옮깁니다. 커널은 디바이스에 있는 데이터만 볼 수 있습니다.
cudaMemcpy(d_A, h_A, bytes, cudaMemcpyHostToDevice);
cudaMemcpy(d_B, h_B, bytes, cudaMemcpyHostToDevice);실행 형태를 정하세요
블록당 스레드 수를 정한 다음 모든 요소를 처리하는 데 필요한 블록 수를 계산합니다. 올림 처리를 하면 모든 요소에 스레드가 할당됩니다.
int threads = 256;
int blocks = (n + threads - 1) / threads;커널을 실행하세요
이제 삼중 꺾쇠괄호 구문으로 디바이스 포인터를 전달하며 커널을 실행합니다. GPU가 작업하는 동안 이 호출은 즉시 반환됩니다.
vecAdd<<<blocks, threads>>>(d_A, d_B, d_C, n);결과를 다운로드하세요
커널이 끝나면 cudaMemcpyDeviceToHost를 사용해 C를 다시 가져옵니다. 이 복사도 먼저 실행이 완료될 때까지 기다립니다.
cudaMemcpy(h_C, d_C, bytes, cudaMemcpyDeviceToHost);디바이스 메모리를 해제하세요
GPU 메모리는 자동으로 정리되지 않으므로 모든 버퍼를 cudaFree로 해제하세요. 이를 생략하면 프로세스가 종료될 때까지 메모리 누수가 발생합니다.
cudaFree(d_A); cudaFree(d_B); cudaFree(d_C);순서를 반드시 지키세요
항상 같은 순서를 따르세요. 할당, 입력 복사, 실행, 결과 복사, 해제입니다. 순서를 바꾸면 커널이 오래되었거나 유효하지 않은 데이터를 읽습니다.
호스트 코드는 일반 C++입니다
호스트 측은 소수의 cuda 호출이 추가된 일반적인 C++ 코드입니다. 커널 실행 외에는 특별한 컴파일러 마법이 필요하지 않습니다.
빠른 확인
vecAdd 커널을 실행하기 전에 무엇을 해야 할까요?
복습
호스트 측 연결을 처음부터 끝까지 완성했습니다. 두 포인터 집합, cudaMalloc, 호스트에서 디바이스로 복사, 커널 실행, 다시 복사, cudaFree까지 모두 처리했습니다. 모든 커널을 구동하는 기본 코드입니다. ✅
AI 튜터와 함께 C++을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 30
- 레슨
- 120
자주 묻는 질문
“호스트 측 연결하기” 강의는 무료인가요?
네 — “호스트 측 연결하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 CUDA Academy 강의 전체를 잠금 해제할 수 있습니다. CUDA Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“호스트 측 연결하기”에서 뭘 배우나요?
할당하고, 복사하고, 실행하고, 다시 복사한 뒤 해제합니다. 브라우저에서 직접 실행하는 실습 코드로 CUDA Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
CUDA Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 CUDA Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“호스트 측 연결하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 CUDA Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 CUDA Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 벡터 덧셈 커널
- 호스트 측 연결하기
- CPU에서 결과 검증하기
- 첫 성능 향상 시간 측정하기