Cum se face un simplu instrument de profilare a programelor OpenCL?

Am sarcina de a crea un instrument de profilare simplu (winOS) pentru analiza performanței/calendarului/evenimentului programelor OpenCL. Poate cineva să dea sfaturi cum să încep?

0

2 răspunsuri

Cel mai simplu și funcționează cu exactitate pe toate platformele:

  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
adăugat
Acest lucru este de ajutor! Mă întrebam că este posibil să se implementeze acest lucru în afara programului OpenCL, pentru a face o aplicare simplă cu GUI minimalist în Visual Studio? Dacă da, puteți explica cum se poate face (conceptual) astfel încât să poată fi utilizat pe diferite programe OpenCL?
adăugat autor pu7nik, sursa
Da, am vrut să prezint un fișier compilat și nu am nici o idee despre modul în care profilele (formele de eșantionare și instrumentele de profilare) lucrează. Păi, presupun că codul de mai sus este instrumentarea formei de profilare. Pentru moment, voi examina metodele de profilare și vă mulțumesc pentru efortul dumneavoastră
adăugat autor pu7nik, sursa
Ai vrut să spui că vrei să trimiți un fișier binar/compilat? în acest caz, aveți de-a face cu simboluri, poate că comanda nm -anC vă va duce undeva, dar nu sunt sigură dacă asta doriți. nm extrage toate simbolurile funcției, deci poate ați putea începe măsurarea timpului după ce clEnqueueNDRangeKernel este apelat.
adăugat autor ardiyu07, sursa
și poate că acest lucru vă va face și undeva: gremedy.com/gDEBuggerCL.php
adăugat autor ardiyu07, sursa

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
adăugat