C++の簡易なプログラムを長時間実行しっぱなしにしたいのですが、
CPUが常に100%の稼働率になってしまうため、PCが熱暴走してしまうのではないかと心配しております。
対策としてはPCの冷却を徹底することも考えられるのですが、
プログラムを工夫して(例えばメモリの使用領域を設定変更する)CPUの負担を軽減することは可能でしょうか?
プログラムの内容は[1000][300000]の配列を宣言し、
1秒間に20回、配列の中身を0~1000まで永遠に書き換え、
その内容をグラフィックで示すものです。
メモリの使用量は膨大になることは覚悟していたのですが、
CPUの稼働率が終始100%になってしまうのは、困っております。
対策をご教授いただけると助かります。
もしくは説明不足な点がありましたらお申し付けください。
No.5ベストアンサー
- 回答日時:
単純な処理なのでCPUが100%になるのは当たり前でしょう。
普通のアプリがCPUが100%にならない理由は、
・ファイルの読み書き待ちでCPUが空いている。
・メッセージ待ちでWAITしている。
などなど何らかの理由でCPUに空きが出来るからです。
どうしても100%にしたく無かったら、sleepするのが定番です。その分処理時間は長くなりますので秒間20回は無理でしょうが。これは仕方ありません。この問題はトレードオフなので、どちらかしか選べないと思います。
効果があるかは不明ですが、配列をランダムにアクセスしているなら、シーケンシャルにアクセスすればCPUの仕組みとしては早くなるはずです。
ありがとうございます。
当方のプログラムは
・メッセージ待ちでWAITしている。
状態でした。
さっそくSleepを使って負荷を低減させてみます。
配列もとりあえず宣言しただけですので、シーケンシャルに
アクセスするように改良します。
大変助かりました。
No.4
- 回答日時:
1秒間に20回と書かれていますがこれはどのようにして実現されていますか?
ビジーループまたはsleepなどよる待ち処理が考えられますが、CPUが100%稼動ということですので、以下の状況が考えられます。
ビジーループの場合:
CPUの処理能力は足りているがビジーループで100%使い切っている
この場合はsleepを使用する方法で待つことでCPU使用率は下がります。
sleepなどによる待ち処理:
CPUの処理能力が足りておらずまったくsleepせず処理しっぱなしになっている。
この場合は処理量を減らす(1秒間に10回などにする)ことでCPUの処理能力を上回らないようにすれば、CPU使用率は下がります。
蛇足ですが、本来はCPUに100%の処理を長時間行わせても熱暴走しない状態で使用するのが通常です。もし長時間の高負荷で熱暴走するのであれば、一瞬の高負荷でも熱暴走する可能性があるので、熱対策をするべきです。
すみません。
ビジーループの状態にしておりました。
グラフィックへの出力待ちの段階で、
間髪入れずにビジーループをかけておりました。
おそらくここの処理速度には余裕がありますので、
早速対策してみます。
ありがとうございます。
No.3
- 回答日時:
>ANo.2
1千回とか1万回に1度、ディスクに書き込むのに作業負荷を
考える必要はありません。
この回答への補足
すみません。説明不足でした。
書き換えは1000まで行くとまた0から
上書きされますので、メモリ使用量の絶対量は
かわりません。
もしもっと処理速度の速い配列のアドレスの設定方法や、
その他対策ご存知でしたらご教授願います。
No.1
- 回答日時:
C++をお使いであれば、マルチスレッドにして、適当にSleepすれば回避できるのではないでしょうか?
C++ ワーカースレッド Thread.Sleep GetMessage PeekMessage
などでググってみられるとサンプルが転がっていると思います。
現役のPGではないので細かなアドバイスができずに恐縮ですが、ヒントになれば幸いです。
この回答への補足
ワーカースレッド調べました。
当方、マイコン制御では何度か使用したことが
あるのですが、PCの場合はスレッドで実行するというのは、
10ある処理速度を単純に5:5にしてしまうなどと、
要は限りある処理能力を分けて使うというものでは
ないのでしょうか?
もしそうであると、現在でもCPUがフル稼働しておりますので、
処理効率が変わらないように思えてしまうのですが、、
無知で申し訳ないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 画像編集・動画編集・音楽編集 PowerDirector21 動画出力時のCPU稼働率が急に下がってしまう原因を教えてください 2 2023/03/30 20:54
- その他(コンピューター・テクノロジー) 50台の織機から回転数を取得・集計しモニターに表示したい 2 2022/11/05 15:48
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- ビデオカード・サウンドカード メイン機とは別に、初自作としてpcを組みました。 pcスペック cpu ryzen5 5500 グラ 1 2023/05/15 12:22
- UNIX・Linux 低スペックPCで軽量Linuxを動かしました。軽快に動かすには間隔をあけるとのが有効ですか? 3 2022/07/30 13:13
- CPU・メモリ・マザーボード PCゲームでCPU使用率が全コアフル稼働になりません 3 2022/11/06 18:54
- デスクトップパソコン ゲーミングデスクトップPCでマインクラフトなどの比較的負荷が軽いゲームを録画・編集・エンコードしてY 3 2023/02/09 21:44
- CPU・メモリ・マザーボード ゲーミングpcのファンのことについて教えて欲しいです。 6 2023/03/05 07:44
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DoEvents関数って何?
-
COMBOBOXで日付入力
-
SQLの速度をあげるには・・・
-
C言語で、文字とか入力されなく...
-
Excelでのセル内容の高速消去方法
-
.netからexcel操作の処理速度が...
-
ポインターの横に輪が回ってる。
-
このプログラミングの問題がい...
-
テキスト処理の速度の速い言語
-
VB.NETにおける二値化処理の高速化
-
c言語で配列の要素で偶数のも...
-
入力した任意の数の平方根を求める
-
複数のファイルを読み込むバッ...
-
ペンティアムとセレロン
-
エクセルVBAで教えて頂きたいの...
-
再帰処理を用いて階乗を求める...
-
「単体テスト」に関する深刻な...
-
小数点を含む数値かどうか判断...
-
Cのプログラムに無性にイライラ...
-
キャッシュを意識したプログラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでのセル内容の高速消去方法
-
DoEvents関数って何?
-
SQLの速度をあげるには・・・
-
小数点を含む数値かどうか判断...
-
win10で、正確な待ち時間の作り方
-
Excel(VBA)でSetTimer関数を使...
-
絶対パスの取得について
-
WebBrowserの読み込み待ちの処...
-
Excel VBAにて、2GB超の点群デ...
-
VBでの簡易電卓の作成(減算方...
-
テキストファイルの空行をスキ...
-
ノットイコールを教えて下さい
-
ナップザック問題?をエクセル...
-
If Not c Is Nothing Then ~延...
-
プログラム上のCPU稼働率低減に...
-
逆ポーランド記法における単項...
-
符号付きにすべきか、符号なし...
-
C言語 時刻差分の算出方法
-
C言語:関数を使うメリットとデ...
-
Excel VBA データ削除の高速化
おすすめ情報