2

AMDs APP OpenCL 実装と JOCL バインディングを使用して、Java 自動リソース管理を使用して汎用ブラケット プロファイラーを作成しようとしています。基本的な考え方は次のとおりです。

class Timer implements AutoCloseable {
    ...
    Timer { 
        ...
        clEnqueueMarker( commandQueue, startEvent );
    }

    void close() {
        cl_event stopEvent = new cl_event();
        clEnqueueMarker( commandQueue, stopEvent );
        clFinish( commandQueue );
        ... calculate and output times ...
    } 
}

私の問題は、マーカー コマンド イベント (stopEvent および startEvent) のプロファイリング情報が利用できないことです。これは、a) コマンド キューに CL_QUEUE_PROFILING_ENABLE を設定し、b) コマンド キューをフラッシュして待機し、停止イベントと開始イベントがエラーなしで CL_COMPLETE であることを確認しているにもかかわらずです。

私の質問は、プロファイリングは AMD OpenCL のマーカー コマンドでサポートされていますか? そうでない場合、仕様で明示的に禁止されていますか (この効果については何も見つかりませんでした)? ありがとう。

4

2 に答える 2

2

仕様を再確認しましたが、得られるものは正常であるように思えます (以前はその詳細にあまり注意を払っていませんでしたが)。プロファイリングに関するセクション 5.12 で、標準は次のように述べています。

このセクションでは、コマンド キューにコマンドとしてエンキューされる OpenCL 関数のプロファイリングについて説明します。参照される特定の関数は次のとおりです。 clEnqueueTask および clEnqueueNativeKernel。

そのため、clEnqueueMarker() 関数はリストに含まれておらず、返された CL_PROFILING_INFO_NOT_AVAILABLE 値は理にかなっていると思います。

于 2013-06-17T10:14:52.883 に答える
1

私はちょうどこれを試してみましたが、今はうまくいくようです。AMD 7870 を搭載した Windows 10 と、Nvidias Titan Black および Titan X カードを搭載した Linux でテスト済み。

OpenCL 1.2 仕様には、@CaptainObvious で引用された段落がまだ含まれています。機能はまだ不足していclEnqueueMarkerますが、プロファイリング情報は問題なく取得できています。

マーカー イベントの開始時間と終了時間は常に同じです。これは非常に理にかなっています。

ところで。clEnqueueMarkerOpenCL 1.2 で廃止され、に置き換える必要がありclEnqueueMarkerWithWaitListます。

于 2016-09-07T19:15:38.600 に答える