くだすれFORTRAN(超初心者用)その4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/01/24(土) 18:32:01もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
FORTRAN使いが優しくコメントを返しますが、
お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。
●注意事項
・質問する前にGoogle等の検索サイトで検索しましょう。
・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。
・エラーの場合は起きた状況、環境(OS・コンパイラ・バージョン)、エラーメッセージも詳しく書きましょう。
●前スレ
くだすれFORTRAN(超初心者用)その3
http://pc11.2ch.net/test/read.cgi/tech/1196384126/
くだすれFORTRAN(超初心者用)その2
http://pc11.2ch.net/test/read.cgi/tech/1164121236/
くだすれFORTRAN(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1138063703/
●関連スレ
FORTRAN �W
http://pc11.2ch.net/test/read.cgi/tech/1163319215/
0112デフォルトの名無しさん
2009/04/02(木) 14:42:53たいていのfortranコンパイラは警告を出すけど、そのまま作業を続けるよね。
関係ないけど、アメリカのSGIが潰れてしまった・・・。
alphaマシンがまた一つ・・。
0113デフォルトの名無しさん
2009/04/02(木) 16:40:180114デフォルトの名無しさん
2009/04/03(金) 00:39:20だな。
2ch的にはアルファは法則発動であぼーんと言うべきか。
0115デフォルトの名無しさん
2009/04/03(金) 03:53:41だね。
片手間?で「Alpha始めました」の張り紙を出したところが出始めは案外評判が良くって、
注力しはじめたところでAlphaが本領を発揮してアボン。
ifort ってバージョンの9あたりから、シェフお薦め最適化オプション -fast 付けるより
デフォの方が早かったりしない?
自分のコードが変なだけかもしれないけど、そういうケースに気付くようになった。
0116115
2009/04/03(金) 03:54:480117デフォルトの名無しさん
2009/04/03(金) 21:45:54Altixも終わりかな?
0118デフォルトの名無しさん
2009/04/03(金) 22:17:35デフォってオプション何もなしってこと?
-fastは-O3も含んでるけど、そんなことあり得るのかな?
0119デフォルトの名無しさん
2009/04/04(土) 01:06:57いや、悪くないんじゃ?w>男は黙ってインライン
いずれにしろFortranは速度も優先せざるを得ない以上、他の言語のように
抽象化しまくって直交性高めまくるやり方を期待するのは土台無理というもの。
やはりFortranerに一番必要なものとは「漢気」である。
0120デフォルトの名無しさん
2009/04/04(土) 03:15:30-fast = -O3 -ipo -static
が基本オプションかな?微妙にifortのバージョンで変わるみたいだから、
シェフお薦め、というのはそうだな。ip(o) が混じるから副作用があるのかも。
0121120
2009/04/04(土) 03:23:26-O3 は unrolling促進やら含んだとおもうし、-staticも何か悪さする場合もありそうな気もする。
-fast -unroll0 で
あんろーりんぐ無しの最適化を試してみるといいのかも(順番大事だよ)。
0122デフォルトの名無しさん
2009/04/04(土) 04:15:42何にしても-fastで遅くなるなんて悲しすぎるから、ちゃんと見直したほうがいいかと
0123デフォルトの名無しさん
2009/04/04(土) 07:55:360124デフォルトの名無しさん
2009/04/04(土) 14:58:48おすえて
昔派の漏れは static の方が安心な気がするのだが、最近のデフォは dll だっけ?
0125デフォルトの名無しさん
2009/04/04(土) 15:05:45自分が経験した例では、バージョン8くらいまでは -ftz つけると速くなったけど
9以降だと遅くなった、こととかかな。
intelも工夫してるんだろうけど、使う側もいろいろ試してちょ、という事か?
0126デフォルトの名無しさん
2009/04/04(土) 16:46:45-O2ってデフォでかかるの?
>>124
dllのほうが一般に速いという話を聞いたことが
0127デフォルトの名無しさん
2009/04/04(土) 17:06:46かけると、
-O0 disable optimizations
-O1 optimize for maximum speed, but disable some optimizations which,,,,,,
-O2 enable optimizations (DEFAULT)
-O3 enable -O2 plus more aggressive optimizations that may not improve
-O same as -O2
と出るね。linuxに入ってたversion9.1ではこうだった。
0128デフォルトの名無しさん
2009/04/04(土) 17:08:32-fast や -O3
つけたらかえって遅くなっても
製造元の想定の範囲内って事で気にしないのが良いのかも知れないね。
0129デフォルトの名無しさん
2009/04/04(土) 17:13:45ほんとだ、v10.1でもそうだった
thx
0130デフォルトの名無しさん
2009/04/05(日) 04:50:08インテルはあっさりしてるよね。ゼロ・松竹梅の4つ。
マクドナルドと吉野家くらいメニューが違う。
0131デフォルトの名無しさん
2009/04/05(日) 12:52:09細かいオプションとかカテゴリーの違うものを比較してないか?
0132デフォルトの名無しさん
2009/04/05(日) 20:46:12完全フリーでgnuより速いコンパイラって出ないもんかね
0133130
2009/04/06(月) 07:50:51ごめんよ。書いた後でこりゃ変だと思ったよ。
>>132
出ないものかね。でも、
いまのintelのポリシーだと、個人で商用目的でFortran/Cを使う人以外、そこそこ満足だからね。
フリーな奴の開発プロジェクトを立ち上げたり維持するだけの理由があまり無い気もする。
0134デフォルトの名無しさん
2009/04/09(木) 21:37:01Note that academic use of the products does not qualify for a non-commercial license.
Intel offers heavily discounted licenses to academic developers through our Academic Developer Program.
0135133
2009/04/10(金) 02:07:44ちょっと知ったかぶり、というか早合点、というかまぬけ。
それ、大学関係者じゃ自明じゃね?
まわりの奴は知らないだろうと得意がる子供は・・・
0136デフォルトの名無しさん
2009/04/10(金) 11:03:54実際使っちゃってる香具師は少なくはないだろう
内部告発とか食らうとやばいかも?w
ちなみにAdobeとか違反使用に厳格なところは大学に何億って賠償請求することもある
Intelはあんまそういう話を聞かないが、寛容なのかなw
0137デフォルトの名無しさん
2009/04/10(金) 12:13:43134のはまっとうな指摘だと思うよ。
いろんなソフトでアカデミックパック版があるしフリーソフトが当たり前にあるから、
特に大学に長くいる人はなんとなくライセンスに鈍感というか、
タダであることを当然と思うところがあるから。
>>136
フリーでつかって学習して潜在的なユーザーが増えると良いな、という事だろうけど、
論文に使った計算と、購入検討のための試運転の区別が付きにくい、という事はあるから
なかなかintelが積極的にライセンスチェックするのはコスト的にも難しいのかも。
というか計算結果にコンパイラ毎のクセが出るようでは困るw
それこそ内部告発でもなければintelも動けないだろうね。
その点あたりまえだけど純粋なソフト屋はその辺もっとシビアで迅速だよね。
0138デフォルトの名無しさん
2009/04/11(土) 00:37:18大学に入って初めてfortranにさわりました。
Frotran77を使用し、ソースプログラムは何とか書けましたが、次の作業の
コンパイルというものがよくわかりません。
OSはLinuxを使用しています。何か別のソフトをインストールして作業しないと
いけないんでしょうか?
よろしくお願いします。
0139デフォルトの名無しさん
2009/04/11(土) 01:24:23普通はg77とかgfortranとか入ってるだろうけど
学校で使ってるのなら、まずは教官に聞け。
0140デフォルトの名無しさん
2009/04/11(土) 17:28:30ハッカーな天才を何人か高給で雇えばいっちょ上がり、ってわけでもないよね?
0141デフォルトの名無しさん
2009/04/11(土) 17:48:34コードを吐くだけなら、学生が1ヶ月かければ作れる。
仕様の細かいところまで厳密に対応し、高度な最適化をかけ、複数の
ターゲットに対応し、etc... となると複数人で継続してメンテナンスされる
プロジェクトになる。
0142デフォルトの名無しさん
2009/04/12(日) 12:51:36write (*, 20) ( A(k),k=1,10)
20 format('A=',(' ',10i2))
例えば、上記のように、write文でdo形反復を用いて、配列Aの要素十個を
横並びに書き出すことは出来るのですが、
書き出したい要素数を n としたとき、n個を横並びに書き出すことは出来ますでしょうか。
下記の方法では、出来ませんでした。
write (*, 20) ( A(k),k=1,n)
20 format('A=',(' ',ni2))
よろしくお願いいたします。
0143デフォルトの名無しさん
2009/04/12(日) 13:40:06多分それと違う答は・・・・
character*4 fmtstring
(中略)
write(fmtstring,'(i2.2,''i2'')') n
write(*,fmt=fmtstring) ( A(k),k=1,n)
かなあ。最初の文字列定義はプログラムの頭の方でしてね。
2行目でformatの中身を文字列で指定して
3行目で使ってる。でもこれダメなシステムもあった気がする・・。
intel と 富士通ではOKだったけど、pgfでは果たしてどうだろうか?まあ試してみて。
0144142
2009/04/12(日) 16:42:18その方法を試してみましたところ、
コンパイルに文句を言われることは無くなりました!!
しかし、セグフォルトが出たので、これからデバッグかんばリます。。。
0145デフォルトの名無しさん
2009/04/12(日) 16:57:10確定しているの?
i2だと二桁までだからもし3桁以上の数字が来ると、
そこで**とか出るだろうけど、どうも一部のシステムでは
そこでsegmentation faultになることもある。
なので特段の理由がなければi9くらいに
めけんとうで大きめな桁数にしとくと吉。
0146142
2009/04/12(日) 18:35:39i9くらいにして、charactor の宣言も、それを許容できるくらいに取っていれば安心ですね。
ありがとうございます。
セグフォルトは他で出ているようです。
実は、ifort 用のソースをpgf90に書き換えているのですが、とても難航しています。
何かご助言を頂けないでしょうか。
0147デフォルトの名無しさん
2009/04/12(日) 22:15:49誰か教えてほしい。
integer fulls,maxval,minval,sum,N,P
real avr
character subjct*30,FNAME*20
read(5,*) FNAME
open(1,FILE=FNAME)
read(1,*) sucjct,fulls
N=0
maxval=-9999
minval=fulls
sum=0
10 read(1,*,END=20) P
write(6,*) P
if((0.le.P).and.(P.le.fulls)) then
N=N+1
sum=sum+P
maxval=max(maxval,P)
minval=min(minval,P)
else
write(6,*)'Incorrect data! ignored'
end if
goto 10
20 close(1)
end
出典は、原田賢一 、2007:Fortran77プログラミング、サイエンス社 PP57
0148デフォルトの名無しさん
2009/04/12(日) 22:45:35これって既出ですか?
以下再現するコードと実行結果です。
C------ a.f ------
program main
call test
call test
end program main
subroutine test
write(*,*) i
i = i+1
return
end
C-----------------
> gfortran -finit-local-zero -fno-automatic -oa a.f
> a
0
0
他のコンパイラ(g77 や ifort -save)だとちゃんと 0 1 と出力されます。
0149デフォルトの名無しさん
2009/04/12(日) 22:49:306行目
read(1,*) sucjct,fulls => read(1,*) sucbct,fulls
0150149
2009/04/12(日) 22:50:400151デフォルトの名無しさん
2009/04/12(日) 23:39:12ありがたい。しかし、そこを直してもランタイムエラーが発生する。
コンパイラはSalfort FTN77だが、問題ないだろうか。
また、>>147で示した書籍で勉強した人はこの例題をどうしたのか良ければ教えてほしい。
0152デフォルトの名無しさん
2009/04/12(日) 23:46:11入力ファイルと、エラーメッセージがないと教えようがないです
0153デフォルトの名無しさん
2009/04/13(月) 01:26:13実はIntelFortranのwin32のdebug mode でも同じ問題がずっと存在しているw
releaseやx64ならおk。漏れはx64メインなのでバグレポートしてないw
ごめんな、スチーブ
0154デフォルトの名無しさん
2009/04/13(月) 01:37:100155デフォルトの名無しさん
2009/04/13(月) 01:59:50>>152のいうとおり、入力データファイルや、エラーメッセージを見ないとなんとも
答えようがない。テキストも持ってないし。
ただ、エスパー的に推測すると、入力ファイルの最後の行で数値データの
最後で改行していないためだろう。処理系によるが、空行がないとEND=nnに
引っかからない。
あと、
>if((0.le.P).and.(P.le.fulls)) then
これは多分 (0.ge.P) ではないかと思われる。
入門テキストであることをかんがみるに、科目ごとの平均点を求めるプログラムだろうが
点数が負のテストは少しばかり酔狂すぎる。
0157148
2009/04/13(月) 20:49:55ttp://groups.google.co.jp/group/comp.lang.fortran/browse_thread/thread/57938d5454a90397/2e76214c47de894e?lnk=gst
しょうがないのでしばらくはsave文つけて対応することにしました。
>>156
148のa.fを使って試してみたところ、
Linuxのifort 10.1でも再現しました。
$ ifort -zero a.f
$ ./a.out
0
0
$ ifort -g -zero a.f
$ ./a.out
5820432
5820433
0158デフォルトの名無しさん
2009/04/13(月) 22:32:07>>155
>>147だが動かすことが出来た。読み込むファイルの場所を間違えた場所に保存して
いたのが原因だった。終わってみれば単純なミスで申し訳なく恥ずかしい限りだ。
ただ、自分としてはFortranについて多くのことを学べた。ありがとう。
0159デフォルトの名無しさん
2009/04/14(火) 01:04:12Intel Fortran+Visual studio2005でOpenMPを利用して
ライブラリなどがインストールされていない環境でコンパイルしたプログラムを走らせたいのですが
「libiomp5md.dllがありません」と出てしまって、走らせることができません。
ライブラリのない環境で使いたいとき、どのようにコマンドを指定すればよいのでしょうか。
0160デフォルトの名無しさん
2009/04/14(火) 10:50:580161デフォルトの名無しさん
2009/04/15(水) 15:40:48gfortranはなんか色々変わりすぎてて気に入らないので、自分はもうしばらく手を出すつもりはないなぁ
>>156
0 clearって-zeroオプションのこと?
-zeroはsaved属性でかつ初期化されてない変数を0にするものだよね
-automaticはローカル変数をスタックに置いちゃうから、-zero付けても初期化されないと思う・・・多分
>>157
-gってデバッグ関係だよね?
save効果もあるんだ
0162デフォルトの名無しさん
2009/04/16(木) 01:40:49>0 clearって-zeroオプションのこと?
>-zeroはsaved属性でかつ初期化されてない変数を0にするものだよね
>-automaticはローカル変数をスタックに置いちゃうから、-zero付けても初期化されないと思う・・・多分
いや、32bit debugの時だけ変数0初期化が効かない。releaseではzero optionの有無で
0が出るか、ゴミが出るかが変わる。
最近、文法書を読んでいて知ったのだが、変数宣言時に初期値を与えると自動的に
SAVE属性になるそうな。漏れは、automaticなら、なんとなく毎回宣言時初期値に
初期化されるものだと思っていたよw
0163デフォルトの名無しさん
2009/04/16(木) 11:18:58>いや、32bit debugの時だけ変数0初期化が効かない。
>releaseではzero optionの有無で0が出るか、ゴミが出るかが変わる。
じゃあやっぱりバグかぁ
>変数宣言時に初期値を与えると自動的にSAVE属性になるそうな。
そうそう、これ意外と盲点だと思う
0164デフォルトの名無しさん
2009/04/18(土) 20:23:47管理上煩雑なので何とかしたいところですが、何か良い方法はないでしょうか?
例えば、今まで並列数分だけ分けていたファイルを1個のファイルにまとめ、
Fortran内でデータの場所(アドレス)を指定することで直接アクセスする
ようなことができれば、かなり便利だと思うのですが。
0165デフォルトの名無しさん
2009/04/18(土) 23:37:04DIRECT ACCESS でだめなのか?
サイズが一定でないと困るが
0166デフォルトの名無しさん
2009/04/19(日) 14:15:43MPI2にそんな機能があったような
0167164
2009/04/19(日) 20:21:55directアクセスの存在を始めて知りました。
レコード長を把握しておく必要はありますが、効率は良さそうですね。
実際の使い方としては、recl指定子の値をデータの最小サイズで与え、
読みたいレコードの位置を逆算してread文のrec指定子に与える、
という方法で合っていますか?
>>166
なるほど。ということは、Fortranの実装とは別の機能を用いる方法もある、
つまりやり方は色々ある、ということでしょうか。
0168164
2009/04/19(日) 20:54:59>recl指定子の値をデータの最小サイズで与え、
と言うより、そのファイルを作ったときのwrite文のreclと同じ値をread文のreclに与える、
と言ったほうが適切でしょうね。
あと、使っていて気づいたことなのですが、statusを指定せずにopenしてwriteする場合
sequential・・・いったん元のファイルを消した上で書き込み
direct・・・ファイルのレコード位置に対する書き込み
という違いに気をつけないといけませんね。文法的に正確に書けば
sequential・・・強制的にstatus='replace'
direct・・・ファイルがあればstatus='old'、なければstatus='new'
でしょうか。
0169デフォルトの名無しさん
2009/04/20(月) 17:42:55ディスクがフラグメンテーションしてる場合、データの分断を許すような
実装だと、ディスクへのアクセスはアドレスのテーブルみたいのを参照
しながらじゃないと原理的にできないよね
フラグメンテーションしててもデータの分断を許さないような実装なら、
ディスクスペースの使用効率は下がるかもしれないけど、テーブル参照が
不要になるからアクセスが速くなるはず・・・だよね?
速度を要するスパコン用のファイルシステムって、そういう実装なのかなぁと想像・・・
0170デフォルトの名無しさん
2009/04/20(月) 23:17:11ダイレクトアクセス知らなかったのか。
>直接アクセスする
とか書いているから知ってるかとw
昔の映画のコンピュータで磁気テープがグルグル回っているのはダイレクトアクセス
ファイルを読み書きしているんだべなぁ。
0171デフォルトの名無しさん
2009/04/21(火) 03:39:52今で言う、ディスクとメモリの両方を兼ねてたからね。
ほんのちょっと前にFACOMのやつにテープはめるのをした。
あれ、テープのはしっこを挿入口に近づけると空気で吸い込んでくれるのね。
人間の手で全部とりまわさないといけないのかと思ってたよ。
0172164
2009/04/22(水) 15:52:56不勉強故、失礼しました。
ところで、磁気テープというのは今も使われているものなのでしょうか?
今、20半ばの院生ですが、テープというのを見たことがありません。
0173デフォルトの名無しさん
2009/04/23(木) 01:43:48円の場合
function X(a)
X=cos(3.14*a/360)
end
function Y(b)
Y=sin(3.14*b/360)
end
こいつを回せば、円をつくることはできる。でもXは小数点の数字になっているよね。
でもやりたいことは、2次元配列を作成して、F(x,y)のx-yのメッシュの中で
円を作成するには、x−yは整数である必要がある。どうすればいいの?
わかる人いますか?
この円・球構造について、拡散方程式やら偏微分方程式を解きたいと思っているんだけど、
こういうことってできますか?
0174デフォルトの名無しさん
2009/04/23(木) 03:11:150175デフォルトの名無しさん
2009/04/23(木) 06:57:36メッシュが正方格子でなければならない理由はあるんかいな?
Yesならメッシュを細かくするしかないなぁ・・・
節点座標値が整数でなければならない理由はないと思うょ
0176デフォルトの名無しさん
2009/04/23(木) 09:04:46ギザギザがでるし、30度とか45度回転させた初期値境界値で同じ計算すると結果が結構違うにょ。
査読受けたら絶対そこを突っ込まれるにょ。
んで満足いく事例を出せなかったらそこで終わりにょ。
学部生より上なら極座標なり175の言う通り非構造格子にしてきちんとするのがいいにょ。
学部生なら、卒研としてならまあ許されると思うにょ。・・・Fortranと関係なかったにょ。
0177デフォルトの名無しさん
2009/04/24(金) 00:48:54どうしても直交座標にしたいなら、かなり細かくメッシュを区切って、
計算結果にある値をかけて、整数にするとか。
新しく買ったCorei7で計算させたら、滅茶苦茶速くてびっくりした。
PenMのノートで10分かかる計算が1分で出来て、しかも8個同時に走らせても余裕。
64bitOSを積んだから、というのもあるのかな。
0178デフォルトの名無しさん
2009/04/24(金) 05:33:49まあ、これはそうだろうなあ。
>しかも8個同時に走らせても余裕
へえ。よさそうだね。
余裕、というのは「一個の時のまあ8割くらいのスピードで8個とも動く」くらいなの?
0179デフォルトの名無しさん
2009/04/24(金) 16:38:50教官から貰ったコードが正方格子のだったけど、
変更できない、とかかな?
そもそも173のやりたいことがいまいちよくわからない。
Fortranとは関係ないし、ここまでかな
0180デフォルトの名無しさん
2009/04/25(土) 00:30:02特に並列化をしていない(というよりも、並列化がうまくいかなくて結局諦めた)ものを走らせると
大体16%ぐらいのCPU使用率になるから、
8個ぐらい走らせると100%使い切るようになるからね。
この使用率からすると、たぶんそれぞれ8〜9割で動いているといったところかな。
うまいこともっと最適化できないかな・・・。
0181デフォルトの名無しさん
2009/04/25(土) 00:40:55物理CPUは4個だろうから、よほど例外的な場合でなければ多分4つより大だと帰って遅くなるだろう。
0182デフォルトの名無しさん
2009/04/25(土) 14:40:15>>180
ありがとう。
少なくともOSが認識する使用可能なリソースはフルに使い切れるんだね。
>>181
Xeonの2コアが4つ乗ったマシンでOpenMPを走らせると
きれいに8倍になってくれたけど、これとはまたいろいろ設計が違うんだろうな。
0183デフォルトの名無しさん
2009/04/26(日) 01:08:12よく考えたらそうだよなあ…
実際時間を計ってみたら、8個計算の時間 / 2 > 4個計算の時間だし。
ただ、実際には数百から数千個計算するし、それぞれ条件が違うから時間もバラバラで、
その待ち時間を埋めるために、まとめて計算するほうが速かったなあ。
プログラム内でうまく並列化をしてフルに使い切れればいいけれど、なかなかうまくいかないんだよな…。
OpenMPをコマンドを入れたら、かなり遅くなったし。
0184デフォルトの名無しさん
2009/04/26(日) 11:27:08なるほど〜。
どちらかというとたくさんある計算をぼんぼん
放り込んでおける、事がメリットなのかもね。
そうなるとqueueの管理の仕方がみそ?
0185デフォルトの名無しさん
2009/04/26(日) 13:12:42Corei7は、物理4コアをハイパースレッディングで見かけ8コアにしている。
純粋に計算などが重い場合ハイパースレッディングは足を引っ張るだけ。
そのばあいは4スレッドで動かすほうがいい。
MKLのLinpackのBenchmarkをやってみるとどのくらい遅くなるかわかる。
OpenMPのオプションでスレッド数を物理コア数に合わせるようにすると本来の力を発揮する。
あるいはBIOSでハイパースレッディングを切るとかいう手もある。
ただハイパースレッディングが有効な場合もあるので、個別の事情に依る。
自分で試すしかない。
0186デフォルトの名無しさん
2009/04/26(日) 15:36:02ちゃんと1プロセス/1CPUにふってくれるのかな?
0187デフォルトの名無しさん
2009/04/26(日) 23:50:26いや、なんか環境変数にそれなりの指定をしないと、1スレッド1物理プロセッサに
必ず行くとは限らないので遅いまま。
OpenMPのマニュアルの環境変数のところを読めば書いてあったはずだが、
詳しくは忘れたw
0188デフォルトの名無しさん
2009/04/27(月) 12:50:57どちらかというと、dplace や mpirun みたいな並列実行の環境を調えるソフトの
とりあつかう領域だね。dplaceだと
dplace -c1,3,5,7
かな?実機でもってるわけでもないし、いまマニュアルが見れないからわかんねw
HTがあると並列しながら、ふつうの文房具的にPCやWSを使えるわけだから
使い方次第では結構いいかもなあ。
0189デフォルトの名無しさん
2009/05/02(土) 11:50:18作りたいんですけど、書き出す配列を全部列記する以外に楽な方法ってないでしょうか?
0190デフォルトの名無しさん
2009/05/02(土) 19:37:29もう一回計算しなおせ!w
データを後生大事に取っておくのは演算コストが高かった時代の名残。
むろん演算量にもよるがw
0191デフォルトの名無しさん
2009/05/02(土) 20:33:05目的がよく分からないんだけど
コード中の全ての配列をはき出すってこと?
0192デフォルトの名無しさん
2009/05/02(土) 22:53:03行列がスパースなら,非ゼロ項を書き出すことにすれば,ちょっとはマシな気がする。
0193デフォルトの名無しさん
2009/05/03(日) 04:00:14配列の全ての成分を書き出せば良いのであれば
integer a(1:10000)
real b(1:100,1:100)
write(10)a,b
とかではダメか?
0194デフォルトの名無しさん
2009/05/06(水) 06:16:46デバッグとかあるし。
大型計算機とかだと、1計算の時間上限があるからね。
再開するのに必要な情報を全部ファイルとして書き出す選択肢は
持っていた方が良いと思うにょ。
>>193
それがいちばんだね。
書式指定無しでファイルにたたき落とす
違うシステムでは役に立たないけど、メモリの内容をそのままファイルに落とすので
書き込みも読み込み+計算再開も速い。
書式付きもできるけど、めちゃくちゃ遅いし。
0195デフォルトの名無しさん
2009/05/08(金) 14:33:24デバッグ目的以外で、メモリの中身を全部ダンプする必要性が分からないんだが・・・
今時の計算は反復計算などの単純なループ部が計算のほとんどを占めてて
ループ開始前の前処理なんて全体から見れば知れてるわけで、
次回リスタート用のためにわざわざメモリのスナップショットを取る的な発想は今時ないでしょ。
メモリとストレージの速度差が開く一方の今日じゃなおさら・・・・
0196デフォルトの名無しさん
2009/05/09(土) 04:28:25195はあまり大きな計算はしたことがないんだろうな
0197189
2009/05/09(土) 15:11:48あー…書き方があいまいですいません、答えてくださった方ありがとうございます。
えと、粒子法的計算なんですけど、191さんがおっしゃっている通りです。
コード中のすべての配列をはきだしたいです。
193さんのやり方は当然わかりますけど、それだとwriteの後に吐き出したい配列を
列記しないといけませんよね。そういうの無しで全配列をばーっと吐き出す方法ないかな、
と思ったわけです。やっぱ使う配列をコツコツ列記するしかないみたいですね。
>>195
非定常計算なんで状況によっては計算途中の段階から少しだけ条件を変えて
計算したいとかあるんですよ。正直にやったら一週間近くかかるので。
0198デフォルトの名無しさん
2009/05/09(土) 16:24:49質問がひどすぎw
まぁベンダー拡張命令でメモリー全ダンプみたいなことが出来る機種もあった気がするw
0199195
2009/05/09(土) 16:47:04たしかに、スパコンでは数日〜1週間程度の計算しかしたことない。
大きい計算とは言えんか。
スパコンのジョブってたいてい時間制限が数時間のオーダーだから、
例えば30000ステップ計算したいとしたら3000ステップのジョブを
10回投げるってのが普通だよな。
粒子法はよく知らないけど、格子点はどんくらいなの?
0200195
2009/05/09(土) 16:49:29粒子数だっけ?
0201デフォルトの名無しさん
2009/05/09(土) 16:54:07普通は計算再開に必要な変数の数(配列の大きさではないよ)って知れてるよね。
粒子法なら、粒子の位置・速度と経過時間くらいか。
あとはiterationのプロセス毎に計算する量や座標系のように
再生成に計算量のかからないものがほとんどだろうから、
それをとっておく必要はないし。
ふつうに193のやり方で落とせばいいんじゃね?たいした手間でもなし。
ところで、ダンプして落としたとして、変数の変更はどういう風に再開時に反映させる
つもりだったんだろうか?
0202デフォルトの名無しさん
2009/05/09(土) 16:59:47同意。細切れ計算するときに継承すべき情報はあるけど、ダンプする理由はないやね。
ふと、189の「配列全部」は別にダンプではないのでは、と思ったけどオイラの勘違いかな?
0203デフォルトの名無しさん
2009/05/09(土) 17:01:580204195
2009/05/09(土) 17:17:34イメージ的に使ってしまった
0205デフォルトの名無しさん
2009/05/09(土) 17:55:35用途はCFDです。
まあ趣味なので大きな計算は必要ないのですが。
0206デフォルトの名無しさん
2009/05/09(土) 23:52:54論理型を整数型その他に変換できますか?
例えば、いくつかの言語では
(a>b)
等とすると0または1が得られますが
これと同等なことをFORTRANでも行いたいのですが方法がわかりません
無理ならすんなり諦めます
0207デフォルトの名無しさん
2009/05/10(日) 00:55:29一般的な回答としては、できない。
不可能ではないという意味では、IF THEN ELSE でやれば出来る。
意図しているイメージに一番近いだろうと思われるのは、TRANSFER関数で型変換をすること。
しかし、FORTRANの規格では論理型の内部状態を定義していないので
0/1に投影できるかは運しだい。普通は0/-1が多い(真:ビット全部0と偽:ビット全部1)。
0208デフォルトの名無しさん
2009/05/10(日) 01:51:22早速ありがとうございます
何となくですができました
0209デフォルトの名無しさん
2009/05/10(日) 05:17:13real a, b
a=1.0
b=2.0
lonlon = (a .GT. b)
write(*,'(i3)') lonlon
なるものをつくると、
最後の行で型が合わないと怒られる
0がでてくる
1がでてくる
-1がでてくる、
の4パターンあったw
危険だw
0210デフォルトの名無しさん
2009/05/10(日) 21:13:40それかコンパイラオプションをまとめているサイトないですか?
gccのまとめを見ればよいのでしょうか?
0211デフォルトの名無しさん
2009/05/10(日) 21:18:17どういう用途?
論理型が用意されてる言語なら、特に理由がない限りそういうマネはやめたほうがいいかと
シェルスクリプトレベルならよくやるけどさ
■ このスレッドは過去ログ倉庫に格納されています