inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

CUDA 프로그래밍 (6) - C/C++/GPU 병렬 컴퓨팅 - 서치 & 소트

예제 코드에 대해서 질문 드립니다.

해결된 질문

405

박 신석

작성한 질문수 5

0

안녕하세요!

38-4 강의를 수강하고 예제 코드를 확인하는 과정에서 몇 가지 궁금증이 생겨 질문을 드립니다.

  1. kernel 함수 내 변수에서 register를 붙이시던데 이렇게 붙였을때 이점이 있을까요?

  2. 두 번째 for문 같은 경우에 halfsize *= 2 이렇게 표현할 수 있는데 비트연산으로 나타 내시던데 이유를 알 수 있을까요??

  3. 변수를 선언할때 unsigned 만 작성하시던데 이것도 이유가 있을까요??

어찌 보면 굉장히 사소할 수 있는 질문들이지만, 그래도 이유를 알면 배울 수 있는 부분이 많을거 같아 질문 드립니다.

c c++ cuda gpu

답변 1

1

드립커피+한모금더

안녕하세요.

우선, 강의를 수강해 주셔서 감사합니다.

 

프로그래밍은 습관으로 되어 있기도 해서, 크게는 제 프로그래밍 습관으로 보셔도 될 겁니다.

 

1. kernel 내 변수들은 사실 대부분 GPU core 의 register 로 할당되고,

일부, array 변수들이나, 변수 숫자가 너무 많아지면, GPU local memory 에 할당되는 방식입니다.

그래서,

(1) array 변수가 아닌 경우에는 register 에 할당될 것이라는 것을 제가 remind 하려는 의도가 있고,

(2) 일반 변수가 많아지는 경우에는, 중요도에 따라, compiler 에게 우선적으로 register 에 할당해 달라는 요청으로 붙이기도 합니다.

(2) 번의 경우는, 사실 C++ / C 컴파일러에서도 register 키워드를 힌트로 받아들이기 때문에, 같은 의도에서 붙이는 편입니다.

 

2. halfsize *= 2; 로 하나, halfsize <<= 1; 로 하나, 사실 하는 일은 똑같습니다.

다만, 역사적인 이유로, 예전의 compiler 들이 * 2 를 곧이곧대로, 곱하기 루틴을 부르거나, 기계어의 곱하기 명령을 사용했고,

그것보다는 bit 단위 shift 연산 쪽이 더 빨라서, compiler 가 optimize를 제대로 못하는 경우에도 대비하는 경향이 있었습니다.

저도 습관적으로 bit 단위 shift 연산 쪽을 선호합니다만, 최신 컴파일러에서는 자동으로 optimize 해 주기 때문에, 사실상 차이가 없을 겁니다.

그래서, 현재는 그냥 옛날의 습관으로 보시면 되겠습니다.

3. loop count 같은 경우에, 저는 unsigned 쪽을 선호합니다.

이것도 크게 이유가 있는 것은 아니고, 분명히 positive number 만 들어가야 하는 경우에는 unsigned 로 선언해 두면,

debug 할때, 조금 더 빨리 문제를 파악하는 경우가 많아서, 이쪽을 선호합니다.

예를 들면, scanf 등에서, unsigned int 로 읽어 들이게 하면, -1 같은 값을 아예 입력하지 못하게 해서,

혹시라도 - 를 오타로 넣거나, 처음 설계와는 달리 minus 값을 넣으면, 아예 처음부터 문제라고 인식하게 하는 편입니다.

역시 프로그래밍 습관으로 보시면 되겠습니다.

 

감사합니다.

0

박 신석

답변 감사합니다!

5-B

0

26

2

질문있는데요.. vLLM은 말씀하신 사양에 적용이되나요?

0

28

2

20년 4,5회 13번

0

25

2

11강 CallOrRegister_OnExperienceLoaded 질문

0

32

1

4 - A

0

33

2

코딩살구클럽 입장이 안됩니다

0

84

2

강의자료는 어디서 받을 수 있죠?

1

36

2

4-F 경우의 수 질문입니다.

0

36

2

코딩살구클럽 가입이 안됩니다.

0

90

2

살구 클럽에 대한 질문있습ㄴ디ㅏ

0

65

1

교안 158페이지 문의드립니다

0

47

2

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

0

124

1

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

0

46

1

Reticle이 안나옵니다.

0

28

2

진행 방법 질문드립니다!

0

87

2

Singleton 관련 질문입니다.

1

58

2

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

0

22

1

Export template 안됨

1

45

2

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

0

65

2

AddGameFrameworkComponentReceiver vs AddExtensionHandler

0

35

1

scanf("%d\n") 의미

0

28

1

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

0

51

2

예제를 돌려보고 싶은데 common.cpp은 어디에 있을까요?

0

351

1

39g-merge-global-large.cu에 대해서 질문드립니다.

0

370

1