

現在、CUDAを用いたプログラミングを行っています。  
そこで、CPU側の処理時間を正確（ミリ秒もしくはマイクロ秒）に測りたいです。  
以下のような時間測定用の関数がありますが、結局どれを使えばいいのでしょうか。

  * clock()
  * GetTickCount()
  * QueryPerformanceCounter()


CC BY-SA 3.0
2016-11-24T01:53:47.003
30626
2016-11-24T02:14:16.433
19692
question
c cuda
結局C言語などで正確に時間を計測したいときは何を使えばいいのですか？


文言「処理時間」をどう解釈するかで話は違ってきます。

１．ジョブ投入から終了までの経過時間（その間には CPU は遊んでいるかもしれない）  
`QueryPerformanceCounter` が面倒くさくなくてよいでしょう。  
`GetTickCount` が返す値もこっち。

２．ジョブ投入から終了までに CPU が実際に稼動している時間  
[cuda](/questions/tagged/cuda "'cuda' のタグが付いた質問を表示") の処理は主に３つの段階から構成されていて  
\- ホストメモリ->GPU へのデータ転送時間  
\- GPGPU の計算時間  
\- GPU->ホストメモリへのデータ転送時間  
この間ほとんど CPU は稼動していません (DMAC ががんばってくれているわけで) 。  
測定してもあまりうれしくない気がします。  
`clock` はこっちですが解像度があまり高くないので `GetProcessTime` が良いでしょう。


CC BY-SA 3.0
2016-11-24T02:14:16.433
30628
2016-11-24T02:14:16.433
8589
30626
answer