JOCL ライブラリ (JOGAMP による) を使用していますが、ホストからデバイスへのデータ転送にかかった時間、カーネルにかかった時間、および結果を取得するのにかかった時間を別々に測定できるかどうか疑問に思っていました。
現在、次のようにカーネルを呼び出しています。
queue.putReadBuffer(...).put1DKernel(...).putWriteBuffer(...)
私自身の質問に答えるには ;-) 手順は次のようになります...最初に目的の容量で CLEventList を作成します。カーネルの実行のみを測定したいので、これを 1 に設定します。
CLEventList list = new CLEventList(1);
カーネルをコマンド キューに設定するときに、リストを引数として追加します。
queue.putReadBuffer(...).put1DKernel(..., list).putWriteBuffer(...).finish();
その後、次のように呼び出してタイミングを取得できます。
long start = list.getEvent(0).getProfilingInfo(ProfilingCommand.START);
long end = list.getEvent(0).getProfilingInfo(ProfilingCommand.END);
long duration = end - start // time in nanoseconds
Mode.PROFILING_MODE を有効にしてコマンド キューを初期化することを忘れないでください。