- 締切済み
プログラムにエラーは無いが,CPU使用率が0になりプログラムが進行しません。
自分でFORTRANを用いて作成したプログラムを,CPUが Intel(R) Core(TM2) Quad CPU Q9650 @3.00GHz 2.99GHz 2.96GB RAM 物理アドレス拡張 のPCを使って実行しようとしています。 しかし,そのプログラム1つなら正常に実行されるのですが,2つ同時に実行すると,エラーメッセージは出ないのにCPU使用率が0%になり,実質計算が止まってしまう状態になります. 一つの計算の場合,CPU使用率は25%です. 今まで経験無いことなのでどうすればいいのか分からず困っています. 分かる方がいらっしゃいましたらお願いします.
- みんなの回答 (4)
- 専門家の回答
みんなの回答
Hypethreadingが可能になったPentium4(Northwood/FSB=800MHz)がでてきたのは、2003年4月。 Compaqが、HPに買収されたのは、2002年。 Windows XP自体は、2プロセッサまでのマルチプロセッササポートはしていたと思います。 多分、Compaq Fortranのライブラリなどが、マルチプロセッサ環境に適合していないので、どこかで、システム的に、不都合な部分があるのではないかと思います。 PentiumIIIの時代でも、マルチプロセッサのシステムはあったし、OSもサポートするものがありましたが、Compaq Fortranのシステム条件には、どんなことがかいてあるのでしょうか? おそら、今のシステムで、BIOS設定でマルチプロセッサをとめて、ユニプロセッサではしらせれば、2つでも3つでも、同時走行は出きるのではないかと推測します。(もちろん、遅くなりますが) 今のシステムの高速性をいかしたいんであれば、GNUの系列のもの、あるいは、Intelのものなど、処理系を変えた方がいいでしょう。
- Tacosan
- ベストアンサー率23% (3656/15482)
なんか, 「コンパック Fortran」って「とっても古い」ってイメージがあるんだけど.... どんなもんなんでしょうか. 可能なら Intel Fortran などに移るってことを考えていいのかも. う~ん, でも #1 の補足にあるようなプログラムでデッドロックが起きるとは思い難いしなぁ....
- buriburi3
- ベストアンサー率44% (353/792)
リソースのロック処理でデッドロックを起こしている… のが一番疑わしいです。 #1の人が言うようにファイルやソケットは使われていないのでしょうか。
ききかたがまずいです。 どんな環境(OS)で、何をみて、使用率25%といっているのか? さらに、その計算とは、計算だけで、外からの入力はいらないのか? 同じものを2つ走らせて、ファイルなどで競合する条件がでないのか?
補足
すみません。分かりにくかったです。 使用している環境はWindows XPです。 使用率25%とは,タスクマネージャーのCPU使用率のことです. 本計算では,txtから値を読み込んでいます。 言葉で書くと分かりにくくなるので以下にプログラム例を示します. プログラム内容(FORTRAN) ---------------------------------------------------------------- REAL a,b INTEGER i OPEN(1,file='input.txt',status='unknown') READ(1,*) a CLOSE(1) OPEN(2,file='output.txt',status='unknown') do 10 i=1,100 b(i)=a+1. write(2,*) b(i) 10 continue CLOSE(2) END ---------------------------------------------------------------- input.txtの内容 ---------------------------------------------------------------- 1.0 ---------------------------------------------------------------- output.txtの内容 ---------------------------------------------------------------- 2.0 3.0 ・・・・ ---------------------------------------------------------------- 以上のような内容のプログラムをコンパックFORTRANでコンパイルしEXEを作成し,そのEXEを実行することでプログラムをまわしています. 今回は以下のように2つのフォルダを用意し,計算を実行しているので,ファイルが干渉することはないと思います. フォルダAの中身:EXE,input.txt フォルダBの中身:EXE,input.txt (それぞれのフォルダでEXEを実行)
お礼
ご回答ありがとうございます。 デッドロックという言葉を調べてみたのですが,症状としてはまさにこれな気がします。 まだ,原因を特定できていませんが,言葉さえ知らなかったので大変貴重なご回答でした。ありがとうございます。