0Pricing
CUDA Academy · 강의

Thrust의 리듀스, 스캔, 정렬

한 번의 호출로 고수준 기본 연산을 사용합니다

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

어려운 알고리즘을 한 줄로

축약, 스캔, 정렬을 빠르게 직접 작성하기는 어렵습니다. Thrust는 한 번의 함수 호출로 최적화된 구현을 제공합니다. 🎁

축약으로 하나의 값 만들기

thrust::reduce는 배열의 합처럼 모든 요소를 하나의 결과로 결합하며, 내부적으로는 이 모든 작업을 병렬로 수행합니다.

int total = thrust::reduce(d.begin(), d.end());

사용자 지정 축약 연산자

Reduce의 기본 연산은 덧셈이지만, 초기값과 이항 연산을 전달해 곱, 최댓값 또는 결합 법칙이 성립하는 다른 연산을 계산할 수 있습니다.

int m = thrust::reduce(d.begin(), d.end(),
  0, thrust::maximum<int>());

스캔으로 누적 합계 유지하기

스캔, 즉 접두사 합은 각 위치에서 그때까지의 누적 합을 출력합니다. 이는 압축, 정렬, 스트림 할당의 핵심입니다.

포함형과 배제형

inclusive_scan은 현재 요소를 합에 포함하고, exclusive_scan은 포함하지 않습니다. 올바른 방식을 선택하면 하나 차이로 발생하는 버그를 피할 수 있습니다.

thrust::inclusive_scan(d.begin(), d.end(),
  out.begin());

스캔은 병렬화가 쉽지 않습니다

접두사 합은 순차적으로 보이지만, Thrust는 직접 작성할 필요가 없는 영리한 트리 알고리즘을 사용해 이를 병렬로 실행합니다.

제자리에서 정렬하기

thrust::sort는 빠른 GPU 기수 정렬 또는 병합 정렬을 사용해 device_vector를 제자리에서 정렬하며, 대규모 데이터에서는 CPU 정렬보다 훨씬 빠릅니다.

thrust::sort(d.begin(), d.end());

키로 정렬하기

sort_by_key는 한 배열을 정렬하면서 두 번째 값 배열도 그에 맞게 재배열합니다. 키와 레코드의 대응 관계를 유지하는 데 적합합니다.

thrust::sort_by_key(keys.begin(),
  keys.end(), values.begin());

기본 연산 조합하기

실제 처리 흐름에서는 이러한 연산을 연결합니다. transform 후 reduce를 수행하거나, sort 후 scan을 수행하는 식입니다. 각 단계가 최적화된 한 번의 호출이므로 로직에 집중할 수 있습니다.

융합된 transform_reduce

transform_reduce는 한 번의 순회로 매핑과 합산을 수행합니다. 임시 배열 없이 내적이나 제곱의 합 같은 값을 계산할 수 있습니다.

float ss = thrust::transform_reduce(
  d.begin(), d.end(), sq, 0.0f, thrust::plus<float>());

라이브러리를 활용하세요

이러한 기본 연산은 NVIDIA가 고도로 최적화했습니다. 먼저 이를 사용하는 편이 대개 사용자 지정 커널보다 빠르고 작업 시간도 절약됩니다.

빠른 확인

접두사 합이 무엇을 생성하는지 떠올려 보세요.

복습

reduce로 데이터를 하나로 축약하고, scan으로 누적 합계를 만들고, sort로 배열을 정렬했으며, transform_reduce로 단계를 융합했습니다. 🏁

자주 묻는 질문

“Thrust의 리듀스, 스캔, 정렬” 강의는 무료인가요?

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

“Thrust의 리듀스, 스캔, 정렬”에서 뭘 배우나요?

한 번의 호출로 고수준 기본 연산을 사용합니다 브라우저에서 직접 실행하는 실습 코드로 CUDA Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“Thrust의 리듀스, 스캔, 정렬” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. cuBLAS GEMM 제대로 사용하기
  2. Thrust 벡터와 변환
  3. Thrust의 리듀스, 스캔, 정렬
  4. 딥러닝을 위한 cuDNN
← CUDA Academy(으)로 돌아가기