0Pricing
CUDA Academy · 강의

GPU 메모리를 가리키는 포인터

장치 포인터는 호스트 변수에 저장됩니다.

GPU 메모리를 가리키는 포인터은(는) CoddyKit의 무료 CUDA Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 CUDA Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. CUDA Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

CPU에 존재하는 포인터

cudaMalloc은 일반적인 C++ 포인터 변수를 넘겨줍니다. 이 변수는 호스트 메모리에 있지만, 그 안의 주소는 GPU 메모리를 가리킵니다. 🔗

주소가 장치를 의미합니다

장치 포인터에는 GPU의 주소 공간에서만 유효한 숫자가 들어 있습니다. CPU에서 보면 실제 RAM이 아니라 단순한 정수일 뿐입니다.

float* d_data;  // host variable, device address

d_ 이름 지정 습관

프로그래머는 장치 포인터 앞에 d_를, 호스트 포인터 앞에 h_를 붙입니다. 이름만 보아도 각각 어느 쪽에 속하는지 알 수 있습니다.

float* h_data;
float* d_data;

호스트에서 역참조하지 마십시오

CPU 코드에서 *d_data를 작성하는 것은 함정입니다. 호스트는 GPU 메모리에 직접 접근할 수 없으므로 충돌하거나 엉뚱한 값을 읽습니다.

커널에서는 자유롭게 역참조합니다

커널 내부에서는 같은 장치 포인터가 완전히 유효합니다. 그곳에서 d_data[i]는 예상대로 실제 GPU 메모리를 읽고 씁니다.

__global__ void k(float* d) {
    d[0] = 1.0f;
}

커널에 전달하기

장치 포인터를 인수로 커널에 전달합니다. 그러면 GPU가 해당 주소를 사용하여 데이터를 찾습니다.

myKernel<<<grid, block>>>(d_data);

두 포인터, 두 공간

호스트 포인터와 장치 포인터를 엄격히 구분하십시오. 호스트 포인터는 GPU에서 의미가 없고, 장치 포인터는 CPU에서 의미가 없습니다.

cudaMemcpy로 간극 연결하기

두 공간 사이로 데이터를 옮기려면 복사해야 합니다. cudaMemcpy는 두 포인터를 받아 그 사이로 바이트를 이동해 줍니다.

포인터 연산도 여전히 작동합니다

호스트에서 장치 포인터에 d_data + n과 같이 오프셋을 더해 일부 구간을 가리키게 할 수 있습니다. 단, 그곳에서 포인터를 통해 값을 읽어서는 안 됩니다.

float* d_tail = d_data + 100;

뒤섞어 사용하면 미묘한 문제가 생깁니다

컴파일러는 두 포인터를 혼동해도 막아 주지 않습니다. 많은 CUDA 버그는 장치 포인터가 필요한 곳에 단순히 호스트 포인터를 전달해서 발생합니다.

디버깅보다 규칙 준수가 중요합니다

명확한 이름과 고정된 규칙이 많은 시간을 절약해 줍니다. 일찍 d_ 및 h_ 체계를 정하고 절대 깨뜨리지 마십시오. 🧹

빠른 확인

장치 포인터를 어디에서 안전하게 역참조할 수 있는지 확인해 보겠습니다.

복습

장치 포인터는 호스트 변수에 저장되지만 GPU 메모리를 가리킨다는 점을 배웠습니다. 커널 안에서는 사용할 수 있지만 호스트에서 직접 접근할 수는 없습니다. 🎉

자주 묻는 질문

“GPU 메모리를 가리키는 포인터” 강의는 무료인가요?

네 — “GPU 메모리를 가리키는 포인터” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 CUDA Academy 강의 전체를 잠금 해제할 수 있습니다. CUDA Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“GPU 메모리를 가리키는 포인터”에서 뭘 배우나요?

장치 포인터는 호스트 변수에 저장됩니다. 브라우저에서 직접 실행하는 실습 코드로 CUDA Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

CUDA Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 CUDA Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“GPU 메모리를 가리키는 포인터” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 CUDA Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 CUDA Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. cudaMalloc과 cudaFree
  2. GPU 메모리를 가리키는 포인터
  3. 초기화에 cudaMemset 사용하기
  4. 메모리 누수와 이중 해제 방지하기
← CUDA Academy(으)로 돌아가기