4

OpenCL バックエンドを使用して ViennaCL を介して実行するカスタム カーネルがあります。一般的にViennaCLをベンチマークする方法(ドキュメントで提供)と、イベントで直接実行されたときにOpenCLカーネル実行時間を実行する方法(両方ともOpenCLドキュメントとインターネット上の豊富な例で説明されています)を知っていますが、私は2つをどのように組み合わせるかについての損失。

次の例を検討してください。

const char * kernel = ...; // some kernel text
viennacl::ocl::program &testProg = viennacl::ocl::current_context().add_program(kernel, "kernel");
testProg.add_kernel("TestKernel");

viennacl::ocl::kernel &TestKernel = testProg.get_kernel("TestKernel");

// provide kernel arguments, set local and global worker sizes

// START TIMING
viennacl::ocl::enqueue(TestKernel);
viennacl::ocl::get_queue().finish();
// END TIMING

これまでのところ、Boost タイマーを使用して、ViennaCL が PCI-Express を介してデバイスにデータを送信し、キューに入れ、カーネルの実行を終了するのにかかる完全な時間を測定しています。これは許容範囲ですが (私がベンチマークしているのはデータ送信速度に大きく依存しているため、データはかなり大きいため)、カーネルの実際の実行にかかる時間の割合も測定したいと思います。

これは学問的なプロジェクトであるため、正確な測定は、私の主張の成否を左右するのに役立ちます。

4

0 に答える 0