FORTRAN �W
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/12(日) 17:13:35FORTRAN77/90/95/2003, HPF等、FORTRAN全般に関する話題を書き込んで下さい。
・FORTRAN関連情報
お約束だが、まずは自分で調べよう
http://www.google.co.jp/
x86で動作するFortranコンパイラ
http://www.nminoru.jp/~nminoru/programming/x86-fortran.html
The Fortran Company
http://www.fortran.com/
Polyhedron Software
http://www.polyhedron.co.uk/
Google Directory - Fortran
http://directory.google.com/Top/Computers/Programming/Languages/Fortran/
・前スレ
FORTRAN III
http://pc8.2ch.net/test/read.cgi/tech/1104724162/
FORTRAN II
http://pc5.2ch.net/test/read.cgi/tech/1068351911/
Fortran
http://pc2.2ch.net/test/read.cgi/tech/1003214738/
0412デフォルトの名無しさん
2008/05/17(土) 22:13:50VBAよりはだいぶ速いしタダだよ
0413デフォルトの名無しさん
2008/05/17(土) 22:41:52SilverFrostのFTN95とかフリーコンパイラも転がっていることだし、
77でよければWatcomとか昔なつかしいのもあるし、g77のWin用もあるし、
Fortranで素直にやらせてやれw
0414デフォルトの名無しさん
2008/05/19(月) 22:54:50速くなると思っておいていいのですか・・・
0415デフォルトの名無しさん
2008/05/19(月) 23:35:44その速いCPUで動かせばFortranはもっと速くwwww
マジレスするとパラメータサーベイとかなら今の4コアとか使えばかなり効率はあがる。
さすがにBASICがFORTRANを超えることは無理。
自分のプログラミングスキルと作るコードの複雑さから、コーディングやデバッグの
労力を見積もって自分で判断すべし。別にfortranとかVBAに限らんけどな。
VBAはクソ遅いと聞くが使ったことがないのでなんともだが、
Free BASIC VS intel Fortran ではFORTRANが速いといっても高々数倍程度〜コードによってはBASICが勝っている。
http://shootout.alioth.debian.org/gp4sandbox/benchmark.php?test=all&lang=ifc&lang2=fbasic
さすがにIntel Fortranはgnu fortranやJava, Mono Ruby なんかには楽々勝利。
>>414
だいだいYES。と言いたいがモンテカルロ法だけでは「乱数を使った確率的解法」ぐらいしか
わからんからなんとも。ランダムウォークのシミュレーションなんかだとCPU周波数に
比例してくれるようなコーディングができる場合が多い。
0416デフォルトの名無しさん
2008/05/22(木) 09:28:10salfordのf77を使っているのですがgoto文のループ内で配列を毎回初期化してたら
ループが途中で終わってしまうのですがどうしたら良いでしょうか?
何でか分からないのですが、初期化しないと繰り返してくれます。あと、以下のプログラムの文
で初期化がi,j共に31の繰り返しだと少し長く繰り返します。
goto文の中にはガウスの消去法のサブルーチンがあります。
100 continue
do i=1,32
do j=1,32
kakunou(i,j)=0
enddo
enddo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
中略(以下このkakunou(32,32)に計算値を代入してます)
途中でガウスの消去法のサブルーチンを呼び出してます
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
goto 100
すいませんが、どなたか教えてください。
0417デフォルトの名無しさん
2008/05/22(木) 11:44:17正直質問の意味がよく分からん。
コンパイラのバグでなければ、ありえない症状なので
ここに書いてない部分がおかしいとしか言いようが無い。
f77の範囲ならg77とか他のコンパイラもあるのでそれで試してみるとか、
salfordのf95で試してみるとかして見るのも一つの案。
0418初心者
2008/05/23(金) 15:40:54Compaq Visual fortran 6.1を使用しているものですが,
練習で以下のプログラムを書いたのですが,cpmpileを押し,
「.F」に変換しても「1errors」が出てしまいます.
なぜ出るのか教えていただけないでしょうか?
初歩中の初歩で申し訳ないです.
INTEGER WIDTH,HEIGHT,AREA
READ(5,*) WIDTH,HEIGHT
AREA=WIDTH*HEIGHT
WRITE(6,*) WIDTH,HEIGHT,AREA
STOP
END
0419デフォルトの名無しさん
2008/05/23(金) 23:58:39エラーでないぞw
エラーメッセージをコピーしてみせてくれ。
0420初心者
2008/05/26(月) 12:58:26早速の返信ありがとうございます.
エラーは以下のように出ます
--------------------Configuration: Text1 - Win32 Debug--------------------
Compiling Fortran...
C:\Documents and Settings\Admin\デスクトップ\Text1.F
f90: Severe: Invalid argument
... file is 'C:\Documents and Settings\Admin\デスクトップ\Text1.F'
Error executing df.exe.
Text1.obj - 1 error(s), 0 warning(s)
自分も以前OSが2000を使用していたときは何のエラーも出なかったのですが,
XPに変えてからエラーが出るようになったように感じます.
お手数をかけて申し訳ないです.
よろしくお願いします.
0421デフォルトの名無しさん
2008/05/26(月) 17:55:54マイドキュメントに移動させな
0422デフォルトの名無しさん
2008/05/26(月) 23:07:33お前ひどい奴だなwww
>>420
最初ッからそう言ってくれれば、すぐに答えられる。
それはCVF時代のFAQで、日本語のパスやファイル名が入るとコンパイラが対応していない
のでエラーを吐く。2バイト文字を使わないディレクトリでやればおk。
0423初心者
2008/05/27(火) 13:41:47解決しました!!!
簡単な質問に親切に答えていただいてありがとうございました!!!
0424初心者
2008/05/30(金) 15:38:10fortranをまわした結果をexcelかテキストファイルに出力したいのですが,
どのようなコマンドを打てばよいのでしょうか?
また,長い結果(10万桁以上)をファイルに出力したいのですが,
御教授お願いします.
0425デフォルトの名無しさん
2008/05/30(金) 16:32:440426デフォルトの名無しさん
2008/05/30(金) 17:59:33それ、先生に聞いた方がいいよ。お金払ってるんでしょ。
0427デフォルトの名無しさん
2008/05/30(金) 19:26:16integer :: i = 1
open(unit=10,file='hoge.txt',status='unknown')
do
write(10,'(i4)') i
i = i + 1
end do
close(10)
end program main
「ご教示」を「ご教授」って書いちゃう男の人って。。。
0428デフォルトの名無しさん
2008/05/31(土) 00:19:23hogeはUNIX系の連中の使う言葉だ。
メインフレームの誇りを持つFortrannerは使っちゃいかんw
0429デフォルトの名無しさん
2008/05/31(土) 11:14:030430デフォルトの名無しさん
2008/05/31(土) 16:02:340431デフォルトの名無しさん
2008/06/01(日) 18:28:25これみるとIntel C/C++使ったほうがいいみたいだな
0432デフォルトの名無しさん
2008/06/01(日) 19:41:18単にFortranの書き方知らないだけだべ。
0433デフォルトの名無しさん
2008/06/01(日) 19:44:49技術者を集めにくいと。
0434デフォルトの名無しさん
2008/06/04(水) 01:08:45INTEL Fortran と C++ はバックエンド部は共通だろうから、そもそもそれほど大きな違いが
出るはずが無い。
0435デフォルトの名無しさん
2008/06/07(土) 20:13:52FORTRAN入門(FORTRAN77入門)が普通において有って驚いた
0436デフォルトの名無しさん
2008/06/07(土) 20:25:26浦昭二君、名誉教授だから当然でしょ
0437デフォルトの名無しさん
2008/06/07(土) 20:33:090438デフォルトの名無しさん
2008/06/07(土) 20:50:45講義の教科書ではなくて、研究室用だと思うよ。
研究室にはf77の遺産があるから、参考図書として必須。
0439デフォルトの名無しさん
2008/06/07(土) 23:48:11大学の生協なら売ってるのが普通だと思ってた。
俺は慶応じゃないけどね
0440デフォルトの名無しさん
2008/06/08(日) 00:29:15どこでも置いてあると思う。
0441デフォルトの名無しさん
2008/06/08(日) 00:51:540442デフォルトの名無しさん
2008/06/08(日) 01:30:36遺産プログラムがFortran66(ブロックIFなし)で書かれていて驚愕した orz
0443デフォルトの名無しさん
2008/06/08(日) 02:26:31俺のもらった遺産プログラムは、拡張DO LOOPを使っていたせいでコンパイラを通らず
すごく困った。
拡張DO LOOPとは、DO LOOP の中からGOTOで飛び出して、なんかやった後DO LOOPの
中に帰ると、またさっきのLOOPの続きが出来るというもので、当時の俺の想定外の悶絶機能で
何がおきているのか全く理解できなかったw
FORTRAN77で廃止になったはずなんだが、たいがいのコンパイラは密かに対応していた。
まぁ、怖いので書き直したがw
そういう事もあるのでFORTRAN66の教科書も無くしてはいけないと思うですよ。
0444デフォルトの名無しさん
2008/06/08(日) 11:39:030445デフォルトの名無しさん
2008/06/18(水) 02:23:23絶版は困ります。アマゾンの古本で買えるならいいですが。
0446デフォルトの名無しさん
2008/06/18(水) 04:13:420447デフォルトの名無しさん
2008/06/18(水) 10:04:59Fortranを勉強する目的などを明確にせよ。
規格:わからない、f77、f90以上
目的:講義対応、研究室対応、趣味、業務対応
以下はとりあえずの推薦
規格わからない 講義対応
Fortran 90プログラミング 冨田博之
http://www.amazon.co.jp/dp/4563014095/
f77規格 講義対応
FORTRAN77入門 浦昭二
http://www.amazon.co.jp/dp/4563013587
f90規格 研究室対応
数値計算のためのFortran90/95プログラミング入門 牛島省
http://www.amazon.co.jp/dp/4627847211/
0448デフォルトの名無しさん
2008/06/18(水) 10:10:180449デフォルトの名無しさん
2008/06/19(木) 00:50:25さんくす
0450デフォルトの名無しさん
2008/06/29(日) 02:12:38バックエンド共通ってだけで速度が同じになるなんてありえない。
字句解析や最適化は言語仕様とコンパイラ実装に強く依存する。
Fortranのシンプルさはその点強みだったけど、
最近のFortranはその他言語にどんどん近づいているからねえ。
0451デフォルトの名無しさん
2008/06/30(月) 03:11:59>>415のベンチマークの話だから。
0452デフォルトの名無しさん
2008/07/03(木) 00:26:47ベンチマークサイトのような、汎用アルゴリズムならfortranは速くなくて不思議は無いですよ。
C/C++とfortranのユーザー数考えたら、intelだってどちらにリソース割くかは自明でしょう。
ナンバークランチング用途ならfortranは多分まだ速いと思いますけど。
0453デフォルトの名無しさん
2008/09/06(土) 00:53:21V.11が来年一月までの期限付きだが、無条件に配布されている。
Windows版はVisualStudio(Fortran 専用)つきで。
気になる人はチェキラ!w
0454デフォルトの名無しさん
2008/09/21(日) 14:52:150455デフォルトの名無しさん
2008/09/21(日) 23:57:43無期限はLinuxだけじゃないか?
0456デフォルトの名無しさん
2008/09/22(月) 15:10:37Linux版ならIntel FortranとIntel C++が無期限で無償で使える
0457デフォルトの名無しさん
2008/09/22(月) 15:12:370458デフォルトの名無しさん
2008/10/07(火) 00:50:3610msとか100msとか,ミリセカンドオーダーで寝かせるようにするには
どうすればいいですか?
Intelコンパイラを使っているので,Intelコンパイラ依存の関数でも
いいです.
今は,無駄な計算ループを作って待たせているのですが,
それだとCPU負荷になるので,できればCPU負荷にならないで
10msとか100msとか待たせられると嬉しいです.
0459デフォルトの名無しさん
2008/10/07(火) 01:03:04Windowsなら、USE IFWIN して Win32 の API の Sleep 関数でやれた気がする。
Linux は知らないが、同じようにやれると思う。
0460デフォルトの名無しさん
2008/10/07(火) 01:30:300461デフォルトの名無しさん
2008/10/07(火) 03:06:27ifort依存ならWin/Linux共に SLEEPQQ で
USE IFPORT
CALL SLEEPQQ(3000)
とミリ秒で指定できる。
但しあくまでも指定できるだけであって実際の休止時間をミリ秒単位の精度で
制御できるかどうかは別だが。
0462458
2008/10/07(火) 10:32:59皆さん,ありがとうございます.
461さんのやり方でできました.
それほど正確性を求めていないので,このやり方で十分です.
ありがとうございました.
0463デフォルトの名無しさん
2008/10/24(金) 15:08:540464デフォルトの名無しさん
2008/10/24(金) 17:01:260465デフォルトの名無しさん
2008/10/24(金) 20:17:32GPGPUの開発環境 >CUDA
GPUを計算に転用して10倍以上の高速化を実現するらす
http://journal.mycom.co.jp/articles/2008/07/23/gpgpu/
0466デフォルトの名無しさん
2008/10/25(土) 10:45:520467デフォルトの名無しさん
2008/11/11(火) 02:36:04ベクトル長を長くする方向だから80年代のプログラミングモデルが復活するし、
Intelのコンパイラは必ずサポートするだろうし。
0468467
2008/11/11(火) 14:06:01時間刻みを小さくしても発散してしまうのですが,何かサブルーチン内に欠陥があるのでしょうか?
QA0=QA
CKA0=H*FNCT1(X0,YA0,YB0,W0,W1,A,A0,A1,B,B1,H0,L,PI)
RA1=(CKA0-2.0*QA0)/2.0
YA1=YA0+RA1
QA1=QA0+RA1*3.0-CKA0/2.0
XX=X0+H/2.0
CKA1=H*FNCT1(XX,YA1,YB1,W0,W1,A,A0,A1,B,B1,H0,L,PI)
RA2=(1.0-1.0/sqrt(2.0))*(CKA1-QA1)
YA2=YA1+RA2
QA2=QA1+RA2*3.0-(1.0-1.0/sqrt(2.0))*CKA1
CKA2=H*FNCT1(XX,YA2,YB2,W0,W1,A,A0,A1,B,B1,H0,L,PI)
RA3=(1.0+1.0/sqrt(2.0))*(CKA2-QA2)
YA3=YA2+RA3
QA3=QA2+3.0*RA3-(1.0+1.0/sqrt(2.0))*CKA2
XX=X0+H
CKA3=H*FNCT1(XX,YA3,YB3,W0,W1,A,A0,A1,B,B1,H0,L,PI)
RA4=(CKA3-2.0*QA3)/6.0
YA=YA3+RA4
X=X0+H
QA=QA3+3.0*RA4-CKA3/2.0
return
end
function FNCT1(X0,YA0,YB0,W0,W1,A,A0,A1,B,B1,H0,L,PI)
FNCT1=-2.0*W1*H0*YA0-(W1**2.0+(W0**2.0)*(A/A0+(B**2.0)/(2.0*L*A0)-(L*A1*B)/(2.0*A0)))*YB0+((W0**2.0)*(3.0*L*A1)*(YB0**2.0))/(PI*A0)
* -((W0**2.0)*(PI**2.0)*(YB0**3.0))/(4.0*L*A0)+(W0**2.0)*((-2.0*B1)/(PI*(W0**2.0))+(4.0*(L**2.0)*A1*A)/((PI**3.0)*A0)+(2.0*L*A1*(A**2.0))/((PI**3.0)*A0)
* -(2.0*(L**3.0)*(A1**2.0)*B)/((PI**3.0)*A0))
return
end
長々と申し訳ないです.お願いします
0469デフォルトの名無しさん
2008/11/12(水) 00:29:13長すぎて考える気にならん。
関数のパラメータも多すぎて、条件も分からん。
ある特定のパラメータで発散するのか?ルンゲ喰ったギル法だけで異常が出るのか?
どういう状況なのかも分からん。
答えようも考えようも無い。
もう少し親切心を持って聞けw
0470468
2008/11/12(水) 03:21:51すみません.どう書いたらよく伝わるのか分からず,書いてしまいました.
反省しております.
方程式は,T"(t)+T'(t)+ωT(t)+B1(t)T(t)+B2(t)T^2(t)+B3(t)T^3(t)=B4(t)
のような方程式で,
B1〜B4の中にも変数が存在してtが変化した際には変数も変化させたいのです.
パラメータを変えた際には異常が現れなかったりします.
わかりにくくて申し訳ありません.よろしくお願いします
0471デフォルトの名無しさん
2008/11/12(水) 15:42:56さすがブックオフ本の価値が分かってない
0472デフォルトの名無しさん
2008/11/13(木) 00:52:36古本屋での相場は美本で350円くらいだったと思う。
漏れは66版を150円で買ったような気がするw
>>470
>T"(t)+T'(t)+ωT(t)+B1(t)T(t)+B2(t)T^2(t)+B3(t)T^3(t)=B4(t)
よく分からんが、第三項はω^2じゃ無いか?
それでBx(t)が微小量だとすれば、なんとなく意図が分からなくも無い。
減衰振動の単振り子に非線形項と強制振動項が加わったものなるので、
なんとなく動きのイメージがつかめるのでは。
パラメータによっては、当然発散も大いにありうるだろう。
そもそも正しく計算できているのか自信が無いのなら、Bx(t)を全部0に置けば、
へたれて行く減衰振動になるので、そういう解析解のあるところからチェックしてゆけば
自分のプログラムの挙動に自信がもてるのでは?
詳しく知りたければランダウ=リフシッツの力学の非線形振動における共鳴の節を読めwwwww
0473デフォルトの名無しさん
2008/11/13(木) 01:00:09教科書で使ってたりするから、古本の流通量は結構多い気がする。
0474デフォルトの名無しさん
2008/11/13(木) 02:46:31改訂版じゃなくて初版の方だったので返品在庫の放出かしら
配列のとこやってるけど、配列への入力とかあってすごいね
宣言なしで唐突に出てくるループカウンタにもびっくりするが
0475デフォルトの名無しさん
2008/11/13(木) 10:19:44えぇ〜?
暗黙に型宣言されてるぜ!
最近のスクリプト言語で、これに近い形に先祖がえりしているのがワロス
0476デフォルトの名無しさん
2008/11/13(木) 14:07:56character,logicalは無いので c と l で始めるようにしたり。
暗黙の型宣言はあれはあれで良いものだ。
0477デフォルトの名無しさん
2008/11/14(金) 21:11:060478デフォルトの名無しさん
2008/11/15(土) 00:55:13lは1と見間違いやすいからあまり使わないが、貴重な整数型なのでもったいない。
0479デフォルトの名無しさん
2008/11/15(土) 05:22:43Lは大文字で使う
0480デフォルトの名無しさん
2008/11/16(日) 00:36:10ボーランド記法?
昔PASCALに散々いじめられたから嫌w
0481デフォルトの名無しさん
2008/11/16(日) 12:49:36c を複素数に振るときには character 型は s で始めるようにしてるな。
>>478
l は先頭でだけ使うようにしてる。 先頭が数字の変数ははじかれるから
混同しなくてすむ。
0482デフォルトの名無しさん
2008/11/26(水) 01:24:43何か進展はあったのでしょうか?
つまりCAFを排除できたのでしょうか?
0483デフォルトの名無しさん
2008/11/29(土) 16:57:56東京会議の結論がうpされたようだ。
http://www.nag.co.uk/sc22wg5/
0484デフォルトの名無しさん
2008/12/06(土) 18:55:27って出てくるのですが、どういうことですか?
0485デフォルトの名無しさん
2008/12/11(木) 16:23:190486デフォルトの名無しさん
2008/12/13(土) 02:11:30でCPU TIME を出力できるようにする方法はありますか?
0487デフォルトの名無しさん
2008/12/13(土) 18:02:53HIGH_RES_CLOCK@
使い方は Library Reference に載ってる。
0488デフォルトの名無しさん
2008/12/23(火) 09:11:38亀ですが
ありがとうございます。
出来ました!
0489デフォルトの名無しさん
2009/01/24(土) 19:01:34くだすれFORTRAN(超初心者用)その4
http://pc11.2ch.net/test/read.cgi/tech/1232789521/l50
0490デフォルトの名無しさん
2009/02/12(木) 00:23:26お前らgoto使いすぎ・・・
というか自分の提出したプログラムがgoto文に書き換えられている・・・
subroutine、functionを使いすぎるのはスパコン計算に向かないと言っていたけれど
勉強してきた構造化プログラミングの手法自体がfortran向きでないということなの?
0491デフォルトの名無しさん
2009/02/12(木) 02:32:22インラインされるようにしろw
コンパイラが安心してグローバル最適化できるように、付加的な情報を与えてやれ。
グローバルな構造が人間が見て分かりやすいならコンパイラも見て分かりやすい。
INTENT指定はつける。
FUNCTIONは、PURE (可能ならELEMENTAL)にする
とかすればDO..LOOP内で関数呼び出しとかしても並列化やベクトル化してくれるはず。
コンパイラによるが。
実際にベンチマークを取って、自分が勝利すれば、後は文句いわれないべw
0492デフォルトの名無しさん
2009/02/12(木) 12:52:18intent属性つけると微妙に速くなるよね。
特にloop内で頻繁に呼ばれるやつだと全体で5から20%くらい違ってくる。
最近のコンパイラはF77で書いててもintentをわかってくれるから楽だ。
で・・・・pure,elementalの事はよくわからないので詳しく!
0493デフォルトの名無しさん
2009/02/13(金) 00:04:13PUREもELEMENTALもFortran95で導入されたキーワードで、関数やサブルーチンの
副プログラムの性質をコンパイラに教える修飾語。
PURE FUNCTION unko(x) などのように宣言の頭につけて使う。
PUREというのは、大雑把には副作用がないこと。それゆえ、並列に動作させても
値が変わらないので、コンパイラは並列化など最適化をやれる。
(PUREを満たさねばならない条件はいくつかあるので、kwskはマニュアル見てくれ)
ELEMENTALはPUREの中でさらにいい性質を持ったもの。
本来は1変数で定義してあっても、配列を引数にとって、配列を返すように使ってもいいもの。
たとえば、
REAL :: a(10), b(10)
b = SIN(a)
こういう使い方が組み込み関数では出来るわけだが、自作の関数でもこうやって使っても
いい場合にELEMENTAL (要素毎の意味) をつける。
これもコンパイラが利口なら、最適化をかけてくれるはず。
普通、DO..LOOP内に関数やサブルーチンの呼び出しがあると、呼び出し先で何が
あるかわからないので、最適化が抑止されるが、PUREやELEMENTALがあれば、
安心してコンパイラが最適化できる。(原理的にはw)
0494デフォルトの名無しさん
2009/02/13(金) 08:29:24ありがとう。pure 属性は使い易そうだ。
0495494
2009/02/13(金) 11:01:13並列(OpenMP)の時にちょびっと速くなった。わーい。
もともとdo-loopで一つずつ処理しているので elemental を使える状況は少ないけど、
もう少し理解してから使ってみよう。
inlineを少し深くするようになったからかコンパイル時間がすこし長くなったけどまあ気にしない。
0496デフォルトの名無しさん
2009/02/17(火) 22:12:50なるほど、ためになったわ。サンキュー。PUREを付けるだけで簡単に速くなったわ。
担当のは基本的に古い人間だから、あまりコンパイラ任せにするなとか言うんよな…。
Fortran90っぽい77形式の文も、「完成した後で直します」とか言ってそのままだったり。
implicit realもcommon文もどうにかしたいけれど、きっと文句言うんだろうな。
0497デフォルトの名無しさん
2009/02/18(水) 02:22:54PURE 属性はもともと HPF で導入されたものなので、それなりのメーカならコンパイラ
にも最適化のノウハウの蓄積があるはず?
ELEMENTAL も一変数用にサブルーチン書いて、配列を渡せばいいので、DO..LOOPを
あからさまに書かずにすむ。時々ソースがすごくすっきりして楽になることがある。
でも、ついでだから古い人間を擁護してみるかw
FORTRAN77 にも、むきだしの良さがあるw
Fortran90 以降だとソース上は簡潔になっても、影で動的にテンポラリ配列とか取るので
気持ち悪いところもある。長時間並んだJOB がStackOverflow とかで止まっていたり
すると殺してやりたくなる。古い時代の人はその辺が嫌なのかもしれないw
COMMON もグローバル変数だと思うとむかつくだろうが、 自分でガベージコレクション
しながら、変数領域を自由自在に再利用して操っていると思うと、結構気持ち良い。
メモリーが貴重だった時代には、利用価値が高かった。
IMPLICIT に関していえば IMPLICIT NONE をつけた上で、頭文字を守ればいい。
C と違ってローカルスコープの捨て変数が使えないから、頭文字を守らないと
いちいち宣言部に戻って型を確かめないといけないのでめんどい。
Fortran では数値の精度が致命的に重要で、倍精度計算中に1個単精度が混じるだけでも
すべての結果が単精度のゴミになるのだから、数値精度に無頓着の他のおしゃれ言語の
連中の言説を信じると痛い目に会わされるw
0498デフォルトの名無しさん
2009/02/18(水) 13:19:26pure属性付けた他のサブルーチン呼ぶ時には
interfaceで引数部分の性質を教えて置かないといけないんだね。
f77書式で書いてるのに interface intent が
現れるのでムズムズするけどムズムズするだけなのでそのまま。
0499デフォルトの名無しさん
2009/02/26(木) 16:08:37ifort -QParallel でコンパイル+実行するとうまくいくんだけど、
同じソースをifort -Qopenmp でコンパイル+実行すると
Program Exception - stack overflow
っていうエラーが出る
ソース中にOpenMP構文は use omp_lib だけ
これってどうしたらいいのかな?
0500499
2009/02/26(木) 16:22:10-auto_scalar オプションでいけた
0501デフォルトの名無しさん
2009/02/26(木) 16:49:38だたの
-auto
や
-static
でうまく行くこともあるよ。あとは実行時の環境変数の
setenv KMP_STACKSIZE 16M
とかデフォより大きめに取ると幸せなことが多い気がする。
0502デフォルトの名無しさん
2009/02/26(木) 16:50:50ていうか、
-auto_scalar
ってデフォルトになってない?
0503デフォルトの名無しさん
2009/02/26(木) 17:23:54>>499は単にスタック不足なだけでは?
ところで、KMP_STACKSIZEってunlimitedに設定できないの?
0504デフォルトの名無しさん
2009/02/26(木) 17:58:56Fotranの場合ってどういう風に割り当てられるんだろう・・・そういやあまり意識したことなかった。
0505デフォルトの名無しさん
2009/02/27(金) 02:43:33元々はAUTOMATIC変数の類はスタックに、ALLOCATE命令のときはヒープだった気がする。
ただ歴史的経緯のせいでサブルーチン側で巨大な配列をとっているプログラムが多くて
それがSTACKOVERFLOWを引き起こすから、IntelFortranなんかはデフォールトでは
スカラー変数はスタックで、配列の類はヒープで確保するようになった気がする。
インテルの掲示板に、デフォールト・オプション切り替えの話が出ていた旗もするのだが
昔のことなので記憶がはっきりしない。
OpenMPを指定すると、オプションが切り替わってしまう話はこのスレに出ている。
http://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/59627/
FortranはFORTRAN66時代がSTATICに変数をとっていた関係で、
FORTRAN77で規格の上ではサブルーチン類の変数はAUTOMATICでありうるように
なったにもかかわらず、互換性の観点からデフォールトでSTATICに変数を
とっていることが多くて、それはFortran90でもしばらく続いていたという歴史的経緯がある。
0506デフォルトの名無しさん
2009/02/27(金) 11:54:19そのスレのSteveさんが言ってるlocal scalar variablesって、配列じゃない(次元1の)フツーの変数のことだよね?
だとしたら、
If you say /Qopenmp (or /Qopenmp-stubs), this changes to /automatic - ALL local scalar variables are allocated on the stack.
のALL local scalar variablesはALL local variables(つまりローカルスカラ変数だけじゃなく、ローカル配列変数も含む)の間違いじゃないかな?
勘違いしてたらすいません
0507デフォルトの名無しさん
2009/02/27(金) 13:12:01そうなんじゃないかな?
配列までスタックにとるからoverflowしていると考えるとつじつまが合う?
0508506
2009/02/27(金) 13:52:41そうだよね。SteveさんIntelのスタッフなんだし書き間違わないでくれよぉ・・・
OpenMPの場合にデフォルトで全てのローカル変数(スカラも配列も)がスタックになるのは
スレッドセーフのためってあるけど、逆に言えばそれらをstaticに扱ったらスレッドセーフに
ならないってことだよね。それってやっちゃまずいことなんだろうか?
OpenMPまともに使った経験がないもんで・・・識者の方コメントおながいします
0509デフォルトの名無しさん
2009/02/27(金) 14:48:49つけてコンパイルすると、仮にautomaticは嫌いだっと
-noauto
つけても消されるはず。なのでopenMPを読んだ状態だと
有無をいわさずにぜんぶautomaticになる・・・と理解しているけど。
shared属性をつけてかつcommonブロックに貼り付けるとかして
やや無理なことをしないとstatic領域には配置されないと思ふ。
-staticはその名のイメージとは違って共有ライブラリを使わない
(というか実行ファイルに埋め込んじゃう)オプションだし。
spec.orgにあるOMP2001の情報のところに試した人たちが
実際に使ったオプションが載ってるので、自分のところのシステムに
近い(or 同じ)マシンがあったらそれと同じモノをだいたい使っているけど、
まあ大間違いではないと思う。お薦めできるのかは分らないけど・・・。
0510デフォルトの名無しさん
2009/02/27(金) 15:30:30数値計算では馬鹿でかい配列は可能な限りstaticにするのが基本じゃない?
サブルーチン渡る度に配列をコピーとかやってられんでしょ?
その代わりメモリのアロケーションはコーディングする側がきちんと考えてあげないといけないけど。
この辺がリソースをある意味富豪的に使うことが前提とされるJavaやC#などのオブジェクト系言語との違いだね。
0511デフォルトの名無しさん
2009/02/27(金) 16:56:15副プログラムが並列のloop内にあるのか、
副プログラム内で並列のloopがあるのかで答は変わる。
■ このスレッドは過去ログ倉庫に格納されています