【问题标题】:Is there an opencl profiler for mac os X 10.8?是否有适用于 mac os X 10.8 的 opencl 分析器?
【发布时间】:2012-09-28 02:30:00
【问题描述】:

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

Mountain Lion 有分析器吗?

【问题讨论】:

  • 嗨,帕维尔,我的回答对您有帮助吗?
  • 感谢您的回答,但我需要一个真正的分析器/分析器来查看内核代码的哪一部分必须改进。

标签: macos opencl osx-mountain-lion gpu


【解决方案1】:

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

这样你就可以看到你执行的每个内核:
当它已经

  • 已入队
  • 已提交给您 OCL 设备
  • 开始
  • 已结束

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-03
    • 2012-08-01
    • 2013-03-03
    • 2014-04-14
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多