2016-12-29 7 views
2

GPU가 paralleled computation 일 때 실제로 빠르며 15-30 (일부는 심지어 50으로보고되는) 시간 동안 CPU를 수행하지만, GPU 메모리는 매우 제한적입니다 CPU 메모리와 GPU 메모리와 CPU 간의 통신 속도가 빠르다.커널을 실행하는 동안 데이터를 GPU로 전송

GPU 램에 맞지 않는 데이터가 있지만 우리는 여전히 을 사용하여 계산하는 것이 궁금합니다. 우리가 할 수있는 일은 데이터를 조각으로 나누어 하나씩 GPU에 공급하는 것입니다.

GPU에 대용량 데이터를 보내려면 시간이 걸릴 수 있습니다. 데이터 조각을 두 개로 나누고 전반부를 공급하고 커널을 실행 한 다음 커널이 실행되는 동안 나머지 절반을 공급한다면 어떻게 될지 생각할 수 있습니다. 데이터 전송이 진행되어야하기 때문에 계산이있는 동안 우리는 시간을 절약해야한다는 논리에 의해

, 희망는 직업 및 완료되면, 그것을 잘, 그것은 새로운 데이터를 대기 위해 필요없이 작업의 계속, 단지 수 방해하지 통로.

나는 cpu에 익숙하지 않은 gpgpu에 익숙하지 만 간단한 cuda 코드를 실험 해본 결과 kerner가 실행 중이면 cudaMemcpy이 CPU와 GPU간에 데이터를 전송하는 데 사용됨을 알았습니다. 커널이 끝날 때까지 기다렸다가 그 일을 할 것입니다.


내 질문에, 그것은 하나의 예를 표시하거나 그것을 할 수있는 방법에 대한 몇 가지 정보 소스를 제공 할 수 위 그렇다면 설명한 것과 같은 작업을 수행 할 수 있습니다?

감사합니다.

+0

나는 더 나은 잡동사니가 나오길 원한다. 정말 대단 하시겠습니까? 고마워요! –

답변

6

은 가능한

네, 가능 전술 한 것과 같은 일을 수행하는 것입니다. 당신이 설명하는 것은 파이프 라인 알고리즘이며, CUDA는이를 가능하게하는 다양한 비동기 기능을 가지고 있습니다.

asynchronous concurrent execution section of the programming guide은 작동하기 위해 CUDA의 필수 요소를 다룹니다. 귀하의 예를 사용하려면 cudaMemcpy의 비 차단 버전 인 cudaMemcpyAsync이 있어야합니다. CUDA 스트림을 이해하고 사용하는 방법에 대해 알아야합니다.

나는 또한 필요한 대부분의 것을 다루는 this presentation을 제안 할 것이다.

마지막으로 here이 작업 된 예입니다. 이 특정 예제는 CUDA 스트림 콜백을 사용하지만, 기본적인 파이프 라이닝에는 필요하지 않습니다. 이들은 추가 호스트 지향 프로세싱을 파이프 라인의 다양한 지점에서 비동기 적으로 트리거 할 수 있지만 데이터의 기본 청크 및 처리가 진행되는 동안 데이터 전달은 스트림 콜백에 의존하지 않습니다. 또한 그 답변에 링크 된 CUDA 샘플 코드가 있으므로 학습/학습에 유용 할 수 있습니다.

+0

빠른 답을 보내 주셔서 감사합니다. –