人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

●質問者: mfunaki
●カテゴリ:コンピュータ
✍キーワード:CPU CPU使用率 MIPS WindowsCE アクセス
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● ardarim
●50ポイント

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

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


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

◎質問者からの返答

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

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


2 ● kurukuru-neko
●50ポイント

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

で動作していれば #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&...

◎質問者からの返答

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

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


3 ● furutanian
●25ポイント

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

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点程度でベンチマークした実測値を元に推測するのが妥当だと思います。

◎質問者からの返答

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ