• ベストアンサー

プログラム上のCPU稼働率低減に関して

C++の簡易なプログラムを長時間実行しっぱなしにしたいのですが、 CPUが常に100%の稼働率になってしまうため、PCが熱暴走してしまうのではないかと心配しております。 対策としてはPCの冷却を徹底することも考えられるのですが、 プログラムを工夫して(例えばメモリの使用領域を設定変更する)CPUの負担を軽減することは可能でしょうか? プログラムの内容は[1000][300000]の配列を宣言し、 1秒間に20回、配列の中身を0~1000まで永遠に書き換え、 その内容をグラフィックで示すものです。 メモリの使用量は膨大になることは覚悟していたのですが、 CPUの稼働率が終始100%になってしまうのは、困っております。 対策をご教授いただけると助かります。 もしくは説明不足な点がありましたらお申し付けください。

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.5

単純な処理なのでCPUが100%になるのは当たり前でしょう。 普通のアプリがCPUが100%にならない理由は、 ・ファイルの読み書き待ちでCPUが空いている。 ・メッセージ待ちでWAITしている。 などなど何らかの理由でCPUに空きが出来るからです。 どうしても100%にしたく無かったら、sleepするのが定番です。その分処理時間は長くなりますので秒間20回は無理でしょうが。これは仕方ありません。この問題はトレードオフなので、どちらかしか選べないと思います。 効果があるかは不明ですが、配列をランダムにアクセスしているなら、シーケンシャルにアクセスすればCPUの仕組みとしては早くなるはずです。

rairarai
質問者

お礼

ありがとうございます。 当方のプログラムは ・メッセージ待ちでWAITしている。 状態でした。 さっそくSleepを使って負荷を低減させてみます。 配列もとりあえず宣言しただけですので、シーケンシャルに アクセスするように改良します。 大変助かりました。

その他の回答 (4)

回答No.4

1秒間に20回と書かれていますがこれはどのようにして実現されていますか? ビジーループまたはsleepなどよる待ち処理が考えられますが、CPUが100%稼動ということですので、以下の状況が考えられます。 ビジーループの場合: CPUの処理能力は足りているがビジーループで100%使い切っている この場合はsleepを使用する方法で待つことでCPU使用率は下がります。 sleepなどによる待ち処理: CPUの処理能力が足りておらずまったくsleepせず処理しっぱなしになっている。 この場合は処理量を減らす(1秒間に10回などにする)ことでCPUの処理能力を上回らないようにすれば、CPU使用率は下がります。 蛇足ですが、本来はCPUに100%の処理を長時間行わせても熱暴走しない状態で使用するのが通常です。もし長時間の高負荷で熱暴走するのであれば、一瞬の高負荷でも熱暴走する可能性があるので、熱対策をするべきです。

rairarai
質問者

お礼

すみません。 ビジーループの状態にしておりました。 グラフィックへの出力待ちの段階で、 間髪入れずにビジーループをかけておりました。 おそらくここの処理速度には余裕がありますので、 早速対策してみます。 ありがとうございます。

  • master000
  • ベストアンサー率33% (16/48)
回答No.3

>ANo.2 1千回とか1万回に1度、ディスクに書き込むのに作業負荷を 考える必要はありません。

rairarai
質問者

補足

すみません。説明不足でした。 書き換えは1000まで行くとまた0から 上書きされますので、メモリ使用量の絶対量は かわりません。 もしもっと処理速度の速い配列のアドレスの設定方法や、 その他対策ご存知でしたらご教授願います。

  • master000
  • ベストアンサー率33% (16/48)
回答No.2

途中結果を保存しながら計算するという方法はいかがでしょうか。 プログラムを停止しても、途中結果を元にそこから再開できるようにプログラムしておくといいですね。 普通のパソコンで熱暴走は考えにくいと思います。

rairarai
質問者

補足

途中経過を保存するというのは、 私の素人感覚では、保存の方が、作業負荷が高く、 余計にPCへの負担がおおきくなるような気がしてしまうのですが、 そんなことはないのでしょうか?

noname#46860
noname#46860
回答No.1

C++をお使いであれば、マルチスレッドにして、適当にSleepすれば回避できるのではないでしょうか? C++ ワーカースレッド Thread.Sleep GetMessage PeekMessage などでググってみられるとサンプルが転がっていると思います。 現役のPGではないので細かなアドバイスができずに恐縮ですが、ヒントになれば幸いです。

rairarai
質問者

お礼

ありがとうございます。 まだワーカースレッドを理解できておりませんが、 挑戦してみたいと思います。

rairarai
質問者

補足

ワーカースレッド調べました。 当方、マイコン制御では何度か使用したことが あるのですが、PCの場合はスレッドで実行するというのは、 10ある処理速度を単純に5:5にしてしまうなどと、 要は限りある処理能力を分けて使うというものでは ないのでしょうか? もしそうであると、現在でもCPUがフル稼働しておりますので、 処理効率が変わらないように思えてしまうのですが、、 無知で申し訳ないです。

関連するQ&A

  • CPUの稼働率が100%UPする

    Windows XPですが、最近になってCPU稼働率が100%超えるようになって冷却ファンがフル回転しています。 稼働率を下げたいですが、どなたか教えてください。 ちなみに、Cドライブ XP 使用率50%です。 Dドライブ VISTA    使用率50%です。 CPUを増設するには・・・・??

  • CPU稼働率100%

    ウィンドウズのUP DATEで Windows Genuine Advantage (正規 Windows 推奨プログラム) 通知ツール (KB905474) をダウンロードして以来、ウィンドウズ UP DATE の自動更新に設定するとCPU稼働率100%から下がらなくなりました。 自動更新を無効にした場合のみCPU稼働率が2~8%くらいに落ち着きます。 セキュリティーソフトは フレッツ クリア です。 どの様にすれば症状改善しますでしょうか? 一応、システムの復元を試しましたがだめでした。。 ご回答宜しくお願い致します。 使用機種は SOTEC デスクトップ PV2270S CPU:celeron 2.70GHz HDD:120G メモリ:768MB

  • CPUの稼働率が100%になってしまう

    類似の質問があるようですが、解消できなかった為質問させて頂きます。 質問は「CPUの稼働率が100%になってしまう」という事についてです。 まず、PCのスペックですが、 CPU:AMD Athlon64 3500+(Socket939 Cache512k/2.2GHz) M/B:MSI RS480M2-IL ケース:WiNDy ALTIUM X Athlon64 メモリ:1024MB グラフィックボード:玄人志向 GF-GT520-LE1GH GeForce GT52 os:windowsXP home(SP1) PCは、知人が自作したPCをHDD無しで貰い、私がHDDを取り付けた状態です。 状況は、 ・HDDをフォーマット ・OSのインストール ・OSが立ち上がった状態(CPU稼働率5%以下) ・IEを立ち上げる(CPU稼働率95%~100%) この時点で、IEを上下にスクロールさせるのも困難です。 ・windowsXP SP3を無理やりインストール ・再起動し、何もアプリケーションを立ち上げない時点で稼働率常時100%となります。 尚、常駐ソフト(ウイルス対策ソフト)、アプリケーション他、グラフィックボードのドライバすら入れていない状況です。 このような場合はどの様な処置をすれば改善できるのでしょうか?教えて頂きたいと思います。 若しくは、解説ページのリンク等でもかまいません。 その他必要な情報は、自作PC素人の私で調べられる事であれば用意致します。 申し訳ございませんが、宜しくお願い致します。

  • CPU稼働率を上げるには?

    C言語にてプログラムを組み,計算をさせているのですが,計算が複雑で時間が数時間かかってしまいます. しかし,CPU稼働率を見ると,50%程度です.100%近くまで稼働率があがると,その分,計算時間も短縮されるのではないかと思うのですが,100%まであげるにはどうすればよいのか分からず,教えていただきたく思います. なお,動作環境は,WindowsXPです.よろしくお願いします.

  • CPU稼働率がずっと高い・・・。

    2週間ほど前に、CドライブとDドライブのパーテーションを変更したのと、外付けHDDを装着したころから、 冷却ファンが何もしない状況でも回わりっぱなしだったため、稼働率を見たら何もしていない状態でも常に 40%~70%を行ったり来たりしています。もちろんその間、冷却ファンは最大で回っています。 そのため、全体の動作も非常に遅くなってしまっています。 ちなみにC・Dドライブともに空き容量は8GB以上あり、CPUはペンティアム4の2.8GHzです。 よろしくお願いします。

  • CPUの稼働率について

    FF XIVのベンチマークを試したのですが、あまりにもコマ落ちがひどいです。 そこでタスクマーネージャーを見てみたら、CPUの稼働率が0~20%をふらふらしていました(ほとんど10%未満で、たまに一瞬だけ上がる程度)。 さらに8コアの内、4コアしか働いていません。 おそらくこれはグラフィックボードに処理をまかせているせいなのだと予想しています。 グラフィックボードはそこまで高性能ではないので、CPUの補助的な役割でいいのですが・・・ CPUの稼働率を100%にする方法を教えてください。 ちなみに動画のエンコード時などは、CPUの稼働率は100%になります。 以下、PCの構成です。 マザーボード:ASUS P8H77-V CPU:Intel Core i7-3770 グラフィックボード:HD7770 1G GDDR5 PCI-E HDMI/DVI-I/DUAL MINI DP OS:Windows 7 Pro 64bit メモリ:12GB SSD:120GB HDD:3TB*1,2TB*2,1.5TB*1 ドライバは全て最新。 OCはしていません。 OSはSSDにインストールしています。 1.5TBのHDDを300GBと1.2TBにパーティション分けして、300GBの方にWindows XP Pro 32bitをインストールしています。 メモリなどの型番も載せた方がいいようなら、補足します。

  • CPUの稼働率が高い

    富士通FMVAH42/W(ノートPC)を使っています。 何もアプリが稼働していない状態でCPUの稼働率がいつも50%を下回ることがなく、70~85%です。 これは正常でしょうか?OFFCEも以前のPCより動作が遅い気がします。 ※OKWaveより補足:「富士通FMV」についての質問です。

  • CPU稼働率 100% になってしまっています。 

    OS Windows2000Proです。タスクマネージャーで見るとCPU稼働率が100%になっています。プロセスを開くとsystemが100%状態です。漢字変換やwebアクセスがとにかく遅くてどうしようもありません。何にCPUを食われているのかわからず、困っています。プロセスでsystemを終了しようにも停止できないため何をどうしてよいか困っています。やはりリカバリするしかないのでしょうか、もし原因と対策がおわかりの方いらっしゃれば教えてください。

  • パソコンのCPUの稼働率について?

    パソコンで映像ファイルとかの編集とか変換作業をしていて、CPUの負荷が気になり、タスクマネージャーでみて見ると、CPUの稼働率が100%でメモリー稼働率が30%で30分位このままの状態です。パソコンはNECのPC-VN770JS6です。長い間100%が続くと壊れないでしょうか?

  • CPUの稼働率を上げるには

    Windows7で、 Intel社core i7(ターボブースト時4-core 8-thread)のCPUを使っているのですが、 ガジェットでCPUメーターというのを表示させてても、メモリの方は結構頻繁に上下したりして、稼働しているなというのを感じるのですが、 CPUの方は、殆どの場合4%とか、多くなっても8%とかくらいしか稼働しておりません。 いろいろ複雑な処理だろうな、というのを想定してソフトウェアを起動させたり動画を見ても殆ど上がらず、 結構良いCPUを買ったつもりが役不足というか何というか、ここまでの物は必要無かったのかとガッカリしています。 しかも、以前使ってたCore 2 Duoと、同じ処理をしてもそんなに時間の変化等無いように思います。 (マザーボードなども一緒に変えました) ただ一つPainter12というソフトは、CPUの割り当てのようなものが設定できるので、それを起動させるとFANの回転も滅茶苦茶上がった音がして、メーターも80%くらいになります。 いろいろなソフトで、このPainterみたいにCPUの稼働率を割り当てたり、もっと効率良くCPUを使って作業の短縮を図ったりできますか?

専門家に質問してみよう