是否有针对mac os X 10.8的opencl profiler?

时间:2012-10-07 18:28:17

标签: macos opencl osx-mountain-lion gpu-programming

我试图找到我的OpenCL内核的瓶颈,是否可以在mac os X上配置OpenCL程序?我在http://www.gremedy.com/上找到了gDebugger,但它需要10.5或10.6才能运行。 AMD SDK仅支持Linux和Windows。

Mountain Lion有探查器吗?

1 个答案:

答案 0 :(得分:1)

您的分析信息有多详细? 可以使用内置的内置分析器吗?
可以使用CL_QUEUE_PROFILING_ENABLE标志创建OpenCL队列。

通过这种方式,您可以查看您执行的每个内核:
什么时候

  • 入队
  • 提交给您OCL-Device
  • 开始

使用 C ++ - Bindings ,队列的创建可能如下所示:

_queue = new cl::CommandQueue(_context, _device, CL_QUEUE_PROFILING_ENABLE );

分析信息的提取如下所示:

1)保存您想要分析的排队内核提供的事件对象(在数组中)。

cl::Event evt;
_queue->enqueueNDRangeKernel( _kernel, cl::NullRange, _range, cl::NullRange, NULL, &evt); 

2)执行队列后,提取分析信息

std::vector<cl::Event> evts;

//add all events to this vector here
//cl::Event evt;
//_queue->enqueueNDRangeKernel( _kernel, cl::NullRange, _range, cl::NullRange, NULL, &evt); 
//evts.push_back(evt);

uint64_t param;
for (unsigned int i=0; i<evts.size(); i++)
{
    evts[i].getProfilingInfo(CL_PROFILING_COMMAND_QUEUED, &param);
    printf("%u: %llu", i, param);
    evts[i].getProfilingInfo(CL_PROFILING_COMMAND_SUBMIT, &param);
    printf(" %llu", param);
    evts[i].getProfilingInfo(CL_PROFILING_COMMAND_START, &param);
    printf(" %llu", param);
    evts[i].getProfilingInfo(CL_PROFILING_COMMAND_END, &param);
    printf(" %llu\n", param);
}