inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

해결된 질문

423

박 신석

작성한 질문수 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

박 신석

답변 감사합니다!

섹션7에서 개념적 궁금증

0

6

0

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

0

22

2

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

0

20

2

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

0

27

2

vs 디버그 옵션 설정

0

26

2

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

0

30

2

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

0

29

1

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

0

32

1

5-S 테스트 케이스 질문

0

35

2

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

0

54

2

코살 문제풀이 환경

0

48

2

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

0

43

1

추천 추가문제들

0

43

2

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

0

47

2

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

0

42

2

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

0

41

2

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

0

31

2

4-H 질문드립니다.

0

35

2

1-K 질문드립니다.

0

41

2

대기업 인적성 시험 질문

0

41

2

4-C 질문드립니다

0

41

2

[수학숙제 / BOJ 2870] 채점 서버 오작동

0

37

1

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

0

375

1

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

0

385

1