2013-10-16 2 views
0

보다 오래 걸립니다 내가 오픈 CL 프로그램을 작성하고 난이OpenCL을 시작 엔드 프로파일 시간이 실제 지속 시간

Loop for MultipleGPU{ 
clEnqueueNDRangeKernel(commandQueues[i], kernel[i], 1, null, 
     global_work_size, local_work_size, 0, new cl_event[]{userEvent}, events[i]); 
clFlush(commandQueues[i]); 
} 

long before = System.nanoTime(); 

// Set UserEvent = Complete so all kernel can start executing 
clSetUserEventStatus(userEvent, CL_COMPLETE); 

// Wait until the work is finished on all command queues 
clWaitForEvents(events.length, events); 

long after = System.nanoTime(); 

float totalDurationMs = (after - before)/1e6f; 

...profiling each events with CL_PROFILING_COMMAND_START and CL_PROFILING_COMMAND_END... 

처럼 내 커널이 UserEvent에이 보장 실행하는 동시에 커널 실행됩니다. 출처 : [Reima의 답변] : How do I know if the kernels are executing concurrently?. 프로필 시간 시작 엔드는 총 지속 시간보다 더 오래 걸렸다 이유

Total duration :37.800076ms 
Duration on device 1 of 2: 38.037186 
Duration on device 2 of 2: 37.85744 

누군가가 나에게 설명 할 수 :

그리고 나는 2 테슬라 K20M GPU 하나의 시스템에서이 결과를 받고 있어요?

고맙습니다.

답변

0

다음을 읽어보십시오. Timer Accuracy.

CPU주기를 얻기가 힘들지 만 않는다면 (보통 어렵지만) 시간을주기 위해 시스템 호출을 신뢰해서는 안됩니다. 일반적으로 정확도는 +/- 1ms입니다. 그러나 GPU 타이밍은 매우 정확합니다 (몇 나노초 수준). 대신에이를 사용하십시오.

편집 : 즐거움을 위해 테스트하려면 : 커널을 1000 번 대기시킨 다음 각 실행 시간을 합친 다음 시스템 시간과 비교하십시오. 이 경우 시간의 정확도가 실행 시간 (38 초)보다 훨씬 적기 때문에 절대 높아서는 안됩니다.

관련 문제