축소 트리 개념
각 단계에서 활성 스레드 수를 절반으로 줄입니다.
축소 트리 개념은(는) CoddyKit의 무료 CUDA Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 CUDA Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. CUDA Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
리덕션이란 무엇인가
리덕션은 전체 배열을 하나의 값으로 축약하는 연산입니다. 예를 들어 모든 원소를 더해 하나의 총합으로 만듭니다. GPU에서 가장 흔한 패턴 중 하나입니다. 🌳
순차 방식은 느립니다
CPU에서는 원소를 하나씩 차례로 더합니다. 이는 O(n) 순차 단계이므로 숫자가 백만 개라면 서로 의존하는 덧셈을 백만 번 연속으로 수행해야 합니다.
덧셈은 결합 법칙을 따릅니다
핵심은 덧셈이 결합 법칙을 따른다는 점입니다. (a+b)+c는 a+(b+c)와 같습니다. 따라서 원하는 방식으로 쌍을 묶어 더할 수 있습니다.
병렬 쌍으로 더하기
묶는 방식에 제약이 없으므로 여러 독립적인 쌍을 동시에 더할 수 있습니다. 모든 스레드가 병렬 단계 하나에서 쌍 하나씩 처리합니다.
매 단계 절반으로 줄이기
한 번 처리하면 원소의 절반이 사라집니다. 이를 반복하면 활성 원소 수가 계속 절반으로 줄어듭니다: 8에서 4, 2, 1로 줄어듭니다.
로그 깊이
절반씩 줄이면 n단계가 아니라 log2(n)단계 만에 끝납니다. 원소가 백만 개여도 백만 단계가 아니라 약 20단계 만에 축약됩니다.
트리로 그려 보기
쌍을 연결해 그리면 이진 트리가 됩니다. 잎은 입력이고, 각 레벨에서 노드 수가 절반으로 줄며, 루트가 최종 합계입니다.
매 단계에서 간격 두 배로 늘리기
한 가지 구현 방법은 각 단계에서 스레드가 stride만큼 떨어진 이웃을 더하도록 하는 것입니다. 데이터 전체를 한 번 지날 때마다 stride가 두 배가 됩니다.
for (int s = 1; s < blockDim.x; s *= 2) {
if (tid % (2 * s) == 0)
data[tid] += data[tid + s];
__syncthreads();
}단계 사이 동기화
각 레벨은 이전 레벨이 끝나야 진행할 수 있으므로, 스레드는 파트너의 결과를 읽기 전에 장벽에서 기다려야 합니다.
작업량과 경로 길이
전체 덧셈 횟수는 여전히 대략 n이며, 이것이 작업량입니다. 하지만 가장 긴 의존성 체인인 경로 길이는 log2(n)으로 줄어듭니다. 작업량은 같지만 기다리는 시간은 훨씬 짧습니다.
합산에만 쓰이지 않습니다
같은 트리는 모든 결합 법칙을 따르는 연산에 사용할 수 있습니다. 최댓값, 최솟값, 곱셈 또는 논리 AND가 그 예입니다. 연산자만 바꾸면 구조는 그대로 유지됩니다.
빠른 확인
트리 리덕션에 필요한 병렬 단계 수를 생각해 보세요.
복습
리덕션 트리를 배웠습니다. 쌍을 병렬로 더하고, 매 단계 절반으로 줄여 log2(n)단계 만에 끝냅니다. 결합 법칙을 따르는 모든 연산에 적용할 수 있습니다. 다음에는 워프를 계속 바쁘게 실행해 보겠습니다! 🎉
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개 중 1번째 강의입니다.
“축소 트리 개념” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 CUDA Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 CUDA Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 축소 트리 개념
- 워프 분기 없애기
- 순차 주소 지정
- 여러 블록의 최종 축소