inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

CUDA 프로그래밍 (5) - C/C++/GPU 병렬 컴퓨팅 - 아토믹 연산 atomic op

실습 환경 확보 - NVIDIA 그래픽 카드 필요 (파트 0 끝부분과 중복됨)

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

해결된 질문

626

igbtkd

작성한 질문수 8

0

선생님 안녕하세요.
저번에 opencl과 cuda를 같이 공부 중이던 학생이에요.
제가 프로그램을 작성하는 도중에 VRAM <-> RAM의 전송 속도가 느리다는 것을 깨달았는데요.

제가 보통 결과 값으로 40mb 정도를 가지는데(위의 자료에 따르면 6ms 정도) 이를 최대한 cpu에서 빨리 받기 위한 방법은 아직까지 존재하지 않는 것인지 알고 싶습니다!

c c++ cuda gpu 병렬-처리

답변 1

0

드립커피+한모금더

안녕하세요.

우선, 알고 계시겠지만, 코딩 쪽의 문제는 재현이 힘든 경우도 있고,전혀 다른 것이 원인인 경우도 있어서, 말씀 드리는 내용이 꼭 정답은 아닐 수도 있습니다.

VRAM - RAM 간의 전송은 CUDA 에서는 주로 cudaMemcpy 함수를 사용하게 되는데, 함수 자체는 효율성이 보장되는 편입니다.

다만, 이 함수의 수행 시간을 보면, (준비작업) + (실제 copy) + (종료처리) 가 걸리게 되고,

일반적인 C/C++ 함수보다도 (준비작업) 에 시간이 더 걸릴 수 있습니다.

CPU, RAM, GPU, VRAM 모두의 충돌을 피해야 하니까, copy 작업 전에, 모두가 copy 해도 문제 없다는 것이 확실해야 copy가 일어날 겁니다. (특정 memory 영역을 서로 읽고, 쓰려는 쓰레드들이 경쟁하고 있다면, 다른 쓰레드들을 pending 시키고, copy 하고 다시 resume 시키고 한다는 점을 유의하셔야 합니다. VRAM-RAM 간의 버스도 서로 경쟁하는 상황이 생길 수 있습니다.)

그래서, 어차피 copy 할 거라면, 큰 사이즈를 한번에 copy 하는게 더 효율적 일 수 있습니다.

아니면, 최소한 일정 크기 이상의 데이터를 모아서 copy하는 방법도 고려해 볼 수 있습니다.

다음에, 데이터를 전부 생성하는데 시간이 많이 걸린다면, 일부만 생생해도 copy 를 시도하는 cudaMemcpyAsync 함수가 있습니다만,

이쪽은 동영상 강의에서는 cover 하지 않고 있습니다. (강의 분량상,이 부분이 커트 되었습니다. ㅠㅠ)

매뉴얼을 참고해서, 지금 구조를 변경하는 것도 가능하겠지만, 실제 속도 면에서는 크게 이득을 보지는 못할 겁니다.

copy 작업을 분산시키는 정도의 기능으로 봐야할 겁니다.

메모리 쪽은 의외의 원인이 있을 수 있어서, 여러가지로 검토를 해 보셔야 할 겁니다.

특히, 되도록 이면, 한쪽은 write 만 하고, 다른 쪽은 read 만 하는 구조로 해야 충돌이 줄어들어서 효율적이 될 겁니다.

도움이 되셨기를 바랍니다.

감사합니다.

 

코딩살구클럽 가입 요청

0

10

2

정처기 26-2회. 9번 질문드립니다!

0

26

1

이론 보면서 질문이 있습니다.

0

31

2

정보처리기사 실기 26년 2회 SRT 스케줄링 문제 단위 질문

0

38

2

유튜브(정보처리기사 실기 | 26년 2회 기출문제 코드 해설)

0

53

2

262 정처기 실기 C언어코딩

0

24

1

정보처리기사 262 실기 Hash(해시) 질문

0

44

2

코딩살구클럽

0

29

2

static 변수 질문입니다.

0

36

2

파이썬 4강 질문입니다.

0

47

2

코딩살구클럽가입

0

27

2

모의고사 1회 3번문제

0

75

3

41강 30:10

0

51

2

이론 공부법 질문 있습니다.

0

72

2

부모의 생성자 관련 질문

0

50

2

시험지 문제에 필기해도 되나요?

0

59

3

41강 11:23

0

45

2

4강파이썬 질문입니다

0

43

2

코딩 살구 클럽 가입 요청드립니다!!

0

50

2

해당 문제의 private test case가 잘못 기입되어 있는 것 같습니다.

0

40

1

try-catch 핸들러명

0

55

2

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

0

166

2

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

0

379

1

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

0

442

1