WindowsCE上で動作するアプリケーションがCPUリソースをどの程度使用しているのかを測定したいと思っています。具体的には、CPU使用率が何%、というのではなく、一定時間内に何命令実行しているのかを測定したいと思います(その結果、何MIPSのCPU上で動作するのであれば、CPU占有率は何%という言い方がしたい)。


このような目的を満たすには、どうすればいいでしょうか? アプリケーションのソースコードに○○を埋め込め、のようにソースコードにアクセスできることを前提としていただいて構いません。

回答の条件
  • 1人2回まで
  • 登録:2006/10/10 16:27:09
  • 終了:2006/10/16 09:48:41

回答(3件)

id:ardarim No.1

ardarim回答回数896ベストアンサー獲得回数1442006/10/10 22:41:23

ポイント50pt

GetThreadTimes APIを使うことで、対象のスレッドが起動してから現在までに消費したCPU時間の累計(カーネルモード動作時間+ユーザーモード動作時間)を得ることができます。

一定時間ごとにこのAPIでCPU時間を計測し、その差分を計算することで一定時間にそのスレッドが何ms分CPU時間を消費したかが得られます。


あとは動作クロックとMIPS、CPU消費時間から一定時間に動作した命令数の概算が得られるはずです。

id:mfunaki

なるほど。試してみることにします。

引き続き、別の方からも回答をお待ちしています。

2006/10/10 23:05:20
id:kurukuru-neko No.2

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/10/11 00:23:45

ポイント50pt

特定のアプリケーション単独

で動作していれば #1のGetThreadTimesで可能ですが。

(但し複数スレッドだと全スレッドを合計する必要があります)

なんらかのアプリが間接的に連携してているのであれば

全体のCPU利用率も必要。

(例えば各種LAN等)

GetIdleTime / GetTickCount

http://msdn.microsoft.com/library/default.asp?url=/library/en-us...

例えば、1秒に1回呼び出されるとした場合

if( 二回目 ) {

直前の計測した時間との差が経過時間と実際の

アイドル時間(CPUの利用率)

lIdleTime2 = GetIdleTime();

lTickCount2= GetTickCount();

}

lTickCount = GetTickCount();

lIdleTime = GetIdelTime();

※:MIPSの計算は、実際には計算出来ないので

時間の割合で計算する。

   

================================================

http://bbs.wince.ne.jp/ch1/mqbbs.cgi?MODE=MSG&NUM=10144&...

id:mfunaki

なるほど。今回の私の目的に関して言えば、単独アプリケーション(ただし、複数スレッド)なので、全体のCPU利用率とはむしろ違う(全体のCPU使用率から特定アプリのCPU使用率を求め、当該アプリ、というよりモジュールに対してある(低めの)優先度を割り当てた場合でも、一定のターンアラウンドタイムを保証したい)のですが、参考になりました。

ありがとうございました。

2006/10/11 09:50:57
id:furutanian No.3

furutanian回答回数112ベストアンサー獲得回数142006/10/11 00:29:07

ポイント25pt

ちょっと否定的な見解ですが、ご参考になれば。

MIPSという単位は、もはや過去の概念です。

http://ja.wikipedia.org/wiki/MIPS

現代のCPUはキャッシュやらパイプラインやら分岐予測やらで、1命令の実行時間には数十倍以上の差が生じてます。

30年前のZ80というCPUでさえ命令の種類によって1命令の実行に必要な時間に1~4クロックというバラつきがあるので、MIPSには最大で4倍の差が出ます。

MIPSはCPUが遅く、メモリアクセスクロックがCPUクロックにほぼ同期していた頃の概念です。現代のCPUでは、クロックに比例してMIPSは向上しませんし、CPUキャッシュの容量や戦略、メモリの速度、プログラムの書き方、コンパイラの質によってもMIPSは大きく変化してしまいますので、CPUの性能指標としてはまったく意味を持ちません。また、CPU占有率で考えると、周辺のI/Oが遅くなるほどCPU占有率は下がりますので、I/Oの速度にも影響を受けます。

どうしてもCPUクロックやMIPSで性能評価をしたい場合、その他の要素をすべて固定した上で、3点程度でベンチマークした実測値を元に推測するのが妥当だと思います。

id:mfunaki

CPUのMIPS数に関心があるのではなく(それであれば上述の意見には同意できます)、あるアプリケーションなりモジュールのインストラクション数に興味があるのです。

それによって、当該アプリケーションやモジュールにある優先度(CPU使用率)を割り当てた際のターンアラウンドタイムを見積もりたいと考えています。

つまり、CPUに負荷をかけないように、かつ一定の応答時間を確保したい時の優先度の割り当て方を求めるベースとして用いたいわけです。

2006/10/11 09:55:59

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません