OpenCL:编写一个程序来捕获API调用(或绘制调用)

时间:2016-05-20 00:15:32

标签: opencl middleware replay

我想知道开始编写将捕获所有OpenCL apicalls的中间件的最佳方法是什么。然后我可以编写一个程序来重放不同系统上的跟踪。

我假设这不需要驱动程序中的任何特殊挂钩。如果是这种情况,那么我想我们将无法做到这一点。

我在互联网上找不到例子。如果您了解任何资源 - 网站或书籍,请告诉我们吗?

1 个答案:

答案 0 :(得分:0)

开发包装器库(比如myopencl.so),将其链接到系统OpenCL库(比如libopencl.so)。

在myopencl.so中,为所有OpenCL API调用实现入口点,如下所示:

typdef cl_int (*clEnqueueNDRangeKernel_fptr)(/*arguments here*/);

cl_int clEnqueueNDRangeKernel(/*arguments here*/)
{
    // Do whatever you want to do;

    // Get function pointer from system OpenCL library;
    clEnqueueNDRangeKernel_fptr enqueue_fptr = dlsym("clEnqueueNDRangeKernel");

    // Call actual OpenCL function;
    return enqueue_fptr(/*arguments here*/);
}

将您的应用程序与myopencl.so而不是libopencl.so相关联。但是,你必须编写很多样板代码。