0

すべての OpenCL のアピコールをキャプチャするミドルウェアのコーディングを開始するための最良の方法は何かと考えていました。その後、別のシステムでトレースを再生するプログラムを作成できます。

これには、ドライバーに特別なフックは必要ないと思います。もしそうなら、私たちはそれを行うことができないと思います。

インターネット上で例を見つけることができませんでした。ウェブサイトや本などのリソースを知っている場合は、お知らせください。

4

1 に答える 1

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*/);
}

libopencl.so ではなく myopencl.so に対してアプリケーションをリンクします。ただし、多くの定型コードを作成する必要があります。

于 2016-05-30T15:05:56.727 に答える