커널이 AMD GPU에 제출되어 실제로 실행 된 사이에 많은 지연이 있습니다. 내 프로그램은 I/O가 커널을 간섭하지 않도록 블로킹 = CL_TRUE로 블로킹/읽기를 차단하고 있습니다. 그런 다음 clGetEventProfilingInfo를 사용하여 커널 큐잉, 제출, 시작 및 종료에 대한 정보를 얻습니다. 아래의 데이터 (및 코드)는 커널이 약 5 초를 보낸 다음 5 초를 소비 한 것을 나타냅니다. 일반적으로 제출 된 시간은 실행 시간과 같습니다. 커널 실행 지연에 대한 여러 포럼 게시물 (예 : http://devgurus.amd.com/thread/166587)을 살펴 보았지만 해결 방법이없는 것으로 보입니다. GPU가 저전력 모드가 아닌지 확인했습니다. 다른 사람이 이것을 보았습니까? 진단 방법에 대한 제안이 있습니까?OpenCL 커널에서 큰 submit-> start 지연
write 131.000000 ms
kernel queued->submitted 0.022348 ms
kernel submitted->started 5553.957663 ms
kernel started->ended 5529.893060 ms
read 39.000000 ms
1306 cl_ulong end, queued, start, submit;
1307 clGetEventProfilingInfo(jniContext->exec_event,
1308 CL_PROFILING_COMMAND_QUEUED, sizeof(queued), &queued, NULL);
1309 clGetEventProfilingInfo(jniContext->exec_event,
1310 CL_PROFILING_COMMAND_SUBMIT, sizeof(submit), &submit, NULL);
1311 clGetEventProfilingInfo(jniContext->exec_event,
1312 CL_PROFILING_COMMAND_START, sizeof(start), &start, NULL);
1313 clGetEventProfilingInfo(jniContext->exec_event,
1314 CL_PROFILING_COMMAND_END, sizeof(end), &end, NULL);
측정하는 데 사용하는 코드를 추가 할 수 있습니까? 내 말은, 커널을 시작할 때의 전체 코드입니다. – DarkZeros
물론, 전체 코드는 http://pastebin.com/SCpcRrjP에서 얻을 수 있습니다. – agrippa
하나의 커널을 한 번만 실행하는 것을 볼 수 있습니다. 종종 커널의 첫 번째 호출에서 큰 타이밍 결과를 볼 수 있습니다. 많은 OpenCL 구현은 마지막 순간까지 특정 작업을 연기하므로이 작업으로 인해 첫 번째 실행이 후속 실행보다 오래 걸릴 수 있습니다. 커널을 벤치마킹하려면 여러 번 실행해야 할 수도 있습니다. 일부는 이것을 "GPU를 워밍업 (warming up the GPU)"이라고 부릅니다. – Dithermaster