2012-11-28 2 views
0

동시 복사를 실행할 때 커널 작업 :
dataCopy 작업의 2 배인 커널 런타임을 갖고 있다면 커널 당 2 개의 복사본을 얻을 수 있습니까?
내가 보는 스트림 예는 1 : 1 관계를 보여줍니다. (복사 시간 = 커널 실행 시간.) 뭔가 다른 것이있을 때 어떤 일이 발생하는지 궁금합니다. 매번 커널을 실행할 때 항상 한 번의 복사 작업 (최대)이 있습니까? 또는 복사 작업이 커널 시작과 독립적으로 실행됩니까? 즉, 실행시 & 복사 시간이 그렇게되면 모든 커널 시작에 대해 5 개의 복사 작업을 완료 할 수 있습니다.
가 (. 나는 커널 시작하기 전에 큐에 얼마나 많은 복사 작업을 알아 내려고 노력하고있어)병렬 : 짧은 복사본, 긴 커널

하나 하나에 : (시간을 복사 = 커널 실행 시간)
< --stream1Copy -> < --stream2Copy ->
.............................. < -stream1 커널 ->

2 대 1 : (복사 시간 = 1/2 커널 실행 시간)
< -stream1 복사 -> < -stream2 복사 -> < -stream3 복사 ->
............................ < ---------- stream1Kernel --------- --->

답변

1

커널 시작마다 두 개 이상의 복사본을 가질 수 있습니다. 이중 복사 엔진이있는 장치의 한 방향 당 하나의 복사본 만 특정 시간에 특정 GPU로 실행될 수 있지만 완료되면 다른 GPU가 즉시 시작될 수 있습니다. 해당 커널 시작 스트림 이외의 스트림에서 발행 된 비동기 사본은 niether 스트림이 스트림 0이라고 가정 할 때 해당 커널 시작과 완전히 비동기 적으로 실행됩니다 (이것은 또한 연결된 호스트 측 버퍼를 만들기 위해 고정 된 메모리, 즉 cudaHostAlloc를 사용한다고 가정합니다).

우수 사례 가이드에서 relevant section을 읽어 보시기 바랍니다.

계산 및 복사의 1 : 1 분석이 자주 나타나는 이유는 복사 된 데이터가 커널 호출에 의해 소비되거나 (또는 ​​생성되는 것으로 가정하기 때문에) 논리적으로 우리는 이 방법으로 데이터. 그러나 코드를 일련의 복사본으로 구성하는 것이 더 쉽다면 아무 문제가 없어야합니다. 당연히 모든 데이터를 단일 cudaMemcpy 호출로 일괄 처리 할 수 ​​있다면 동일한 데이터를 전송하는 복사본의 시퀀스가 ​​약간 더 효율적입니다.

visual profiler는 타임 라인 방식으로, 작업을 커널 데이터를 비교하는 작업을 복사하려고 정확하게 볼 도움이 될 것입니다.

+0

비주얼 프로파일 러에 대한 필자의 이해는 Windows 환경에서만 가능합니다. nonWin env와 비슷한 도구가 있습니까? – Doug

+1

예, 리눅스 환경에서 'nvvp' 명령을 사용하여 시각적 프로파일 러를 실행할 수 있습니다. 또는 CUDA 5가있는 경우 nsight Eclipse Edition 도구에서'nsight' 명령을 실행하여 시각적 프로파일 러에 액세스 할 수 있습니다. 당신은 내가 내 대답에 링크 된 문서, 특히 [이 섹션] (http://docs.nvidia.com/cuda/profiler-users-guide/index.html#visual-profiler)에서 살펴 봐야 할 수 있습니다. –

관련 문제