トップ回答者
vs2005:「デバッグなしで開始」で勝手にポーズ

質問
-
はじめまして。
初の投稿です。宜しくお願いいたします。
vs2005(academic)-intel fortranでCFDの計算をしています。
(このフォーラムでよろしいのでしょうか?)
環境:Windows XP Home
Microsoft Visual Studio 2005 Standard Edition 日本語 Service Pack 1 (KB926602)
Intel(R) Fortran Compiler Integration
現象:
1.プログラム:
do it=1,1000
call 処理
call output (コマンドプロンプトに50行程ログを出力)
end do
(プログラム全般に、標準入力等のようなポーズする個所はない)
2.「デバッグなしで開始(Ctrl+F5)」:CPU使用率が100%へ
3.計算から3日目の朝に、計算がポーズしたような状態:CPU使用率がほぼ0%
4.コマンド・プロンプト上でEnterキーを押すと計算再開:CPU使用率が再び100%へ
・Enterキーを押すことで、バッファに溜まっていたログが
フラッシュされたかのように見えた
5.プログラム正常終了(1週間ほど)
質問:
「デバッグなしで開始(Ctrl+F5)」→勝手にポーズ→Enterで再開→正常終了
という現象の経験者の方、原因、対処法をお知らせ願えないでしょうか?
回答
-
外池と申します。インテルのFORTRAN自体(あるいはVSとの相性)に限らず、ごく一般的なことですが・・・。
簡単なことで確認して頂きたいことがいくつかあります。
いきなり、CFDの複雑な計算ではなく、ごくごく簡単な(具体的には、メモリをほとんど消費しない)プログラムを作って、数日間走らせっぱなしにしてみてください。同じような症状が現れますでしょうか? 期待することは、延々100%のCPU使用率で走り続けることだと思いますが、たぶん、期待通りに動くと思います。
次に、処理が中断してしまうような状況についての推察ですが、
ちなみに、CFDではどれぐらいのメモリーを必要としていますか? 物理メモリーの容量内におさまっています? それとも、ディスク上のスワップメモリーを必要としますか? スワップが起こり始めると・・・、CPU使用率はガタ落ちになって、せっせとスワップばかりになってしまいます。
WindowsのHomeエディションをお使いのようですが・・・、CFDの計算をさせているときは、その計算のみに専念させてますか? それとも、ちょこまか他のアプリを使ったりしておられます? Homeエディションだと基本的にアクティブになっているアプリが最優先になるので、他のアプリがアクティブのまま上述のスワップが同時に起こったりすると、ほとんど仕事を止めてしまうかもしれません。たとえば、ウィルススキャンなんかが同時に走ったりしていませんか? (Enterを押すことで、CFDの計算がアクティブに戻っているのではないかと・・・、) Homen場合、この辺りの優先度の設定ができるのかどうか、私、よくわかりませんが。
あと・・・、まさか、とは思いますが、
計算させて放置している間に、Windowsがサスペンドしている、とか言うようなオチは無いですよね?
-
外池です。
「コミットチャージ合計(1,958,404) < 物理メモリ合計(2,086,892)」だからと言って、コミットチャージされた空間がすべて物理メモリ上にあるとは全然限りません。実のところ、非常に厳しい状況なのではないかと、推察しますが・・・。
ですので、問題のCFDアプリにだけ着目して、プロセスのリストか、パフォーマンスカウンタで、「ページフォルトデルタ」という量を監視されてはいかがでしょうか? 細かい定義は省くとして、ディスク上へのスワップの発生が起きると増える量です。
まぁ・・・、計算だけに特化して最適化した環境にされたいのであれば、ウィルススキャンは止めておいたほうが良いかもしれません。
あと、非アクティブでも高い優先度になるように設定することはできます。おそらく、今のお使いの状態であれば、とにかく一度実行を開始した後に、タスクマネージャーでプロセスのリストを表示させて、CFDアプリの優先度を「通常より高」とかの設定にすれば、たぶん、アクティブ、非アクティブに関わらず、常に100%で走ると思われます。
本来なら、非アクティブでも、他に活発に動いているアプリがなければ、100%を維持するはずなのですが・・・。
-
外池です。
非アクティブ→アクティブへ自動復帰することは・・・、私には、ちょっとアイデアが浮かびません。難しいんじゃないかと。
あと、Visual Studioとは無関係のような感じがします。デバッグなしで実行を開始されているのであれば、試しに、コマンド・プロンプトの窓は残したままで、Visual Studioを閉じてしまってください。コマンド・プロンプトの実行は独立して動いていますよね?
私の職場でも、コマンド・プロンプトで走らせる数値解析ソフトをガリガリ連続運転することは、よくやるんです。で、ちょっと前のプロセッサでハイパースレッド機能があるようなものですと、同じアプリを2本走らせれば、どちらも100%CPU使用率で延々走ってくれます。プロセッサが2つはいっていれば、合計4本の計算を流せます。
ただ、これらの場合、アプリで消費しているメモリは、すべて物理メモリの上に収まっていて、スワップは発生しない範囲で動かしています。
上手く行くこと、お祈りします。
すべての返信
-
外池と申します。インテルのFORTRAN自体(あるいはVSとの相性)に限らず、ごく一般的なことですが・・・。
簡単なことで確認して頂きたいことがいくつかあります。
いきなり、CFDの複雑な計算ではなく、ごくごく簡単な(具体的には、メモリをほとんど消費しない)プログラムを作って、数日間走らせっぱなしにしてみてください。同じような症状が現れますでしょうか? 期待することは、延々100%のCPU使用率で走り続けることだと思いますが、たぶん、期待通りに動くと思います。
次に、処理が中断してしまうような状況についての推察ですが、
ちなみに、CFDではどれぐらいのメモリーを必要としていますか? 物理メモリーの容量内におさまっています? それとも、ディスク上のスワップメモリーを必要としますか? スワップが起こり始めると・・・、CPU使用率はガタ落ちになって、せっせとスワップばかりになってしまいます。
WindowsのHomeエディションをお使いのようですが・・・、CFDの計算をさせているときは、その計算のみに専念させてますか? それとも、ちょこまか他のアプリを使ったりしておられます? Homeエディションだと基本的にアクティブになっているアプリが最優先になるので、他のアプリがアクティブのまま上述のスワップが同時に起こったりすると、ほとんど仕事を止めてしまうかもしれません。たとえば、ウィルススキャンなんかが同時に走ったりしていませんか? (Enterを押すことで、CFDの計算がアクティブに戻っているのではないかと・・・、) Homen場合、この辺りの優先度の設定ができるのかどうか、私、よくわかりませんが。
あと・・・、まさか、とは思いますが、
計算させて放置している間に、Windowsがサスペンドしている、とか言うようなオチは無いですよね?
-
返信いただき有難うございます。
ガイドラインを示していただいて、大変助かります。
1.
外池 さんからの引用 いきなり、CFDの複雑な計算ではなく、ごくごく簡単な(具体的には、メモリをほとんど消費しない)プログラムを作って、数日間走らせっぱなしにしてみてください。同じような症状が現れますでしょうか? 期待することは、延々100%のCPU使用率で走り続けることだと思いますが、たぶん、期待通りに動くと思います。
はい、テストしてみます。
2.
外池 さんからの引用 ちなみに、CFDではどれぐらいのメモリーを必要としていますか? 物理メモリーの容量内におさまっています? それとも、ディスク上のスワップメモリーを必要としますか? スワップが起こり始めると・・・、CPU使用率はガタ落ちになって、せっせとスワップばかりになってしまいます。
メモリは動的には獲得せずに
コミットチャージ合計(1,958,404) < 物理メモリ合計(2,086,892)
で、スワップしていません。
3.
外池 さんからの引用 WindowsのHomeエディションをお使いのようですが・・・、CFDの計算をさせているときは、その計算のみに専念させてますか? それとも、ちょこまか他のアプリを使ったりしておられます? Homeエディションだと基本的にアクティブになっているアプリが最優先になるので、他のアプリがアクティブのまま上述のスワップが同時に起こったりすると、ほとんど仕事を止めてしまうかもしれません。たとえば、ウィルススキャンなんかが同時に走ったりしていませんか? (Enterを押すことで、CFDの計算がアクティブに戻っているのではないかと・・・、) Homen場合、この辺りの優先度の設定ができるのかどうか、私、よくわかりませんが。
WindowsはProfessionalでした。(失礼しました。訂正します。)
以下を確認しました:
・CFDの計算のみ流している
・計算が止まっている状態で、別のアプリは動いていなかった
・スクリーンセーバー、サスペンド機能、Windowsアップデートは無効状態
ウィルススキャンは起動時に自動で行う設定ですが
もしかしたら、計算中にスキャンか更新が行われたかもしれません。
スワップも行われたかもしれません。
1のテストで確かめます。
ところで、仮に、CFD計算が、アクティブ→非アクティブとなった場合、
非アクティブ→アクティブに自動で復帰できないものでしょうか?
-
外池です。
「コミットチャージ合計(1,958,404) < 物理メモリ合計(2,086,892)」だからと言って、コミットチャージされた空間がすべて物理メモリ上にあるとは全然限りません。実のところ、非常に厳しい状況なのではないかと、推察しますが・・・。
ですので、問題のCFDアプリにだけ着目して、プロセスのリストか、パフォーマンスカウンタで、「ページフォルトデルタ」という量を監視されてはいかがでしょうか? 細かい定義は省くとして、ディスク上へのスワップの発生が起きると増える量です。
まぁ・・・、計算だけに特化して最適化した環境にされたいのであれば、ウィルススキャンは止めておいたほうが良いかもしれません。
あと、非アクティブでも高い優先度になるように設定することはできます。おそらく、今のお使いの状態であれば、とにかく一度実行を開始した後に、タスクマネージャーでプロセスのリストを表示させて、CFDアプリの優先度を「通常より高」とかの設定にすれば、たぶん、アクティブ、非アクティブに関わらず、常に100%で走ると思われます。
本来なら、非アクティブでも、他に活発に動いているアプリがなければ、100%を維持するはずなのですが・・・。
-
外池 様
現在、同じCFDプログラムを75%まで計算中ですが
ページフォルトデルタ: ぱっと見 0
ページフォルト: 1,084,311
一方、Rtvscan.exe(ウィルススキャン)
ページフォルトデルタ: ぱっと見 0
ページフォルト: 1,188,402
で、この2つのプロセスで、スワップが発生したようです。
現環境で、CFD計算する際は、以下に注意します:
1.CFD計算をアクティブに保つために
・CFDアプリの優先度を「通常より高」に設定
・他のアプリ(ウィルススキャン等)を起動させない
2.スワップが発生しないか監視する
・頻繁に発生する場合は、使用メモリを減らす
非アクティブ→アクティブへ復帰しない点は、未解決ですが
(Visual Studioによる原因ならこのフォーラムに貢献できそうですが...)
上の方針で行きたいと思います。
外池様には、CFD計算を流す際の注意点をご教示いただき
大変有益でした。有難うございました。
-
外池です。
非アクティブ→アクティブへ自動復帰することは・・・、私には、ちょっとアイデアが浮かびません。難しいんじゃないかと。
あと、Visual Studioとは無関係のような感じがします。デバッグなしで実行を開始されているのであれば、試しに、コマンド・プロンプトの窓は残したままで、Visual Studioを閉じてしまってください。コマンド・プロンプトの実行は独立して動いていますよね?
私の職場でも、コマンド・プロンプトで走らせる数値解析ソフトをガリガリ連続運転することは、よくやるんです。で、ちょっと前のプロセッサでハイパースレッド機能があるようなものですと、同じアプリを2本走らせれば、どちらも100%CPU使用率で延々走ってくれます。プロセッサが2つはいっていれば、合計4本の計算を流せます。
ただ、これらの場合、アプリで消費しているメモリは、すべて物理メモリの上に収まっていて、スワップは発生しない範囲で動かしています。
上手く行くこと、お祈りします。