- ベストアンサー
CPU稼働率を上げるには?
C言語にてプログラムを組み,計算をさせているのですが,計算が複雑で時間が数時間かかってしまいます. しかし,CPU稼働率を見ると,50%程度です.100%近くまで稼働率があがると,その分,計算時間も短縮されるのではないかと思うのですが,100%まであげるにはどうすればよいのか分からず,教えていただきたく思います. なお,動作環境は,WindowsXPです.よろしくお願いします.
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
1cpuなら単純なループしただけで100%使えます。 ex) for(i=0;i<10000;i++)for(j=0;j<10000;j++){int k=i+j;} 100%にならないなら、なんらかの待ちの処理を行う関数、API等を内部で呼び出しているか、 複数のCPUのマシンであるか、HTが有効になっているマシンと思われます。 50%であるなら、2CPUかHTであろうと思います。 前者であれば、マルチスレッドにして計算部分と待ちを含む部分(表示、UI等)を分離し、計算スレッドでは計算以外は極力何もしない、 後者であれば計算を複数プロセス、スレッドで並行動作できるような構造にして計算を行うとなると思います。 プライオリティの制御はCPUアイドル時間が多い状況ではほとんど効果がないと思います。
その他の回答 (2)
> 他のプロセスは使ってないのですが Windowsが起動しています。Windowsだけでも確か、十数個のプロセスが起動することになるのではないでしょうか?(ユーザー管理、タスク管理、シェル、Idle管理等々)シェルとその他不要なサービスはそれぞれの方法でシャットダウンさせることは出来ますが、ユーザー関係は確か、シャットダウンさせることが出来なかったと思います。 > ちなみにfortranの場合はどうでしょうか? fortranを動かしているプロセスの優先度を上げます。CreateProcess APIの引数で指定できますね。
お礼
お忙しい中,回答していただきましてありがとうございました.
計算処理を行うプロセスの優先度を上げることで、CPUに時間を割り当ててもらえる量が増え、結果CPU占有時間が上がります。 ただし、システムプロセスは"高(HIGH_PRIORITY_CLASS)"に設定されているので、"リアルタイム(REALTIME_PRIORITY_CLASS)"に設定すると危険です(システムが動かなくなる場合があります)。 "やや高い(ABOVE_NORMAL_PRIORITY_CLASS)"がちょうど良いでしょう(それでも構わないというのならば、"高"以上でも構いません)。 それよりも、あまりに時間のかかる計算でしたら、分散コンピューティングやアルゴリズムの見直しなど、別の方法を検討すべきかもしれません。 優先度を上げたところで、せいぜい2分かかる処理が1分30秒に短縮できる程度ですので…。
お礼
お忙しい中,回答していただきましてありがとうございました.
補足
回答ありがとうございました.他のプロセスは使ってないのですが,cpu使用率を上げるにはどうしたらいいのでしょうか?ちなみにfortranの場合はどうでしょうか?
お礼
ご察しのとおり,CPUが複数でした.参考になりました.ありがとうございます.