Mesurer le temps d'exécution d'OpenCL noyaux

J'ai la boucle suivante, qui mesure le temps de mes noyaux:

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);
}

Puis-je diviser elapsed par NUMBER_OF_ITERATIONS pour obtenir l'estimation finale. Cependant, je crains que le temps d'exécution de l'individu noyaux est trop petite et, par conséquent, peut introduire de l'incertitude dans ma mesure. Comment puis-je mesurer le temps pris par tous les NUMBER_OF_ITERATIONS grains combinés?

Pouvez-vous proposer un outil de profilage, ce qui pourrait aider à cela, que je n'ai pas besoin d'accéder à ces données par programmation. J'utilise NVIDIA OpenCL.

InformationsquelleAutor user1096294 | 2014-05-08