Die Messung der Ausführungszeit der OpenCL-Kernel

Habe ich die folgende Schleife, die die Zeit misst, die von meinem Kernel:

double elapsed = 0;
cl_ulong time_start, time_end;
for (unsigned i = 0; i < NUMBER_OF_ITERATIONS; ++i)
{
    err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, &event); checkErr(err, "Kernel run");
    err = clWaitForEvents(1, &event); checkErr(err, "Kernel run wait fro event");
    err = clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_START, sizeof(time_start), &time_start, NULL); checkErr(err, "Kernel run get time start");
    err = clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_END, sizeof(time_end), &time_end, NULL); checkErr(err, "Kernel run get time end");
    elapsed += (time_end - time_start);
}

Dann Teile ich elapsed durch NUMBER_OF_ITERATIONS um die endgültige Schätzung. Ich befürchte allerdings, der Zeitpunkt der Ausführung der einzelnen kernels ist zu klein und daher kann die Unsicherheit in meiner Messung. Wie kann ich Messen die Zeit, die für alle NUMBER_OF_ITERATIONS Kernel kombiniert?

Können Sie vorschlagen, ein profiling-Instrument, das helfen könnte, da ich nicht benötigen Zugriff auf diese Daten programmgesteuert. Ich benutze NVIDIA-OpenCL.

InformationsquelleAutor user1096294 | 2014-05-08
Schreibe einen Kommentar