¿Cómo hacer una herramienta de creación de perfiles simple para los programas de OpenCL?

Tengo una tarea para hacer una herramienta de creación de perfiles simple (winOS) para el rendimiento/tiempo/análisis de eventos de los programas de OpenCL. ¿Alguien puede dar consejos sobre cómo comenzar?

0

2 Respuestas

El más simple y funciona con precisión en todas las plataformas:

  cl_event perfEvent;
  cl_ulong start=0, end=0;
  float t_kernel;

  /* Enqueue kernel */
  clEnqueueNDRangeKernel(commandQueue, kernel, 1, NULL, globalWorkSize, localWorkSize, 0, NULL, &perfEvent);
  clWaitForEvents( 1, &perfEvent );

  /* Get the execution time */
  clGetEventProfilingInfo(perfEvent, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &start, NULL);
  clGetEventProfilingInfo(perfEvent, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &end, NULL);
  t_kernel = (end-start)/1000000.0f;
  std::cout << t_kernel << std::endl;
0
agregado
Esto es útil! Me preguntaba si es posible implementar esto de alguna manera fuera del programa OpenCL, para hacer una aplicación simple con GUI minimalista en Visual Studio. En caso afirmativo, ¿puede explicar cómo podría hacerse (conceptualmente) para que pueda usarse en diferentes programas OpenCL?
agregado el autor pu7nik, fuente
Sí, quise perfilar un archivo compilado, y no tengo ni idea de cómo funcionan los perfiladores (formas de muestreo e instrumentación de creación de perfiles). Bueno, supongo que el código de arriba está instrumentando la forma de creación de perfiles. Por ahora estudiaré los métodos de creación de perfiles y gracias por su esfuerzo
agregado el autor pu7nik, fuente
¿Quiso decir que quiere perfilar un archivo binario/compilado? en ese caso, se trata de símbolos, tal vez el comando nm -anC te llevará a algún lado, pero no estoy seguro si eso es lo que quieres. nm extrae todos los símbolos de función, por lo que quizás podría comenzar la medición de tiempo después de llamar a clEnqueueNDRangeKernel.
agregado el autor ardiyu07, fuente
y tal vez esto también te llevará a algún lado: gremedy.com/gDEBuggerCL.php
agregado el autor ardiyu07, fuente

Take a look at AMD CodeXL. It's free and it might be just what you are looking for. Inside CodeXL, use the Application Timeline Trace mode (Profile -> Application Timeline Trace), which executes a program and generates a visual timeline that displays OpenCL events like kernel dispatch and data transfer operations.

0
agregado