Como fazer ferramenta de perfil simples para programas OpenCL?

Eu tenho uma tarefa para fazer uma ferramenta de perfil simples (winOS) para análise de desempenho/tempo/evento de programas OpenCL. Alguém pode dar conselhos como começar?

0
adicionado editado
Visualizações: 1

2 Respostas

O mais simples e funciona com precisão em todas as 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
adicionado
Isso é útil! Eu queria saber se é possível implementar isso de alguma forma fora do programa OpenCL, para fazer uma aplicação simples com GUI minimalista no Visual Studio? Se sim, você pode explicar como isso pode ser feito (conceitualmente) para que possa ser usado em diferentes programas OpenCL?
adicionado o autor pu7nik, fonte
Sim, eu pretendia criar um perfil de um arquivo compilado e não tenho idéia de como os criadores de perfis (formas de amostragem e instrumentação de criação de perfil) funcionam. Bem, eu suponho que o código acima é uma forma de instrumentação do perfil. Por enquanto, vou analisar os métodos de criação de perfil e agradeço pelo seu esforço
adicionado o autor pu7nik, fonte
Você quis dizer que você quer criar um perfil em um arquivo binário/compilado? Nesse caso, você está lidando com símbolos, talvez o comando nm -anC irá levá-lo a algum lugar, mas não tenho certeza se é isso que você quer. nm extrai todos os símbolos de função, então talvez você possa iniciar a medição de tempo após clEnqueueNDRangeKernel ser chamado.
adicionado o autor ardiyu07, fonte
e talvez isso também o leve a algum lugar: gremedy.com/gDEBuggerCL.php
adicionado o autor ardiyu07, fonte

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
adicionado