0Pricing
CUDA Academy · 강의

이중 버퍼링 파이프라인

GPU가 계속 작업하도록 데이터를 덩어리로 나눕니다.

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

GPU 유휴 문제

큰 배열을 복사한 다음 커널을 실행하고 다시 복사해 온다고 해 보겠습니다. 각 복사 중에는 GPU가 유휴 상태가 되고, 계산 중에는 전송 엔진이 유휴 상태가 됩니다.

작업 나누기

해결책은 하나의 거대한 배열을 더 작은 청크로 나누는 것에서 시작합니다. 각 청크를 따로 복사하고 처리할 수 있으므로 중첩의 가능성이 열립니다.

두 버퍼, 두 경로

이중 버퍼링은 두 개의 장치 버퍼와 두 개의 스트림을 사용합니다. 스트림 A가 한 청크를 계산하는 동안 스트림 B는 다음 청크를 복사해 옵니다.

복사와 계산 중첩하기

핵심은 동시 실행입니다. 서로 다른 청크에서 전송과 커널 실행이 동시에 이루어집니다. 전송 시간은 유용한 계산 뒤에 가려집니다.

고정 메모리가 필요합니다

이 방식은 호스트 데이터가 고정 메모리에 있을 때만 작동합니다. 페이지 아웃 가능한 버퍼는 블로킹 복사를 강제하므로 전체 파이프라인이 다시 직렬 실행으로 돌아갑니다.

파이프라인 반복문

청크를 순회하면서 각 단계에서 같은 스트림에 비동기 입력 복사, 커널 실행, 비동기 출력 복사를 차례로 예약합니다.

cudaMemcpyAsync(d_in, h_in + off, csz, H2D, s);
proc<<<g, b, 0, s>>>(d_in, d_out);
cudaMemcpyAsync(h_out + off, d_out, csz, D2H, s);

스트림 번갈아 사용하기

스트림을 번갈아 사용하여 각 청크를 스트림에 할당하십시오. 짝수 청크는 스트림 0으로, 홀수 청크는 스트림 1로 보내면 이웃한 청크가 자연스럽게 중첩됩니다.

cudaStream_t s = streams[i % 2];

두 개면 충분한 이유

스트림 두 개만으로도 복사와 계산을 중첩할 수 있습니다. 버퍼를 더 추가하면 깊이는 늘어나지만 효과는 점점 줄고 메모리 비용은 증가하므로 두 개부터 시작하십시오.

마지막에 모두 처리하기

모든 청크를 대기열에 넣은 뒤 결과를 읽기 전에 모든 작업이 끝날 때까지 기다리십시오. 간단한 cudaDeviceSynchronize 호출 하나로 모든 스트림을 한 번에 처리할 수 있습니다.

cudaDeviceSynchronize();

속도 향상

복사가 계산 뒤에 가려지면 전체 시간은 두 시간의 합이 아니라 둘 중 더 긴 시간의 비용에 가까워집니다. 이것이 진정한 이점입니다. 🚀

가장 효과적인 경우

이중 버퍼링은 전송 시간과 계산 시간이 대략 균형을 이룰 때 가장 효과적입니다. 한쪽이 압도적으로 길다면 먼저 그 부분을 줄이는 데 집중하십시오.

빠른 확인

이중 버퍼링 파이프라인의 핵심 이점은 무엇일까요?

복습

데이터를 청크로 나누고, 두 개의 고정 버퍼와 스트림을 사용하여 복사와 계산을 중첩하십시오. 마지막에 동기화하면 전송 시간이 사라지는 것을 확인할 수 있습니다. 🎉

자주 묻는 질문

“이중 버퍼링 파이프라인” 강의는 무료인가요?

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

“이중 버퍼링 파이프라인”에서 뭘 배우나요?

GPU가 계속 작업하도록 데이터를 덩어리로 나눕니다. 브라우저에서 직접 실행하는 실습 코드로 CUDA Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“이중 버퍼링 파이프라인” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. 페이지 가능 메모리가 느린 이유
  2. cudaMallocHost로 고정 메모리 사용하기
  3. 스트림에서 cudaMemcpyAsync 사용하기
  4. 이중 버퍼링 파이프라인
← CUDA Academy(으)로 돌아가기