- ベストアンサー
サイクルカウントの方法
現在大学にてC言語でプログラムを組んでいますが、上からサイクル数をカウントして速度評価をしろと言われました。 しかしプログラムについてあまり詳しくなく、参考書などで調べましたが、さっぱりわかりませんでした。 Googleで調べた所、唯一"clock.h"というヘッダファイルと、start_counter();、get_counter();というのを用いているものを見つけましたが、どうやらclock.hは通常のコンパイラには入っておらず使えないとの事でした。 該当するclock.hも見つからず、どうしようもなくなってしまったので、こちらの方に質問させていただく事にしました。 上のclock.hを用いない場合、サイクル数のカウントとはどのようにして行えばいいのでしょうか? また、上のclock.hの入手先やヘッダファイルソースがあるサイトをご存知でしたらご教授願います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
本当にサイクル数がほしければ, CPU が持っているカウンタを使わざるをえないような気がするなぁ. Intel の PentiumPRO 以降なら http://www.hpcs.is.tsukuba.ac.jp/~msato/pdplab/timer-collection/#PPro にある方法で対応できるかも (アセンブリ部分は適宜修正すること). ちなみに Intel だと「CPU のクロック数」がそのままもらえるけど, AMD の Athlon とかだと「CPU のクロック数」にはならないはずです (FSB で数えたクロック数になるんだったかな?) DirectX のマルチメディアタイマとか QueryPerformanceCounter() を使えば「それなり高精度」ではありますけど... 「サイクル数」っていわれちゃうと却下だよなぁ.
その他の回答 (1)
- php504
- ベストアンサー率42% (926/2160)
time.hのclock( )関数は使えませんか 質問するときはOSやコンパイラを書かれたほうがいいですよ 回答がしやすくなりますので
補足
回答ありがとうございます。 環境の記載を忘れておりました。 大変失礼しました。 OS…Windows XP Home コンパイラ…Microsoft Visual studio 2005 です。 大変初歩的な質問なのですが、サイクル数のカウントというのがいまいち理解できておりません。 Clock()関数は、以前秒数計測として用いておりましたが、CLOCKS_PER_SECで割らない場合は、サイクル数のカウントをしているという事になるのでしょうか? 初歩的な質問で申し訳ありませんが、ご教授お願い致します。
お礼
回答ありがとうございます。 サイクル数での測定というのは(私には)かなり難しいようですね…。 QueryPerformanceCounter()も時間計測の方で用いた事がありますが、やはりサイクル数という意味合いではちょっと違うのでしょうか…。 取り合えず念のために皆様のご提案方法で各自プログラムを組んでおく事にします。 ありがとうございます。