2016-05-20 4 views
0

すべてのOpenCL APIをキャプチャするミドルウェアのコードを作成する最善の方法は何か不思議でした。私は別のシステムでトレースを再生するプログラムを書くことができました。OpenCL:APIコールをキャプチャするためのプログラムの作成(またはコールの呼び出し)

私はこれがドライバーに特別なフックを必要としないと仮定しています。このような場合、私はそれをすることができないだろうと思う。

インターネットで例が見つかりませんでした。ウェブサイトや書籍などのリソースを知っている場合は、教えてください。

+0

あなた自身で何かを試しましたか、尋ねたい具体的なアイデアはありますか?このような疑問は、ちょっとしたものではありません。 – mfa

+0

あなたの最善の策は、khronos.orgからOpenCL ICD(opencl.dll)のソースをダウンロードし、変更し、すべてのキャプチャコードで独自のopencl.dllを作成することです。実際には、このコードを見て回想したことに基づいて、かなり簡単になるはずです。 https://github.com/KhronosGroup/OpenCL-ICD-Loader –

答えて

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に対してアプリケーションをリンクします。しかし、多くの定型コードを書く必要があります。

関連する問題