inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Lập trình CUDA (5) - Tính toán song hành C/C++/GPU - Các phép toán nguyên tử atomic op

28-4 shuffle shared - shared memory 강의에서 질문이 있습니다.

Đã giải quyết

422

hotstone

5 câu hỏi đã được viết

0

안녕하세요. 강의 정말 너무 잘 보고 있습니다!!

다름이 아니라 28-4 강의를 보다 궁금하게 있어서 질문을 드립니다.

위 두 가지 이유에 대해서는 이해가 되었지만, Shared Memory를 사용하는 부분에서 이해가 잘되지 않는 부분이 있습니다. Global Memory에서는 Memory Coalescing이 중요하기 때문에 Half and Half가 더 느린게 맞지만, Shared Memory를 사용하는 부분에서는 두 방식(even odd, Half and Half)에서 차이가 없지 않을까 하고 생각했습니다. 두 방식 모두 Global Memory에 접근하고 Write하는 로직은 같기 때문에 Shared Memory에서 성능을 저해하는 요소로는 Bank Conflict만 있다고 생각했는데, 제가 잘못 이해 하고 있는 걸까요??

c c++ cuda gpu 병렬-처리

Câu trả lời 1

1

onemoresipofcoffee

안녕하세요.

우선, CUDA 프로그래밍 강의를 수강해 주셔서 감사합니다.

 

28-4 동영상에서 나왔던 내용은 상당히 디테일하게 속도를 따지는 부분이었습니다.

메모리 억세스 속도만 따진다면, 말씀하신 대로, 쉐어드 메모리에 가져온 후에는,

쉐어드 메모리 상에서 even-odd 를 쓰거나, half-and-half 를 쓰거나,

메모리를 읽어오는 속도에서는 큰 차이가 없을 겁니다.

bank conflict 도 어느 한쪽이 엄청 빨라질 정도로 발생할 것 같지는 않습니다.

 

다만, 28번 강의의 주제가 "control flow" 로, 메모리 억세스 보다는

GPU core 의 수행 경로를 따지고 있는 상황이라서,

control-flow 레벨에서의 최적화를 고려하고 있습니다.

 

28-1 동영상의 2808 슬라이드를 보시면, (28-1 동영상에서는 8:05 부분의 앞뒤 정도가 됩니다)

even-odd 방법은 대부분의 경우, 1개의 warp 내에서도 if-part, else-part 가 모두 수행되어야 하고,

half-and-half 방법에서는 1개의 warp 내에서는 대부분 if-part 만, 또는 else-part 만 수행하게 될 것입니다.

warp 1개의 입장에서는 몇 개의 instruction 을 더 수행할 것인가, 말 것인가의 차이가 됩니다.

 

예제로 사용한 CUDA kernel 들은 단순히 assignment 문장 1,2개를 수행하는 정도라서,

warp 입장에서는 GPU core instruction 2,3개 정도를 더 수행하느냐 정도가 될 것 같습니다.

그래서, 현재 구현 결과에서는 미미한 차이를 보이는 정도가 나왔습니다.

(28-4 동영상의 24번 슬라이드, 7,808 usec 대 7,747 usec )

 

다만, if-part 와 else-part 가 상당히 heavy 해 진다면?

이야기가 달라질 수도 있습니다.

그래서, 동영상에서도, 혹시 모르니까, 습관적으로 half-and-half 방식으로

알고리즘을 설계/구현 하는 것이 나을 것이라고 했던 것입니다.

 

종합적으로 보면, 현재의 구현 에서는 미미한 차이를 보이는 게 맞습니다.

다만, heavy 한 알고리즘을 구현한다면, 경우에 따라서 차이가 커질 수도 있기 때문에,

되도록 half-and-half 를 선호하게 된다고 보시면 될 것 같습니다.

 

감사합니다.

0

hotstone

자세한 설명 감사합니다.

코딩살구클럽 관련 건의사항

0

18

1

코살에 19942 다이어트 문제에 N의 범위가 빠져있슴니다

0

10

1

Reticle이 안나옵니다.

0

11

1

진행 방법 질문드립니다!

0

38

2

Singleton 관련 질문입니다.

1

33

2

안녕하세요. 계속 프로젝트를 해야지 하다가 결제하고 환경 설정 중입니다.

0

15

1

Export template 안됨

1

30

2

2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.

0

55

2

AddGameFrameworkComponentReceiver vs AddExtensionHandler

0

24

0

scanf("%d\n") 의미

0

20

1

필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)

0

39

2

2주차 개념#12 트리 순회

0

25

2

백준 사이트 서비스 종료

0

112

3

26년 1회 실기 해설 강의

0

51

2

프로젝트 질문 문의

0

46

1

주소 연산자(&) 간접 지정자(*) 반대 개념

0

33

1

53번 4-1 자료 오류 있는 것 같습니다.

0

70

2

7번문제

0

58

2

C언어 변형문제 9번문제 Pdf 수정요청

0

46

2

메서드 오버드라드

0

46

2

실수

0

45

1

[30-4] hist-shared.cu 에서 질문있습니다.

0

145

2

선생님 gpu->cpu 속도 개선에 대해서 질문드려요

0

605

1

32-2의 warp의 early terminate에 대해 질문드립니다.

0

360

1