Discussion:
CPU稼働率を上げる方法
(too old to reply)
Toyama
2005-12-28 10:03:02 UTC
Permalink
VC++6.0のWin32で開発しています。
CPU稼働率を上げる方法が分からなく困っています。
手近に書籍等もなくほとんど調べることが出来ません。
VC++で稼働率を上げる方法ご存知の方いましたら
教えて頂けないでしょうか。宜しくお願いします。
UETA, Shin-ichi
2005-12-28 10:13:10 UTC
Permalink
こんにちは、植田です。回答ではありません。
Post by Toyama
CPU稼働率を上げる方法が分からなく困っています。
何を以って稼働率としているのでしょうか?

無限ループを書けばいくらでもCPUの稼働率は100%に
なりますが、おそらくそんなことを意図した質問ではない
と思いますので、その目的を明示した方がよろしいかと。

平行する処理をマルチスレッド化して待ちになる状態を
できるだけ減らすとか、そういったこと?
--
植田システム設計事務所
Ueta System Design Studio
http://www.usdesign.jp/
植田真一
mailto:***@usdesign.jp
Toyama
2005-12-28 10:37:02 UTC
Permalink
説明不足だったかもしれません
やりたいことはアプリケーションが使用しているCPU負荷率のことなのですが、
他のアプリケーションよりもCPU占有率(使用している割合)を多くしたい
ということを考えていますが可能なのでしょうか。
Post by UETA, Shin-ichi
こんにちは、植田です。回答ではありません。
Post by Toyama
CPU稼働率を上げる方法が分からなく困っています。
何を以って稼働率としているのでしょうか?
無限ループを書けばいくらでもCPUの稼働率は100%に
なりますが、おそらくそんなことを意図した質問ではない
と思いますので、その目的を明示した方がよろしいかと。
平行する処理をマルチスレッド化して待ちになる状態を
できるだけ減らすとか、そういったこと?
--
植田システム設計事務所
Ueta System Design Studio
http://www.usdesign.jp/
植田真一
UETA, Shin-ichi
2005-12-28 11:04:23 UTC
Permalink
どうも、植田です。
Post by Toyama
他のアプリケーションよりもCPU占有率(使用している割合)を多くしたい
まずは、tamatamaさんのポストにあるように、プロセスやスレッドの
優先度を上げることを検討してみては?

Scheduling Priorities
http://msdn.microsoft.com/library/en-us/dllproc/base/scheduling_priorities.asp
--
植田システム設計事務所
Ueta System Design Studio
http://www.usdesign.jp/
植田真一
mailto:***@usdesign.jp
Toyama
2005-12-29 01:03:02 UTC
Permalink
こんにちは。遠山です。
プロセスのハンドルを取得して以下のようにして実行してみました。
他の方法も試してみましたが変更前とほとんど変わりありませんでした。
目的としては今よりも処理速度を上げたいのですが、倍近く処理速度
を上げたいと思っています。

GetWindowThreadProcessId( hwnd, &Processid );
hProcess = OpenProcess( PROCESS_SET_INFORMATION, FALSE,
Processid );
SetPriorityClass( hProcess, REALTIME_PRIORITY_CLASS );
Post by UETA, Shin-ichi
どうも、植田です。
Post by Toyama
他のアプリケーションよりもCPU占有率(使用している割合)を多くしたい
まずは、tamatamaさんのポストにあるように、プロセスやスレッドの
優先度を上げることを検討してみては?
Scheduling Priorities
http://msdn.microsoft.com/library/en-us/dllproc/base/scheduling_priorities.asp
--
植田システム設計事務所
Ueta System Design Studio
http://www.usdesign.jp/
植田真一
tamatama
2005-12-29 02:29:44 UTC
Permalink
Post by Toyama
プロセスのハンドルを取得して以下のようにして実行してみました。
他の方法も試してみましたが変更前とほとんど変わりありませんでした。
目的としては今よりも処理速度を上げたいのですが、倍近く処理速度
を上げたいと思っています。
一般論として、CPUがアイドリングしてしまう理由を考えれば、必然的に答えが見つかるのでは。

画面表示を含むI/O処理待ち:
カーネルサービス待ち:
優先順位:

たぶん、この順番で待たされるので、そのロスをなくす工夫をすることになるでしょう。

I/O待ちの場合には、セマフォとイベントなどを使って他の処理をさせるなど。
UETA, Shin-ichi
2005-12-29 02:29:14 UTC
Permalink
どうも、植田です。
Post by Toyama
目的としては今よりも処理速度を上げたいのですが、倍近く処理速度
を上げたいと思っています。
tamatamaさんもご指摘のように、アルゴリズムの面も確認して
おきたいのですが、処理速度(というかCPU占有時間)を上げた
いと思っているところにウェイトが発生するような条件は入って
いないでしょうか?
--
植田システム設計事務所
Ueta System Design Studio
http://www.usdesign.jp/
植田真一
mailto:***@usdesign.jp
tamatama
2005-12-28 10:17:35 UTC
Permalink
Post by Toyama
VC++6.0のWin32で開発しています。
CPU稼働率を上げる方法が分からなく困っています。
手近に書籍等もなくほとんど調べることが出来ません。
VC++で稼働率を上げる方法ご存知の方いましたら
教えて頂けないでしょうか。宜しくお願いします。
稼働率を上げるAPIはなく、優先順位を上げるAPIを用いると思うのですか。

SetThreadPriority
SetPriorityClass

ちなみにWindows 95/MEでは、あまり効果がなかったような記憶が。

さらに、どんな、チューニングをしたいのでしょう?
 表示速度ですか?
 数値計算ですか?

たぶん、VC++に対して効率を上げるというよりは、アルゴリズムに対して工夫するので、

万能な方法がないのでは。
Loading...