2017-07-11 17 views
0

私はをプログラムで表示したいアプリケーションの一部がmacOSとiOSで消費するGPU時間。 OpenGLとD3DではGPUタイマークエリオブジェクトを使用できます。私は検索し、金属のための何か類似のものを見つけることができませんでした。メーターのGPU時間を計測器などを使わずに測定するにはどうすればいいですか?Objective-Cを使用しています。メタルのGPU時間を測定するにはどうすればよいですか?

答えて

0

スケジュールされたハンドラブロックと完了したハンドラブロックをコマンドバッファに追加できます。それぞれのタイムスタンプを取って比較することができます。ブロックはCPU上で実行されるので、レイテンシはありますが、それはあなたを近づけるはずです。

1

この方法の問題点がいくつかあります:

1)あなたは本当にコマンドバッファ内のGPU側の遅延時間のほとんどを、ないCPUへの往復であるかを知りたいです。これは、シェーダの20個のインスタンスとシェーダの10個のインスタンスを実行する間の時間差としてよりよく測定されます。しかし、この方法は、誤差が2つの測定値に関連する誤差の合計であるため、ノイズを追加する可能性があります。

2)GPUが実行を停止すると、GPUが終了するのを待ちます。もう一度バックアップを開始すると、時計は低電力状態になり、結果を歪曲させるためにかなり時間がかかります。これは重大な問題であり、実際のベンチマークと実際のベンチマークのパフォーマンスを2倍以上に控えている可能性があります。あなたは、スケジュール上のクロックを開始し、完了した上で停止しますが、GPUは、あなたの経過時間が、他のワークロードに費やした時間を含み、他の作業を実行しているビジー状態の場合

3)。 GPUがビジーでない場合は、(2)で説明したクロックダウンの問題が発生します。

この問題は、私が作業したほとんどのベンチマークの場合よりもはるかに難しく、多くのパフォーマンス測定を行っています。それは、時間のマシンの独自の概念を使用して、何が起こっているかの直接的な尺度であるよう

これらの事を測定するための最良の方法は、デバイスのパフォーマンスモニタカウンタに使用することです。私は壁時計の時間を超えてサイクルを報告するものを好むが、それはクロックの旋回を取り除く傾向があるからだが、それについて普遍的な合意はない。 (ハードウェアのすべての部分が同じ周波数で動作しているわけではありません)PMCに基づいて測定する方法については、開発者向けのツールを参照してください。見つからない場合は、PMCに問い合わせてください。

関連する問題