質問: 現在、CUDAを用いたプログラミングを行っています。 そこで、CPU側の処理時間を正確(ミリ秒もしくはマイクロ秒)に測りたいです。 以下のような時間測定用の関数がありますが、結局どれを使えばいいのでしょうか。 * clock() * GetTickCount() * QueryPerformanceCounter()
回答: 文言「処理時間」をどう解釈するかで話は違ってきます。 1.ジョブ投入から終了までの経過時間(その間には CPU は遊んでいるかもしれない) `QueryPerformanceCounter` が面倒くさくなくてよいでしょう。 `GetTickCount` が返す値もこっち。 2.ジョブ投入から終了までに CPU が実際に稼動している時間 [cuda](/questions/tagged/cuda "'cuda' のタグが付いた質問を表示") の処理は主に3つの段階から構成されていて - ホストメモリ->GPU へのデータ転送時間 - GPGPU の計算時間 - GPU->ホストメモリへのデータ転送時間 この間ほとんど CPU は稼動していません (DMAC ががんばってくれているわけで) 。 測定してもあまりうれしくない気がします。 `clock` はこっちですが解像度があまり高くないので `GetProcessTime` が良いでしょう。