• ベストアンサー

C言語の質問です

C言語の質問です. DWORD の timeGetTime();でプログラムの実行時間を測ったら0だったのに CUT_SAFE_CALL(cutCreateTimer(&timer)); で取得すると時間が測れるってことありますか? timeGetTime();で取得した方は同じプログラムをfor文で何度か繰り返せばようやく違う値が返ってきます.これはやはりおかしいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

timeGetTimeはm秒単位の時間が返りますが、その分解能は1m秒ではありません。 1m秒の違いを区別することができません。 http://msdn.microsoft.com/en-us/library/windows/desktop/dd757629%28v=vs.85%29.aspx > The default precision of the timeGetTime function can be five milliseconds or more, depending on the machine. http://msdn.microsoft.com/ja-jp/library/cc428795.aspx > timeGetTime 関数の既定の精度は、マシンによっては 5 ミリ秒以上になる場合があります。 なので、極短時間の処理を測定すれば、前後で同じ値になる(=経過時間が0になる)場合があります。 また、たまたま値が変わる前後になって、分解能の時間になる場合もあります。 たとえば、5m秒だとすると 開始が 1m秒 終了が 4m秒 なら、それぞれtimeGetTime関数からは 0と0が返るので差が0m秒になります。 開始が 4m秒 終了が 7m秒 なら、それぞれtimeGetTime関数からは 0と5が返るので差が5m秒になります。 どちらも、実際の時間は3m秒で同じです。 CUT_SAFE_CALL(cutCreateTimer(&timer)) の方はわかりません。 CUDAには不案内なもので。 分解能が細かければ、測定できるかもしれません。 ですが、あなたの環境で、そもそもCUDAが使えるかどうか(グラフィックボードは対応しているのか?開発環境は整っているのか?)

cudacuda
質問者

お礼

for文でまわした限り精度は一応1msecみたいです. このプログラム自体が短く0.1msec前後だったため測れたり測れなかったりしたみたいです.ありがとうございました. (CUDAは使えるようにしています.)

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

>timeGetTime();で取得した方は同じプログラムをfor文で何度か繰り返せばようやく違う値が返ってきます.これはやはりおかしいのでしょうか? timeGetTime()の仕様は確認されていますか? http://msdn.microsoft.com/ja-jp/library/cc428795.aspx

関連するQ&A