inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

CUDA 프로그래밍 (3) - C/C++/GPU 병렬 컴퓨팅 - 메모리 구조

16-4 matrix addition, device version - 행렬 더하기, CUDA 디바이스 구현

[Matrix Addition Problem] 1D를 사용하지 않는 이유가 뭔가요?

해결된 질문

243

정재헌

작성한 질문수 4

0

강의에서 10,000 x 10,000 행렬의 덧셈을 해결하고자 했고, 이를 2D thread block(32 x 32)으로 풀어내셨습니다.

 

1D thread block을 사용하지 않는 것에 대한 의문이 들었습니다.

 

[질문]


의문을 가진 이유는 다음과 같습니다.

 

우선 2D로 설계할 경우, thread block의 dimension을 어떻게 설정하는지에 따라 낭비되는 thread가 달라집니다.

[1 x 1,024] : GridDim(10,000 x 10 x 1), 2,400,000개 낭비

[2 x 512] : GridDim(5,000 x 20 x 1), 2,400,000개 낭비

[4 x 256] : GridDim(2,500 x 40 x 1), 2,400,000개 낭비

[8 x 128] : GridDim(1,250 x 79 x 1), 1,120,000개 낭비

[16 x 64] : GridDim(625 x 157 x 1), 480,000개 낭비

[32 x 32] : GridDim(313 x 313 x 1), 320,256개 낭비

 

Thread 낭비가 가장 적은 block dimension은 강의에서 소개해주신 [32 x 32] 입니다.

 

저는 여기서 1D로 설계했을 때, 낭비되는 therad의 개수가 궁금해졌습니다.

[1,024] : GridDim(97,657 x 1 x 1), 768개 낭비

 

1D로 thread block을 설계했을때, therad 낭비는 768개로 2D로 설계하는 경우와 비교했을때 적지않은 차이라고 생각합니다.

 

물론 실제로 측정해본 결과(RTX 3090) 약 40 usec 차이로 1D thread block인 경우가 더 빠르긴 했지만 생각보다 큰 차이는 아니었습니다.


양질의 강의를 제공해주셔서 감사합니다!!

c c++ cuda gpu 병렬-처리

답변 1

1

드립커피+한모금더

안녕하세요.

2D 행렬를 다룰 때는 되도록 2D layout 으로 접근하게 됩니다.

CPU + RAM 위주로 설명하는 예제들에서는 2D 행렬도 어차피 1D로 주욱 나열되고, 한 row 와 다음 row 사이에 빈 공간이 없다고 보는 경우가 많을 겁니다. 실제로 memory alloc 을 하거나, 2D 행렬의 memory alloc 상황을 봐도, 1D 로 할당 할 때나 별 차이가 없습니다.

CUDA 를 비롯해서, GPU 기반으로 가거나, 병렬 처리를 고려하면, 이제 2D memory 할당 시에, 1개의 row 가 되도록 128 / 256/ 512 / 1024 Byte boundary에 맞추거나 하는 식으로 할당하는 것이 일반적입니다.

thread block 별로 memory 를 access 할 때, 서로 겹치지 않게 하는 것이 전체 performance 에서 훨씬 유리하기 때문에 이런 상황이 생깁니다.

현재는 addition 이라서, 1D layout 이 유리해 보이지만, 뒤에 multiplication 등의 더 복잡한 연산으로 가면, 2D layout 으로 구현하는 것이 훨씬 빨라집니다. 여러가지 이유로, 2D 행렬 이나, 2D image 를 다룰 거나 할 때는, cuda block 도 2D layout 으로 구성하는 것이 일반적입니다.

감사합니다.

 

1

정재헌

이해했습니다.

답변 감사합니다!

섹션7에서 개념적 궁금증

0

3

0

26년2회 실기기출은 언제쯤...

0

20

2

이론 공부법 요약본 버전 업데이트 문의

0

17

2

코딩살구클럽 가입부탁드립니다

0

27

2

vs 디버그 옵션 설정

0

26

2

코딩살구클럽 가입 요청 확인부탁드립니다

0

30

2

54강 양자화의 끝판왕, 터보퀀트 (예정) 강의 업로드

0

29

1

블로그에 학습 내용 올려도 되나요?

0

32

1

5-S 테스트 케이스 질문

0

34

2

정처기 필기 준비할때 이 이론을 다시 외워도 될까요?

0

54

2

코살 문제풀이 환경

0

48

2

2 - T 오큰수 문제가 있는 것 같습니다.

0

43

1

추천 추가문제들

0

43

2

프로그래머스 코테 환경 관련해서 질문드립니다.

0

47

2

최댓값 구하기(서바이벌)에서 수식 구성에 대한 질문

0

41

2

자료 한번에 다운받기

0

30

1

해당 문제에 대한 채점이 코딩살구클럽에서 올바르게 처리되지 않습니다.

0

41

2

균형 이진 트리 설명 시 높이 숫자

0

31

2

4-H 질문드립니다.

0

35

2

1-K 질문드립니다.

0

41

2

대기업 인적성 시험 질문

0

41

2

pitch값에 따른 alignement boundary(size) 질문

0

203

2

계산시간 비교

1

408

2

video에 필터를 적용하는 경우

0

392

1