我想知道开始编写将捕获所有OpenCL apicalls的中间件的最佳方法是什么。然后我可以编写一个程序来重放不同系统上的跟踪。
我假设这不需要驱动程序中的任何特殊挂钩。如果是这种情况,那么我想我们将无法做到这一点。
我在互联网上找不到例子。如果您了解任何资源 - 网站或书籍,请告诉我们吗?
答案 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相关联。但是,你必须编写很多样板代码。