0Pricing
CUDA Academy · 강의

결합 읽기와 보폭 읽기

스레드와 주소의 매핑이 중요한 이유를 알아봅니다.

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

핵심은 매핑입니다

메모리 병합은 각 스레드가 어느 주소에 접근하는지에 따라 달라집니다. 스레드에서 주소로의 매핑에 따라 하나의 전송으로 워프 전체를 처리할 수 있는지가 결정됩니다.

병합된 패턴

인접한 스레드가 인접한 주소를 읽으면 워프가 하나의 연속된 구간을 다룹니다. 이렇게 정돈된 배치가 바로 병합된 접근입니다.

int i = blockIdx.x * blockDim.x + threadIdx.x;
float v = data[i];

왜 효율적인가

스레드 0은 인덱스 0에, 스레드 1은 인덱스 1에 접근하고, 이런 식으로 이어집니다. 32개의 주소가 하나의 정렬된 캐시 라인에 모두 들어가므로 GPU는 단 한 번의 전송만 필요로 합니다.

보폭 도입

보폭은 연속된 스레드가 접근하는 주소 사이의 일정한 간격입니다. 그 간격이 요소 하나를 넘어서는 순간 메모리 병합이 깨지기 시작합니다.

float v = data[i * stride];

보폭이 있는 읽기는 흩어집니다

보폭이 2이면 스레드 0은 0을, 스레드 1은 2를, 스레드 2는 4를 읽습니다. 이제 워프가 메모리의 두 배에 걸쳐 있으므로 더 많은 전송이 필요합니다.

비용이 커집니다

보폭을 두 배로 늘리면 대략 접근하는 캐시 라인의 수도 두 배가 됩니다. 큰 보폭은 워프가 많은 전송을 하게 만들면서 각 라인의 일부만 사용하게 할 수 있습니다.

흔한 함정

행 우선 행렬에서 각 스레드에 열 하나를 통째로 맡기면 보폭이 매우 커집니다. 코드에서는 깔끔해 보이지만 각 워프의 접근을 조용히 흩어 놓습니다.

float v = matrix[threadIdx.x * width + row];

매핑 전치하기

대개 해결 방법은 스레드에 따라 가장 빠르게 변하는 인덱스를 서로 바꾸는 것뿐입니다. 연속된 스레드가 연속된 메모리를 따라가게 하면 읽기가 다시 병합됩니다.

float v = matrix[row * width + threadIdx.x];

오프셋도 문제입니다

병합된 패턴이라도 캐시 라인의 중간에서 시작하면 손해를 봅니다. 정렬되지 않은 오프셋은 워프를 경계 너머로 이동시켜 하나의 읽기를 두 번으로 나눕니다.

워프 단위로 생각하기

패턴을 판단할 때 스레드 하나만 떠올리지 마십시오. 32개 레인이 한꺼번에 접근한다고 생각하고, 그 주소들이 함께 몇 개의 라인을 덮는지 살펴보십시오. 🔍

경험 법칙

가장 빠르게 변하는 인덱스가 threadIdx.x를 따라가게 하십시오. 이 한 가지 습관만으로도 전역 메모리 읽기의 대부분을 별도 비용 없이 병합된 형태로 유지할 수 있습니다.

빠른 확인

가장 잘 병합되는 접근 패턴을 고르십시오.

복습

병합된 읽기는 인접한 요소들을 함께 유지하지만, 보폭이 요소들을 여러 라인에 흩어 놓는다는 것을 배웠습니다. 가장 빠른 인덱스를 threadIdx.x가 결정하도록 하십시오. 🎉

자주 묻는 질문

“결합 읽기와 보폭 읽기” 강의는 무료인가요?

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

“결합 읽기와 보폭 읽기”에서 뭘 배우나요?

스레드와 주소의 매핑이 중요한 이유를 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 CUDA Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“결합 읽기와 보폭 읽기” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. 메모리 트랜잭션이란
  2. 결합 읽기와 보폭 읽기
  3. 배열 구조와 구조체 배열 비교
  4. 유효 대역폭 측정하기
← CUDA Academy(으)로 돌아가기