장치에서 호스트로 전송하기
결과를 CPU로 다운로드합니다.
장치에서 호스트로 전송하기은(는) CoddyKit의 무료 CUDA Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 CUDA Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. CUDA Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
결과를 가져오기
방금 커널이 디바이스 버퍼에 결과를 채웠지만 CPU는 GPU 메모리를 직접 읽을 수 없습니다. 결과를 다시 다운로드해야 합니다. 📥
다운로드 방향
데이터를 가져오려면 cudaMemcpyDeviceToHost를 사용합니다. 이제 소스는 디바이스 메모리이고 대상은 호스트 RAM입니다.
cudaMemcpy(h_c, d_c, bytes, cudaMemcpyDeviceToHost);대상은 여전히 먼저 옵니다
규칙은 변하지 않습니다. 대상 인자가 먼저 오고 소스가 두 번째입니다. 다운로드할 때는 호스트 포인터가 먼저 옵니다.
cudaMemcpy(h_dst, d_src, bytes, cudaMemcpyDeviceToHost);호스트 버퍼가 있어야 합니다
대상을 위해 실제 CPU 메모리를 준비해야 합니다. 복사하기 전에 malloc 또는 new로 호스트 저장 공간을 할당하세요.
float* h_c = (float*)malloc(bytes);커널이 끝날 때까지 기다리세요
차단 방식의 cudaMemcpy는 기본 스트림에서 이전 작업이 끝날 때까지 기다리므로, 결과를 읽기 전에 커널이 완료됩니다.
myKernel<<<blocks, threads>>>(d_c, n);
cudaMemcpy(h_c, d_c, bytes, cudaMemcpyDeviceToHost);바이트 수는 동일하게
업로드하고 계산한 것과 정확히 같은 수의 바이트를 다운로드하세요. 크기가 맞지 않으면 결과가 잘리거나 의미 없는 값이 됩니다.
size_t bytes = n * sizeof(float);이제 읽을 수 있습니다
복사가 반환되면 값은 일반 CPU 메모리에 저장됩니다. 어떤 호스트 배열처럼 값을 출력하거나 확인하거나 저장할 수 있습니다.
printf("%f\n", h_c[0]);왕복 과정
GPU 작업 전체는 왕복 과정입니다. 입력을 업로드하고, 커널을 실행한 다음, 출력을 다운로드합니다. 각 단계에서 cudaMemcpy를 사용합니다.
신뢰하기 전에 검증하세요
다운로드한 후 GPU 결과를 간단한 CPU 기준 결과와 비교하세요. 검증을 수행하면 버그가 퍼지기 전에 발견할 수 있습니다. ✅
할당한 것은 해제하세요
결과를 가져온 후 양쪽을 모두 해제하세요. 디바이스 버퍼에는 cudaFree를 사용하고 호스트 버퍼도 해제해 메모리 누수를 방지합니다.
cudaFree(d_c);
free(h_c);다운로드에도 시간이 듭니다
돌아오는 길에도 같은 느린 버스를 통과하므로, 호스트에 실제로 필요한 결과만 복사하세요.
빠른 확인
커널이 디바이스 버퍼 d_c에 결과를 썼습니다. CPU에서 결과를 어떻게 읽을까요?
복습
cudaMemcpyDeviceToHost를 사용해 결과를 가져오는 방법을 배웠습니다. 호스트 저장 공간을 할당하고, 호스트 포인터를 먼저 지정하며, 커널이 끝날 때까지 기다린 다음 검증하고 해제합니다. 🎉
자주 묻는 질문
“장치에서 호스트로 전송하기” 강의는 무료인가요?
네 — “장치에서 호스트로 전송하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 CUDA Academy 강의 전체를 잠금 해제할 수 있습니다. CUDA Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“장치에서 호스트로 전송하기”에서 뭘 배우나요?
결과를 CPU로 다운로드합니다. 브라우저에서 직접 실행하는 실습 코드로 CUDA Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
CUDA Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 CUDA Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“장치에서 호스트로 전송하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 CUDA Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 CUDA Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 호스트에서 장치로 전송하기
- 장치에서 호스트로 전송하기
- 복사 방향 열거형
- PCIe 전송 병목