我想知道开始编写将捕获所有 OpenCL apicall 的中间件的最佳方法是什么。然后我可以编写一个程序在不同的系统上重放跟踪。
我假设这不需要驱动程序中的任何特殊钩子。如果是这种情况,那么我想我们将无法做到这一点。
我在互联网上找不到示例。如果你知道任何资源——网站或书籍,你能告诉我吗?
我想知道开始编写将捕获所有 OpenCL apicall 的中间件的最佳方法是什么。然后我可以编写一个程序在不同的系统上重放跟踪。
我假设这不需要驱动程序中的任何特殊钩子。如果是这种情况,那么我想我们将无法做到这一点。
我在互联网上找不到示例。如果你知道任何资源——网站或书籍,你能告诉我吗?
Develop wrapper library (say, myopencl.so), link it against system OpenCL library (say, libopencl.so).
In myopencl.so, implement entry points for all OpenCL API calls as follows:
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*/);
}
Link your application against myopencl.so instead of libopencl.so. You'll have to write a lot of boilerplate code, though.