0

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

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

我在互联网上找不到示例。如果你知道任何资源——网站或书籍,你能告诉我吗?

4

1 回答 1

0

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.

于 2016-05-30T15:05:56.727 回答