すべての OpenCL のアピコールをキャプチャするミドルウェアのコーディングを開始するための最良の方法は何かと考えていました。その後、別のシステムでトレースを再生するプログラムを作成できます。
これには、ドライバーに特別なフックは必要ないと思います。もしそうなら、私たちはそれを行うことができないと思います。
インターネット上で例を見つけることができませんでした。ウェブサイトや本などのリソースを知っている場合は、お知らせください。
すべての OpenCL のアピコールをキャプチャするミドルウェアのコーディングを開始するための最良の方法は何かと考えていました。その後、別のシステムでトレースを再生するプログラムを作成できます。
これには、ドライバーに特別なフックは必要ないと思います。もしそうなら、私たちはそれを行うことができないと思います。
インターネット上で例を見つけることができませんでした。ウェブサイトや本などのリソースを知っている場合は、お知らせください。
ラッパー ライブラリ (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 に対してアプリケーションをリンクします。ただし、多くの定型コードを作成する必要があります。