inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

CUDA 프로그래밍 (1) - C/C++/GPU 병렬 컴퓨팅 - CUDA 커널 kernel

Hello, CUDA program - 헬로 CUDA 프로그램 작성 (섹션 전체 source code 포함)

hello-prrallel.cu 의 병렬처리에 관하여

해결된 질문

375

whlee

작성한 질문수 1

0

좋은 강의 고맙습니다.

병렬처리라면 일반적으로 다른 쓰레드에 영향을 주지 않고 수행이 될거라 생각이 됩니다.

예제 코드에서

hello<<<1,8>>>();

을 이용하여 쓰레드 8개를 병렬로 돌리는데 출력된 값은

hello CUDA 0!

hello CUDA 1!

hello CUDA 2!

,,,

hello CUDA 7!

이 되는 것을 볼 수 있는데 병렬로 처리된다면 출력 되는 숫자가 순차적으로 나올 수 없는 것 아닌가요?

c c++ cuda gpu 병렬-처리

답변 1

0

드립커피+한모금더

안녕하세요.

출장 관계로, 답장이 조금 늦었습니다.

 

출력된 예제는, 시스템에 따라서, 다르게 나올 수 있습니다.

8개의 쓰레드가 병렬로 실행될 것이고, 이론 상은 완벽히 병렬로 실행되면, 어떠한 순서로도 출력이 나올 수 있습니다. 즉, 0-1-2-3-4-5-6-7 로 실행 결과가 나오는 것도 가능합니다.

직렬로 실행하면, 어떠한 경우, 어떠한 시스템에서도 0-1-2-3-4-5-6-7 순서로만 출력이 되겠지만,

병렬로 실행되면, 시스템에 따라서, 프로그램에 따라서, 당시 실행 환경에 따라서, 어떠한 순서로 나와도 문제가 없다고 판정합니다.

 

다음에, 8개의 쓰레드가 모두 완벽히 똑같은 시간에 종료되었다고 해도, print 를 출력하는 부분은 결국 serial 처리를 하게 될 겁니다. OS 아래 부분에서 8개의 print 요구에 대해서, 이것들이 완벽히 동시에 도착했더라도, 이것들 끼리의 우선순위를 부여해서, 1개씩 차례로 처리해야 할 겁니다.

이 부분을 구현하는 입장에서는, 가장 쉬운 우선순위가, 쓰레드 ID 가 될 수도 있을 것이고, 들어오는 순서가 되기도 할 것이고, 다양한 선택이 가능할 겁니다.

시스템에 따라서, 특정 우선 순위를 선택하면, 정확히 동시에 처리가 끝나도, 우선 순위 때문에, 항상 0-1-2-3-4-5-6-7 순서로 나오게 할 수도 있을 겁니다.

 

정리하면, 완벽한 병렬처리가 되었다면, 8개 쓰레드의 출력 순서가 임의로 나올 수 있고,

그중에 0-1-2-3-4-5-6-7 가 나와도 전혀 이상하지 않습니다.

 

C/C++ 의 직렬 처리에서는 항상 0-1-2-3-4-5-6-7 순서로 나와야만 하지만,

병렬 처리 결과는 어떠한 순서로 나와도 문제가 없고, 8개 정도의 병렬 처리에서는 순서가 어긋나는 경우가 잘 발생하지 않을 겁니다.

나중에 백 만개 이상의 쓰레드를 실행하면, 여러가지 이유로 쓰레드 마다 소요 시간이 다 다르고, 그것도 매번 실행할 때마다 소요 시간이 다르게 나와서, 출력 순서가 매번 전혀 다르게 나올 수도 있기 때문에, 이것을 신경써서 코딩해야 하는 것이 병렬 처리의 중요한 점 중의 하나가 됩니다.

강의를 계속 진행해 나가면, 병렬 처리의 더 복잡한 결과들이 나오게 됩니다.

 

감사합니다.

 

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

0

11

1

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

0

24

2

vs 디버그 옵션 설정

0

24

2

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

0

30

2

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

0

28

1

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

0

30

1

5-S 테스트 케이스 질문

0

34

2

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

0

52

2

코살 문제풀이 환경

0

46

2

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

0

43

1

추천 추가문제들

0

42

2

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

0

44

2

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

0

40

2

자료 한번에 다운받기

0

29

1

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

0

40

2

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

0

30

2

4-H 질문드립니다.

0

35

2

cudaFree가 자동으로 되는 상황

0

109

2

MSB3721 오류

0

293

2

식별자 threadIdx 정의 되지 않음 오류

0

287

2

cudaGetLastError() 에러 처리

0

163

1

CUDA Samples 없음

0

215

2

gpu-add.cu 부분에서 커널 lanch 이후 cudaDeviceSynchronize() 부분 질문이요

0

525

1

에러처리 매크로에서!!

0

481

1