[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 02/14 08:15 / Filesize : 180 KB / Number-of Response : 532
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

FORTRAN W



1 名前:デフォルトの名無しさん [2006/11/12(日) 17:13:35 ]
FORTRAN総合スレッドです。
FORTRAN77/90/95/2003, HPF等、FORTRAN全般に関する話題を書き込んで下さい。

・FORTRAN関連情報
お約束だが、まずは自分で調べよう
www.google.co.jp/

x86で動作するFortranコンパイラ
www.nminoru.jp/~nminoru/programming/x86-fortran.html

The Fortran Company
www.fortran.com/
Polyhedron Software
www.polyhedron.co.uk/
Google Directory - Fortran
directory.google.com/Top/Computers/Programming/Languages/Fortran/

・前スレ
FORTRAN III
pc8.2ch.net/test/read.cgi/tech/1104724162/
FORTRAN II
pc5.2ch.net/test/read.cgi/tech/1068351911/
Fortran
pc2.2ch.net/test/read.cgi/tech/1003214738/


307 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 15:06:41 ]
あと、System関数を利用せずに外部ファイルの行数を取得する方法ってありますか?
例えばhoge.txtの中身が
----------
apple
123 456
pie
----------
であれば、そのファイルの行数を読み取りinteger型の変数に3を
代入するという操作を行いたいのです。

もちろんSystem関数の利用でできたのですが、それだとプラットフォームが
Linuxに限られてしまうので、Fortranでファイルの処理を行うようにすれば
各種プラットフォーム上でも使えるソースになって便利だなと思いました。
この操作に限らず、Fortranでファイルを編集するための勉強はどのような
ところで勉強すればいいのでしょうか?

308 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 17:41:38 ]
>>307
普通に空readでend of file が出るまでまわして、変数に一足していけばいい。


309 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 08:19:26 ]
>>308
できました。
[Fortran]$ cat num_of_tmp
sfejoiwa
seflkew
sfepo pweko
wsefk

sefpowe posef

sdf s;ef
[Fortran]$ ./a.out
x = 8

ありがとうございました(><)

310 名前:TESTちゅう [2007/07/12(木) 17:03:55 ]
フィボナッチのプログラムが急ぎで必要です。だれか教えてください!!!

311 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 21:18:17 ]
      WRITE(*,*) 'N='
      READ (*,*) N
      DO 10 I=1,N
      IF0=IF1
      IF1=IF2
      IF ( I.GT.2 ) THEN
            IF2=IF1+IF0
      ELSE
            IF2 = 1
      END IF
   10 WRITE(*,*) I,IF2
      STOP
      END

312 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 22:54:57 ]
Numerical Recipes の第3版が出るらしいな。


313 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 03:14:53 ]
確かに本家の看板に出てるね
www.nr.com/
情報さんくす


314 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 03:17:27 ]
↑ってC++がメインになってないか(笑)
微妙にスレちがいかも

315 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 23:37:05 ]
>>314
ホントだ
裏切られた!www
怪しからん奈!




316 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 03:17:16 ]
>>314
FORTRAN版は出す気あるのかな?

初版の非Fortran版はトランスレータにかけただけのような
gotoバリバリコードで出版していたのだから、無茶なFortranコードでも
著者は別に気にしないよなw


317 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 04:09:06 ]
>>316
どうだろ?C++の機能をつかって実装しているようだから、
以前の FORTRAN -> それ以外の言語 の移植とは訳が違いそう

NRの2nd(1992)から3rd(2007)への以降に15年掛かっているね
たぶん3rdに取り組み始めた頃は、まだC++が輝いてたんだろ

複素数の取り扱いが、クソややこしいテンプレートになっていたり、
整合配列に問題があったりと、C++は数値計算に向いてない
c99の方がずっとマシ(ただし、こっちは対応コンパイラがPGIぐらいしか無い)
Fortran90かFORTRAN77のまま、アルゴリズムだけ進歩させた方が良かったと思うよ 

NRのメリットは安い値段とソースコード付きってとこだったが、
C++のみになると、あんまりメリット感じないね C言語だとGSLとかあるしね
どうせ自由に配布できないんだったら NAG, IMSLの方がいいんじゃないか?
少なくとも漏れはNR 3rdイラネ

318 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 13:01:52 ]
>>317
あれれ2版からも15年たってるのかよw

しかしアルゴリズムの進歩版とかのってはいないのかね?
第2版では、初版に無かったnon-numerical algorisms の章が一番役に立ったw

CRC16とかHuffman符号化とか、情報工学的なアルゴリズムが、数値計算との垣根を乗り越えてきた
タイミングだったのか。


319 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 23:48:31 ]
今日本屋に行ったらこんな本があった。

Fortress言語―マルチコア時代の並列化プログラミング言語

もう出すのかよw 
ざっと見た感じ糞本だったがw



320 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 12:21:50 ]
まったく話を聞かないしなぁ>Fortress
スラドでも議論があったけど、将来も普及する見込みは厳しそうね

321 名前:デフォルトの名無しさん [2007/07/23(月) 01:55:57 ]
>>320
よく知らんが、SUNのマルチコアCPUに大量のスレッドをばら撒いて並列計算させるという
コンセプトの言語なんだろ?

アイデアとしては面白いんで内科医?

Haskellっぽい仕様も入れているらしいし、次世代の踏み台にwww


322 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 10:15:40 ]
>>321
オープンにしたからSUNの石専用ってわけじゃないのでは?

確かに踏み台ぽいなw

323 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 23:44:19 ]
Thoughts on Language Design
New challenges require new solutions
Guy L. Steele Jr.
ttp://www.ddj.com/dept/architect/184406382

まぁ、それなりに考えがあってFortressを作っているようだ。
Sunがアメリカのスパコン助成から脱落したので、さいさきは暗いだろう。

日本(富士通)で拾う振りをして、アメリカに疑心暗鬼を起こさせるのが吉だと思うwwww

324 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 09:34:34 ]
>日本(富士通)で拾う振りをして、アメリカに疑心暗鬼を起こさせる
スゲーwwww
策士っすねw

325 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 00:35:12 ]
>>324
最近の最速スパコン競争は、なんか土建屋の既得権争いっぽいから、
釣りに走って遊ぶほうが、たしかにいい気がするw




326 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 22:19:24 ]
「スカラ型とベクトル型を両輪に」,次世代スパコン構成の狙いを語る
ttp://techon.nikkeibp.co.jp/article/NEWS/20070808/137619/



327 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 21:56:30 ]
>>326
53. 次世代、ペタスケール、T2K (2007/8/12)
ttp://grape.mtk.nao.ac.jp/~makino/articles/future_sc/note054.html#rdocsect59

すっぱいぶどうの更新w

328 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 02:10:13 ]
Cygwin上で動くfortran90コンパイラってありませんか?
すみませんが どなたか情報をお持ちでしたら教えて下さい。

329 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 18:45:37 ]
>>328
以前
g95.sourceforge.net/
を試したら動いた

330 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:08:37 ]
>>328
ttp://g95.sourceforge.net/

でも、なんでパッケージに入ってないんだろう?

331 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 20:03:47 ]
CygwinのGCCが4.x.xになったらこっちが入るからじゃないかな
ttp://gcc.gnu.org/wiki/GFortran


332 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 20:17:52 ]
>>329 - 330
ありがとうございまs。試してみます!


333 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 23:01:43 ]
Steve Lionel のコラムで、FORTRANで書かれた(多分)世界初のアドベンチャーゲームネタが出ている。
softwareblogs.intel.com/2007/08/22/you-are-in-a-maze-of-twisty-little-passages-all-alike/

334 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 23:11:05 ]
マジカヨ

335 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:10:18 ]
Intel fortranて、バージョン10になってから、MKLがおまけで付いてくるようになったな。
MKL買った人カワイソス=おれ



336 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 23:28:08 ]
おまけと言ってもMKL有りとなしじゃ、けっこう価格差が…

337 名前:デフォルトの名無しさん mailto:sage [2007/08/31(金) 00:31:24 ]
>>335
忘れたがMKLのライセンスからをコンパイラのライセンスに転換できて2個分になったんじゃ中田ッけ?
ガセだったら酢マンコw


338 名前:335 mailto:sage [2007/08/31(金) 01:05:11 ]
9→10へのバージョンアップのときに、スタンダード版からプロフェッショナル版への変更が
安く(1万円くらい)できただけだった。いずれにしても、MKL単体で買って損した気分だ。

339 名前:デフォルトの名無しさん [2007/09/07(金) 13:02:07 ]
www.nag-j.co.jp/fortran_compiler.htm

NAGのcompiler IntelMac版登場 トライアルができる

340 名前:デフォルトの名無しさん mailto:sage [2007/09/08(土) 21:10:14 ]
intel fortran compiler for windows 9.0 を使用していて

icl.cs.utk.edu/lapack-for-windows/nmake_install.html

の手順に従いlapackとblasを導入しようとしてますが

1. C:\Program Files\LAPACK_3.1.1_for_Windows\LAPACK 3.1.1 for Windows\ に移動
2. set_environment.bat x86 Intel
 と入力(Blasはデフォルトを使用)
4. nmake /nologo all

とすると

xilib.exe /OUT:"C:\Program Files\LAPACK_3.1.1_for_Windows\LAPACK 3.1.1 for Windows\blas.lib" *.obj
が実行されているときに次の旨の表示がでてうまくいきません。
"lib"を実行しています
"lib"がみつかりません

>>197
の slim に相当する形でxilibが使われているものだと思うんだけど、どう使用すればうまくいくのかわかりません。
ちなみにxilib に代えて xilink /lib を使っても同じです。

blas.lib lapack.lib を作るにはどうすればよいでしょうか?

341 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 13:51:43 ]
質問です。
fortran95を使っているのですが

do i=1, size(A)
A(i) = hoge + i * fuga
end do

みたいのを

A = hoge + [なにか] * fuga

のようにして添字を配列演算に用いて一行にまとめられないのでしょうか?
それと

do i=1, size(A)
hoge = 複雑な式
A(i) = hoge * fuga
B(i) = hoge * piyo
end do

のような場合、

A = 複雑な式 * fuga
B = 複雑な式 * piyo

と書く事で二度計算されてしまうのは無駄ですし
式が長くなって読みづらいのですが、配列演算に対する一時変数のようなものは無いのでしょうか。

342 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 21:33:40 ]
>>340
Visual Studioに含まれているlib.exe/link.exeへのパスが通ってない。

通常はset_environment.batから呼ばれている
"%IFORT_COMPILER91%\IA32\Bin\ifortVars.bat"
の中でVSへの設定も行われるはずだが
環境変数 IFORT_COMPILER91 はIVF9.1用の設定なので
IVF9.0なら IFORT_COMPILER90、10.0なら IFORT_COMPILER10
に変更する必要がある。

ifortVars.bat を実行してもlib.exe/link.exeが使えない場合は
ifortVars.bat を修正するか、予めVS中の VSVars32.bat か
VCVars32.bat を実行しておく必要がある。

343 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 23:48:01 ]
>>341
A = hoge + (/(i,i=1,size(A))/) * fuga

344 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 17:01:44 ]
>>343
ありがとうございます。こんな素直な方法があったんですね。
後者については今のところ難しいでしょうか。

あと配列演算に使える関数が作れるといいのですが、これも難しいですかね。
配列をもらって配列を返すようなタイプだと一次的に戻り値用の配列を確保しなくてはいけないので現実的ではないんです。

345 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 19:36:29 ]
>>344
しかし>>343のようにやると、いったん暗黙のテンポラリ配列が生成されて
それから積が取られることになるので、DO LOOPの展開式とは等価ではない。

>あと配列演算に使える関数が作れるといいのですが、これも難しいですかね。
elementalだったかpureオプションつければ可能だった気がする。
調べてくれw





346 名前:345 mailto:sage [2007/09/11(火) 01:37:16 ]
>>344
MODULE m_elemental
CONTAINS
ELEMENTAL REAL FUNCTION watson(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x
watson = x**2
RETURN
END FUNCTION watson
END MODULE m_elemental
!
PROGRAM holmes
USE m_elemental
IMPLICIT NONE
INTEGER :: i
REAL :: x(10), y(10)
DO i = 1, 10
x(i) = REAL(i)
END DO
y = watson(x)
PRINT '(10f7.1)', x
PRINT '(10f7.1)', y
STOP
END PROGRAM holmes


1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0
1.0 4.0 9.0 16.0 25.0 36.0 49.0 64.0 81.0 100.0
Press any key to continue . . .

elemental ⊂ pure だったw


347 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 12:33:44 ]
>>345
試してみましたが確かにテンポラリ配列作られてますね。
elementalは便利ですね。ありがとうございました。

348 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 19:16:35 ]
>>347
a(1:n) とか部分配列の類もテンポラリを作ることが多いので、
ソースコードが短くなるからと調子に乗って、DO LOOPの代わりに乱用すると、
思わぬところでスタックオーバーフローとかで憤死する。

ベクトル機の場合は一旦テンポラリ配列に展開したほうが早くなるだろうが、
パイプラインのスカラー機の場合はDO LOOPのままの方が早いのではないかと思う。

まぁ勝手に最適化するかも知れんし、トレードオフが色々あるので、なんとも胃炎が。


349 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 15:26:34 ]
age

350 名前:デフォルトの名無しさん [2007/09/18(火) 22:17:04 ]
ageも満足にできんのか!!

351 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 00:26:58 ]
intel Visual fortran 10.0 日本語版 発売

352 名前:デフォルトの名無しさん mailto:sage [2007/09/21(金) 01:08:09 ]
「日本語版」つーてもFortranの場合、コンパイラのメッセージは英語のままだからありがたみがないなぁ。
日本語マニュアルは別途ダウンロードできるし。

353 名前:デフォルトの名無しさん [2007/09/21(金) 23:56:06 ]
質問です。
fortran77を使っているのですが、コンパイラ時にはノーエラーで、実行のときランタイムエラーと表示されるのですが、

WARNING - Label 170 has not been referenced
NO ERRORS,1 WARNINGS [<MAIN@>FTN77 Ver 4.03]
Creating executable: sinchouryuu.exe
*** Unable to create executable file: sinchouryuu.exe

実行可能なファイルの作り方を教えて下さい。

あと、実行時のエラーの
00401000 MAIN# [+174f]

て書いてあるのですが、どういう意味でしょうか?


因みに170行は
166:* cnbの転置行列
167:
168: do 70 j=1,10
169: do 80 i=1,6
170:
171: cbn(j,i)=cnb(i,j)
172:
173: 80 continue
174: 70 continue

こんなんなんです。

354 名前:デフォルトの名無しさん [2007/09/22(土) 00:01:51 ]
ヤコビアン行列がつくれません!!


どういった風に作るのか、作り方をどなたかおしえてください!

355 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 21:55:29 ]
>>353
>fortran77を使っているのですが
それは「規格の種類」であってこの場合、それよりも使用しているコンパイラや
OSの名前を書いてくれた方がありがたい。

> WARNING - Label 170 has not been referenced
「170行」ではなく文番号の170が参照されていない。

> *** Unable to create executable file: sinchouryuu.exe
> 実行可能なファイルの作り方を教えて下さい。
おそらくsinchouryuu.exeを実行中で書き換えられないのだろう。
すべてのsinchouryuu.exeを終了させてからコンパイルするのだ。

> 00401000 MAIN# [+174f]
> て書いてあるのですが、どういう意味でしょうか?
MAIN#(プログラムの開始位置)から 5919バイト目の位置でエラーが発生した。
エラーの種類はFTN77の場合、ダイアログの上の方に書いてある。

>>354
つ google



356 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 01:37:18 ]
FTN95をインストールしました。
plato3(日本語不使用)でコンパイル実行可能でした

fcpadを利用しては出来ないですか?
コンパイラパス
C:\Program Files\Silverfrost\FTN95\ftn95.exe
と入力
*** Invalid executable file suffix - only .EXE is permitted
とでてコンパイルできない。

秀丸でマクロを使おうかと思いきや、
PATHが通らず失敗。

誰か、ご指導願います・・・。

357 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 02:17:02 ]
>>356

くだすれFORTRAN(超初心者用)その2
pc11.2ch.net/test/read.cgi/tech/1164121236/355

358 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 23:51:02 ]
Intel Visual Fortranで/Qparallelを使って並列化したところ、
あまり高速化しませんでした。プログラムによってはむしろ遅くなることも。
サポートに問い合わせたら、こちらでも2コアでは確かにスピードダウンが
確認できましたが、4コアではスピードアップが確認できました、と回答。
まるでリフォーム詐欺のようだ・・・
単純な行列×ベクトルのみの計算でも最大30%アップ程度なのだが
並列計算ってそんなものですか?


359 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 01:28:55 ]
マシンの構成によるし・・・
QuadコアなCPU?

360 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 01:48:48 ]
>>358
自動並列化は、そんなもんだよ。スパコンでも同じ。

まぁ並列化よりSSEの方が簡単に簡単にスピードが出るようになる。

361 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 03:04:44 ]
SSEは適当に-O3とかするだけでも有効になるはず(多分

Qparallelって要するに自動でOpenMPディレクティブ入れてるだけだよね?
最近のOpenMPはどうなんだろう・・・古い古いとよく言われるけど、今後のマルチコアCPUで通用しなくなるのだろうか

362 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 09:34:52 ]
>>360
行列積とか素朴な演算ならSSEを入れれば単精度は4倍速、倍精度は2倍速とか、素直に早くなる。
コンパイル時のメッセージにベクトル化云々と出ればSSE使ってる。


363 名前:358 mailto:sage [2007/10/24(水) 11:02:26 ]
ありがとうございます。
現在はOpteron1210(DualCore)を使っています。
インテルからはまるでQuadCoreのCPUを買えというような回答だったので、
詐欺商法のように聞こえました。
SSEは使っています。
CPUのクロック数があがらなくなった現在では並列計算にしないと
スピードアップが望めなくなると思い、並列を検討しています。
自分の勉強不足も大きいのですが、誇大広告にがっかりです。


364 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 11:20:56 ]
Intelのサポートに聞いたの?
こういうのって大抵まともな(役に立つ)回答は期待できないものでは?
MSよりはマシだけど・・・

結局ググるなり2chなりどっかのコミュニティなりで探すしかないんだよね

365 名前:358 mailto:sage [2007/10/24(水) 12:58:59 ]
>>364
バージョンアップ込みで年間数万円(いくらか忘れた)のサポート料を払っているので、
使ってみたのですが、本当にがっかりです。
サポート料金を10倍にしてもいいので、まともな回答を期待したいです。
ググってますがなかなかいい情報が出てこないです。
私の最高は3割増が最高で、実務的な計算ではほとんど役に立ちません。
あれこれ考えている間に、時間をかけて計算したほうがいいのかと思えてきました。




366 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 12:59:13 ]
>>363
いや詐欺ではない。
既存プログラムを自動並列化して場合、スピードダウンするのはごく普通の現象。
はじめから並列化を前提に設計して、かつ指示行を入れまくってもいまいちなのは、実は常識だw


367 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 15:53:27 ]
>>365
スレ違いな話だけど、本気のガチンコサポートをするなら商売する側としては10倍でもペイしないと思うけどね・・・
そこはしょうがないっすよ

368 名前:358 mailto:sage [2007/10/24(水) 16:19:19 ]
日本語がおかしかった。失礼しました。

>>367
あるソフトベンダーは年間140万円のサポートでいたれりつくせり。
(何が原因でしょうね?と問い合わせたら修正されてかえってくる)
そこは最優先でサポートを継続している。
別の40万円のところは、それなりだけど解決のヒントはくれる。
(これらは言語ではなくてアプリケーションですが)
VisualFORTRANは「開発に問い合わせます」のまま放置・・・。
ただ、今回の件については決して特殊な質問ではなく
広告にうたってある性能が出ないよに始まり、
そちらのもっている理想的なプログラムでいいから出してくれといっても
出てこない。いったいどんな質問だったら答えることができるのだろう。


369 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 19:20:01 ]
>>368
言語のサポートの場合、コンパイラのバグに対する対応の早さだと思う。
そういう点でIntelはパッチの出方は早い。

あとサポート掲示板には、様々なレベルの質問が出ているのでこっちも見てみたらいいかも。
ttp://softwarecommunity.intel.com/isn/Community/en-US/forums/1005/ShowForum.aspx

370 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 20:49:16 ]
NEC:世界最高性能のスパコン「SX−9」を発売
 NECは25日、世界最高レベルの計算能力を持つスーパーコンピューター「SX−9」を開発し、
発売を始めたと発表した。1秒160億回の計算能力を持ち、最大限の512台を連結して運用し
た場合、1秒839兆回の計算が可能なシステムが完成する。

 新開発の高性能CPU(中央演算処理装置)を搭載した。国内外の大学や研究機関などが、
気象予測やロケットの設計、核融合のシミュレーションなどに利用することを想定している。
価格は1億5000万円。

 現在の世界最速のコンピューターシステムは米IBMが開発し、秒間280兆回の計算ができる。
NECは、10年の完成を目指す世界最速スパコンの開発計画を、日立製作所や富士通と進めて
いる。

ttp://mainichi.jp/select/biz/news/20071026k0000m020076000c.html


371 名前:デフォルトの名無しさん [2007/11/02(金) 00:54:14 ]
プレステ3用FORTRANが動くようになった?
ttp://www.ibm.com/developerworks/power/cell/downloads.html

ttp://cell.fixstars.com/ps3linux/index.php/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8



372 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 13:20:39 ]
このままPS2クラスタのようにお遊びで終わるのかと思ったが、そうでもないのか・・?
でも低価格の普及ゲーム機を使えるってのがそもそものウリなんだから、今のXboxやwiiに苦戦してる状況じゃ厳しいんじゃないか?

373 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 23:44:01 ]
東北大学が NEC の世界最速スパコン「SX-9」16台導入へ

著者: japan.internet.com 編集部 プリンター用 記事を転送

NEC は1日、東北大学情報シナジー機構情報シナジーセンターから、世界最速の
ベクトル型スーパーコンピュータ「SX シリーズ モデル SX-9」16台からなる大規模
スーパーコンピュータシステムを受注したことを発表した。新システムは、最大性能
26.2テラフロップス(テラフロップス:1秒間に1兆回の浮動小数点演算能力)に達し、
SX シリーズでは国内最大規模のシステムになるという。

同センターは、全国の大学や研究機関の研究者が利用する共同施設として、常に
最高・最新鋭の計算機システムを設置し、航空宇宙、地球環境、IT、ナノテク分野など
最先端の学術研究を支援。他では実行できない大規模シミュレーションの実行環境の
整備、専門的立場からの利用者プログラムの高速化推進を積極的に行い、長年研究者
にとって使い勝手の良いシステムが構築されている。現在、センターの利用者は学内外で1,500人を超えるという。

同センターは、その前身である大型計算機センターが1986年に SX シリーズを導入して以来、
ベクトル型スーパーコンピュータを採用している。
japan.internet.com/busnews/20071101/3.html


374 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 14:00:01 ]
阪大は10ノードらしい。
opentechpress.jp/enterprise/07/10/26/0340253.shtml

375 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 23:51:09 ]
>>374
阪大センターはハッカーにやられてから、セキュリティーが強化されすぎて
使いにくくなったって知り合いが言ってたなー。
数年前のことだが。





376 名前:デフォルトの名無しさん [2007/11/23(金) 16:54:32 ]
休みだし、何か新しいネタを出してくれ。


377 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 17:13:22 ]
暇ならFortran2003の処理系作ってくれ。

378 名前:デフォルトの名無しさん [2007/11/29(木) 13:22:06 ]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
     日本ニューメリカルアルゴリズムズグループ株式会社
      LAPACKサンプルプログラム集を公開開始
        LAPACKの利用がより身近に!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
日本ニューメリカルアルゴリズムズグループ株式会社(東京都中央区、以下
日本NAG)は、netlibにより公開されている線形代数パッケージ「LAPACK」の
サンプルプログラム集を公開いたします。これによりLAPACKを利用するユーザ
プログラムの開発が、よりスピーディーに行えるようになります。

公開URL:www.nag-j.co.jp/lapack.htm

また、日本ニューメリカルアルゴリズムズグループ株式会社ではより高性能な
LAPACKを、NAGライブラリ製品(NAG Fortran SMP Library)と共に提供してい
ます。

■ LAPACKについて
LAPACKはLinear Algebra PACKageの略で、netlib(www.netlib.org/
により公開されている高性能線形代数パッケージです。(日本語ではエルエー
パック、もしくはレイパックと発音されます)連立一次方程式、最少二乗問題
固有値問題、特異値問題を解くためのサブルーチンが含まれています。

■ NAG Fortran SMP Libraryについて
1500以上のサブルーチンから構成される並列科学技術、統計計算ライブラリ
です。1500のサブルーチンの中には並列化済みのLAPACKルーチンも数多く含ま
れており、LAPACKを利用するプログラムを1行も変更することなく、性能を
更に高めることが可能です。


379 名前:デフォルトの名無しさん [2007/12/06(木) 03:09:49 ]
初心者で最小二乗法のプログラムが組めないんですがどうすればいいんでしょうか?

380 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 10:03:56 ]
>>379
図書館へ行って、データ処理の本を読むんだ!


381 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 19:03:50 ]
データ読み込んでΣ求めて公式通り計算すればおk

382 名前:デフォルトの名無しさん [2007/12/07(金) 22:27:07 ]
>>379
いますぐ俺の口座に3000円振り込むんだ!

383 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 12:57:37 ]
最小二乗法くらいならいくらでも転がってるだろ・・・

384 名前:デフォルトの名無しさん [2007/12/12(水) 20:46:38 ]
コンパイルはできたのですが、こんなメッセージが出てきて
途中で止まってしまいます。

Runtime error from program:c:\users\○○○○\documents\fortran\traje_0point.exe
Unknown floating point exception 91a1
Floating point co-processor fault at address 00401ef8


00401ad0 GOENTR [+0428]

00401000 main [+059c]


eax=00000b77 ebx=00000096 ecx=00000000
edx=0365fc38 esi=0365fcdc edi=0365fcd8
ebp=0365fc94 esp=0365fbd8 IOPL=0
ds=0023 es=0023 fs=003b
gs=0000 cs=001b ss=0023
flgs=00010206 [NC EP NZ SN DN NV]

00401ef8 fsqrt
00401efa fmulp st(1)
00401efc fmul [0044a2c0]

誰かこのエラーの意味ならびに解決策をご教授していただけないでしょうか?
ちなみに○○○○のところは私の名前が入ってるので、伏せておきました。


385 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 22:23:51 ]
>>384
コプロの機械語の命令に対応物が無いのだから、コンパイル時に対象機種以外の命令が入るような
最適化をしたのではないかと思われる。
Pen4SSE2を無印ペンチアムで動かすとか、AMD用SSE命令をIntelで動かすとか。

そうだとすれば、最適化を落とすか、対象機種を明示的に指定するか、全機種対象にオプションを変えればいい。





386 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 01:46:25 ]
>>384
ちょうどfsqrtのところ(00401ef8)で例外が起きているので
GOENTRの中でSQRT()に負の数を渡す等の不正な計算を
しているように見えるが。

387 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 16:42:46 ]
386に一票


388 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 23:13:02 ]
コンパイラは何だろう?


389 名前:デフォルトの名無しさん [2007/12/14(金) 18:44:44 ]
384です。
自己解決しました。
ありがとうございました。


390 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 00:00:18 ]
>>389
今後、他の方の問題解決に役立つこともありますので
出来ればコンパイラの種類や解決方法を公開できる範囲で良いので
書き込んでもらえると有難いです。

391 名前:デフォルトの名無しさん [2007/12/22(土) 10:35:08 ]
CONTINUE

392 名前:デフォルトの名無しさん [2007/12/23(日) 10:22:03 ]
stop
end


393 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 23:51:38 ]
最近の Intel Fortran って Traceback 機能が効いてなくね?


394 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 21:28:28 ]
そうか?
-traceback オプションででちゃんとソース名と行番号まで表示されるぞ。

395 名前:デフォルトの名無しさん [2007/12/26(水) 21:50:42 ]
年明けでよかったらv10.1で試してみるよ



396 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 23:18:42 ]
>>395
頼む。やってみてくれ。

漏れの環境だと、Windows+VisualStudioのビルドオプションでtracebackをつけているのだが、
9.1だとTracebackを吐くが、Ver10.0やVer.10.1だと普通の実行時エラーしか出ない。

ツール+オプションでコンパイラだけ変えているはずなので、オプション指定は共通だと思うのだが・・

397 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 01:48:12 ]
手元のPCに10.1しか入ってないので他のバージョンと比較できないが、10.1の場合:

・VS上で[デバッグ] -> [デバッグ開始] (F5) で実行
 VSのデバッガ上でブレイクがかかる(「呼び出し履歴」にスタックトレースを表示)

・VS上で[デバッグ] -> [デバッグなしで開始] (Ctrl + F5) で実行
 トレースバック情報を表示せずに終了

・別途コマンドプロンプトを開いて実行
 トレースバック情報を表示して終了

となった。

398 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 01:15:49 ]
>>397
dクス
確認・把握した。

漏れは近年デバッグ実行をまったく使っていなかったのと、エラーの出る奴は
コマンドラインから実行したことがなかったので気づかなかったw

多分、デバッグなし実行でもトレースバックは呼び出し履歴に強制リダイレクトされているが、
(error出力かなんかで)
この場合呼び出し履歴を見るメニュー項目が無いというバグなのだろうw 空想だがw




399 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 19:18:05 ]
せっかくVisual Studioを使っているんだからデバッガも使おうぜ。

400 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 11:51:04 ]
>>399
いや、昔は使っていたけど、なんというか、Fortran向きでない感じがして。
巨大配列のはみだしとかの検出に向いてないせいかな?


401 名前:デフォルトの名無しさん [2008/02/21(木) 23:04:14 ]
Fortran2003の処理系はよ出せ

402 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:57:48 ]
>>401
IBMのコンパイラが一番進んでるって聞いたんだけど。
どうなのかね?
NAGも最近おとなしいし。


403 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 17:47:06 ]
中規模疎行列連立方程式を解くのにFortran (Intel Win & Linux)を使おうとしてます。
小規模のものは、MATLABで、不完全三角分解前処理+BiCGSTABとかGMRESで解いてきました。
しかし方程式の大きさが1万を超えるあたりから、MATLABの組み込みソルバーのメモリ効率が悪くて
Fortranに戻ってきた次第です。

今、とりあえずMKLを入れてみて、その中でおすすめ(?)ぽかったPARDISOを使ったコードを組んでみて
サイズ5万くらいだとそれなりの速さで解いてくれることがわかりました。MKLのマニュアルには、普通の
疎行列用反復ソルバもあると書いてありますが、サイズが10万とか超えるようになると、PARDISOのような
疎行列直接法より、反復法の方が良いのでしょうか。

ほかのソルバライブラリでは、並列用PETScを試しています。ただ、解いている問題の係数行列が良くないのか
PETScだと収束しないことがあって、PARDISOやMKLを使おうかと思っています。

並列計算に移行するちょっと前くらいの大きさの疎行列連立方程式を解くのにおすすめのライブラリあったら
教えてください。

404 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:23:17 ]
>>403

LAPACK か ATLAS ではダメ?そんな大規模な計算をやった事が
無いので、使い物になるかどうかは分かりません。

Linux ならパッケージでインストールできるはず。
ウチの Debian には aptitude で入れた。

405 名前:403 mailto:sage [2008/03/16(日) 18:44:46 ]
>>404さん
レスサンクスです。

LAPACKとATLASも使ってます!MKLもLAPACKとかLAPACK95を使います。素晴らしい
ライブラリだと思います。
漏れがやりたいのは、疎行列連立方程式なので、LAPACKとかATLASをベースにして
そのラッパーが欲しいという感じです。LAPACKがすでにBLAS/ATLASのラッパーなわけ
ですが。。。





406 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:57:43 ]
>>405
一般論からすれば、反復法か直説法かの選択は行列の内容によるんでね?
たちの悪い行列でなければ、反復法の方が有利だと思うけど。
直説法なら確実に有限回で終了することが分かっているが、反復法は直交性が数値誤差で腐るから
数学的にはおかしいが、現実には有限回で終わらなかったりするし。

行列が、ほんとにスカスカの疎か、singularに近いか、固有値が縮退しまくっているかとか、
その辺は使用者しか分からんから、なんともいえないような。

中身の分からん奴に機械的に使わせるから安全第一で行きたいとか、運用面にも依存するし。


407 名前:405 mailto:sage [2008/03/16(日) 21:00:50 ]
>>406さん
仰るとおりっす。
とりあえず、自分一人で使う(研究)ので、ブラックボックス的で安全なものでなくとも
高速で、導入やコーディングが楽なのが希望です。

行列の状態は悪いです。4x4のブロックに分かれてる感じで、離散化を細かくやると
主対角が卓越して、対角ブロックのみに不完全分解系の前処理掛けると、
それなりに収束しますが、係数行列のサイズが増大するというジレンマです。

疎行列性は、5万x5万で、非零要素が0.1%切ってるくらいです。

ご指摘のように、問題依存性が高いので、なかなかご意見いただくのは難しいかなとは
おもっております。

とりあえず、みなさん、10万x10万くらいの疎行列連立方程式(差分法や有限要素法
なら頻出だと思います)を解くときって、どんな言語で、どんな実装してるんですかね。。。
反復法ソルバもSaadのtemplateの擬似コードから自分で書いてるのか、とりあえず
いろいろソルバライブラリ試してるのか。。。たぶん、疎行列の格納形式から考える必要が
あると思うので、そのあたり、Fortran使いの皆さんがどうやってるのか知りたいです。

408 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 16:41:03 ]
Steve Lionel (Intel) のコラムで、A=B+CとA(:)=B(:)+C(:)での後者の問題点について
触れられていた。最近のインテルコンパイラは少し賢くなって、この程度の単純な場合なら
後者で無駄なテンポラリへのコピーをしないようになったようだ。

とはいえ、まだ問題ありと。
ttp://softwareblogs.intel.com/2008/03/31/doctor-it-hurts-when-i-do-this/


409 名前:デフォルトの名無しさん [2008/05/17(土) 02:00:17 ]
EXCEL VBAである計算をしてたのですが、時間がかかって仕方がないので
PCにFORTRANをインストールしてfortranでプログラミングやろうかと
思っています。学生時代にFORTRAN 77を使った経験がある程度。
たしかMS FORTRAN ぱわーすてーしょんつうのも使ったことがあります。

専門家の多そうなこのスレで恐縮なのですが、現行のwinXPが入ってるPCで
動かすとよさげなFORTRANコンパイラは何がいいでしょうか・・。
計算内容は簡単なモンテカルロ法です。



410 名前:デフォルトの名無しさん [2008/05/17(土) 10:28:08 ]
>>409
www.nminoru.jp/~nminoru/programming/x86-fortran.html
見れ。無料でとりあえず試すならcygwin+g77 かminGW+g77でしょう。
コストパフォーマンスならインテルコンパイラか。

どっちにせよ今EXCEL VBAで組めているのなら、今からわざわざFortranなんぞやらずに、
コンパイラ買う金で速いCPU買ったほうがマシだと思うけどね。

411 名前:デフォルトの名無しさん [2008/05/17(土) 22:05:46 ]
>>どっちにせよ今EXCEL VBAで組めているのなら、今からわざわざFortranなんぞやらずに、
>>コンパイラ買う金で速いCPU買ったほうがマシだと思うけどね。

レスありがとうです。
VBAって異常に遅いなと思っていたのですが、CPU速くすれば
FORTRANに追いつける程度なのか・・・。
そこらへんがよくわかってないので。


412 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:13:50 ]
VB2008Expressでも使えば?
VBAよりはだいぶ速いしタダだよ

413 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:41:52 ]
どのくらいスピードを要するのか知らんがVBはインタープリタだろう?
SilverFrostのFTN95とかフリーコンパイラも転がっていることだし、
77でよければWatcomとか昔なつかしいのもあるし、g77のWin用もあるし、
Fortranで素直にやらせてやれw


414 名前:デフォルトの名無しさん [2008/05/19(月) 22:54:50 ]
モンテカルロ法とかだとCPU周波数にほぼ比例して
速くなると思っておいていいのですか・・・


415 名前:デフォルトの名無しさん [2008/05/19(月) 23:35:44 ]
>>411
その速いCPUで動かせばFortranはもっと速くwwww
マジレスするとパラメータサーベイとかなら今の4コアとか使えばかなり効率はあがる。
さすがにBASICがFORTRANを超えることは無理。
自分のプログラミングスキルと作るコードの複雑さから、コーディングやデバッグの
労力を見積もって自分で判断すべし。別にfortranとかVBAに限らんけどな。

VBAはクソ遅いと聞くが使ったことがないのでなんともだが、
Free BASIC VS intel Fortran ではFORTRANが速いといっても高々数倍程度〜コードによってはBASICが勝っている。
shootout.alioth.debian.org/gp4sandbox/benchmark.php?test=all&lang=ifc&lang2=fbasic
さすがにIntel Fortranはgnu fortranやJava, Mono Ruby なんかには楽々勝利。

>>414
だいだいYES。と言いたいがモンテカルロ法だけでは「乱数を使った確率的解法」ぐらいしか
わからんからなんとも。ランダムウォークのシミュレーションなんかだとCPU周波数に
比例してくれるようなコーディングができる場合が多い。



416 名前:デフォルトの名無しさん [2008/05/22(木) 09:28:10 ]
質問です。
salfordの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

すいませんが、どなたか教えてください。

417 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 11:44:17 ]
>>416
正直質問の意味がよく分からん。
コンパイラのバグでなければ、ありえない症状なので
ここに書いてない部分がおかしいとしか言いようが無い。

f77の範囲ならg77とか他のコンパイラもあるのでそれで試してみるとか、
salfordのf95で試してみるとかして見るのも一つの案。


418 名前:初心者 [2008/05/23(金) 15:40:54 ]
失礼します.
Compaq 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


419 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:58:39 ]
>>418
エラーでないぞw

エラーメッセージをコピーしてみせてくれ。

420 名前:初心者 [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に変えてからエラーが出るようになったように感じます.

お手数をかけて申し訳ないです.
よろしくお願いします.

421 名前:デフォルトの名無しさん [2008/05/26(月) 17:55:54 ]
そりゃおめぇ,”デスクトップ”で実行しようたって無理な話よ
マイドキュメントに移動させな

422 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 23:07:33 ]
>>421
お前ひどい奴だなwww

>>420
最初ッからそう言ってくれれば、すぐに答えられる。
それはCVF時代のFAQで、日本語のパスやファイル名が入るとコンパイラが対応していない
のでエラーを吐く。2バイト文字を使わないディレクトリでやればおk。



423 名前:初心者 [2008/05/27(火) 13:41:47 ]
デフォルトの名無しさん
解決しました!!!
簡単な質問に親切に答えていただいてありがとうございました!!!

424 名前:初心者 [2008/05/30(金) 15:38:10 ]
重ね重ね質問すみません.

fortranをまわした結果をexcelかテキストファイルに出力したいのですが,
どのようなコマンドを打てばよいのでしょうか?
また,長い結果(10万桁以上)をファイルに出力したいのですが,
御教授お願いします.

425 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 16:32:44 ]
本人はできるだけ鼻につかない文章で丁寧に質問してるつもりなんだろうな。



426 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 17:59:33 ]
>>424
それ、先生に聞いた方がいいよ。お金払ってるんでしょ。

427 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 19:26:16 ]
program main
integer :: 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


「ご教示」を「ご教授」って書いちゃう男の人って。。。

428 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 00:19:23 ]
>>427
hogeはUNIX系の連中の使う言葉だ。
メインフレームの誇りを持つFortrannerは使っちゃいかんw



429 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 11:14:03 ]
foo bar baz は?

430 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:02:34 ]
鋼鉄の撃墜王

431 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 18:28:25 ]
>>415
これみるとIntel C/C++使ったほうがいいみたいだな

432 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:41:18 ]
>>431
単にFortranの書き方知らないだけだべ。


433 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 19:44:49 ]
つまりFortranを知ってる人が少ないと。
技術者を集めにくいと。

434 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 01:08:45 ]
>>431
INTEL Fortran と C++ はバックエンド部は共通だろうから、そもそもそれほど大きな違いが
出るはずが無い。


435 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:13:52 ]
慶大の生協運営の書店に
FORTRAN入門(FORTRAN77入門)が普通において有って驚いた



436 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:25:26 ]
>>435
浦昭二君、名誉教授だから当然でしょ

437 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:33:09 ]
もうf77は教えないほうがいいだろ。常識的に考えて。

438 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:50:45 ]
>>437
講義の教科書ではなくて、研究室用だと思うよ。
研究室にはf77の遺産があるから、参考図書として必須。

439 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:48:11 ]
>>435
大学の生協なら売ってるのが普通だと思ってた。
俺は慶応じゃないけどね

440 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:29:15 ]
阪大にも置いてあるよ。
どこでも置いてあると思う。

441 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:51:54 ]
浦昭二のFortran66の方はさすがに絶版になってしまったな。



442 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 01:30:36 ]
>>441
遺産プログラムがFortran66(ブロックIFなし)で書かれていて驚愕した orz

443 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 02:26:31 ]
>>442
俺のもらった遺産プログラムは、拡張DO LOOPを使っていたせいでコンパイラを通らず
すごく困った。

拡張DO LOOPとは、DO LOOP の中からGOTOで飛び出して、なんかやった後DO LOOPの
中に帰ると、またさっきのLOOPの続きが出来るというもので、当時の俺の想定外の悶絶機能で
何がおきているのか全く理解できなかったw

FORTRAN77で廃止になったはずなんだが、たいがいのコンパイラは密かに対応していた。
まぁ、怖いので書き直したがw

そういう事もあるのでFORTRAN66の教科書も無くしてはいけないと思うですよ。

444 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 11:39:03 ]
そうか、塾生は君付けなんだなw

445 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 02:23:23 ]
今、本屋で買える範囲で、おすすめのFortranの教科書は何ですか?

絶版は困ります。アマゾンの古本で買えるならいいですが。




446 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 04:13:42 ]
Michael Metcalf, John Ker Reid, "Fortran 90/95 Explained"

447 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 10:04:59 ]
>>445
Fortranを勉強する目的などを明確にせよ。
 規格:わからない、f77、f90以上
 目的:講義対応、研究室対応、趣味、業務対応

以下はとりあえずの推薦
規格わからない 講義対応
 Fortran 90プログラミング 冨田博之
 www.amazon.co.jp/dp/4563014095/

f77規格 講義対応
 FORTRAN77入門 浦昭二
 www.amazon.co.jp/dp/4563013587

f90規格 研究室対応
 数値計算のためのFortran90/95プログラミング入門 牛島省
 www.amazon.co.jp/dp/4627847211/

448 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 10:10:18 ]
テンプレに追加きぼん

449 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 00:50:25 ]
>>446-447
さんくす


450 名前:デフォルトの名無しさん [2008/06/29(日) 02:12:38 ]
>>434
バックエンド共通ってだけで速度が同じになるなんてありえない。
字句解析や最適化は言語仕様とコンパイラ実装に強く依存する。

Fortranのシンプルさはその点強みだったけど、
最近のFortranはその他言語にどんどん近づいているからねえ。

451 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 03:11:59 ]
>>450
>>415のベンチマークの話だから。

452 名前:デフォルトの名無しさん [2008/07/03(木) 00:26:47 ]
>>450
ベンチマークサイトのような、汎用アルゴリズムならfortranは速くなくて不思議は無いですよ。
C/C++とfortranのユーザー数考えたら、intelだってどちらにリソース割くかは自明でしょう。
ナンバークランチング用途ならfortranは多分まだ速いと思いますけど。


453 名前:デフォルトの名無しさん [2008/09/06(土) 00:53:21 ]
Intel Fortran の次期バージョンベータテストが始まっている。
V.11が来年一月までの期限付きだが、無条件に配布されている。
Windows版はVisualStudio(Fortran 専用)つきで。

気になる人はチェキラ!w


454 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 14:52:15 ]
もともとIntel FortranとC++は非商用目的なら無料で使えるんじゃない?

455 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 23:57:43 ]
>>454
無期限はLinuxだけじゃないか?




456 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 15:10:37 ]
Linux版だけだな
Linux版ならIntel FortranとIntel C++が無期限で無償で使える

457 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 15:12:37 ]
非商用目的限定の話だけどね

458 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 00:50:36 ]
1秒間プロセスを寝かせるのはsleepという関数があるけど,
10msとか100msとか,ミリセカンドオーダーで寝かせるようにするには
どうすればいいですか?
Intelコンパイラを使っているので,Intelコンパイラ依存の関数でも
いいです.
今は,無駄な計算ループを作って待たせているのですが,
それだとCPU負荷になるので,できればCPU負荷にならないで
10msとか100msとか待たせられると嬉しいです.

459 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:03:04 ]
>>458
Windowsなら、USE IFWIN して Win32 の API の Sleep 関数でやれた気がする。
Linux は知らないが、同じようにやれると思う。


460 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 01:30:30 ]
nanosleep(2)

461 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 03:06:27 ]
>>458
ifort依存ならWin/Linux共に SLEEPQQ で
USE IFPORT
CALL SLEEPQQ(3000)
とミリ秒で指定できる。

但しあくまでも指定できるだけであって実際の休止時間をミリ秒単位の精度で
制御できるかどうかは別だが。

462 名前:458 mailto:sage [2008/10/07(火) 10:32:59 ]
>>459-461
皆さん,ありがとうございます.
461さんのやり方でできました.
それほど正確性を求めていないので,このやり方で十分です.
ありがとうございました.

463 名前:デフォルトの名無しさん [2008/10/24(金) 15:08:54 ]
おまいら、CUDAでFORTRANがサポされたらどうする?逝く?

464 名前:デフォルトの名無しさん [2008/10/24(金) 17:01:26 ]
キュダってなに?

465 名前:デフォルトの名無しさん [2008/10/24(金) 20:17:32 ]
>>464
GPGPUの開発環境 >CUDA
GPUを計算に転用して10倍以上の高速化を実現するらす
journal.mycom.co.jp/articles/2008/07/23/gpgpu/



466 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 10:45:52 ]
倍精度に対応したのか

467 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 02:36:04 ]
CUDAよりインテルのLarrabeeが来そうだな。
ベクトル長を長くする方向だから80年代のプログラミングモデルが復活するし、
Intelのコンパイラは必ずサポートするだろうし。



468 名前:467 [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
長々と申し訳ないです.お願いします

469 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:29:13 ]
>>468
長すぎて考える気にならん。
関数のパラメータも多すぎて、条件も分からん。

ある特定のパラメータで発散するのか?ルンゲ喰ったギル法だけで異常が出るのか?
どういう状況なのかも分からん。

答えようも考えようも無い。
もう少し親切心を持って聞けw


470 名前:468 [2008/11/12(水) 03:21:51 ]
>>469さん

すみません.どう書いたらよく伝わるのか分からず,書いてしまいました.
反省しております.

方程式は,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が変化した際には変数も変化させたいのです.

パラメータを変えた際には異常が現れなかったりします.

わかりにくくて申し訳ありません.よろしくお願いします

471 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 15:42:56 ]
ブックオフで培風館のFORTRAN77入門が100円だった
さすがブックオフ本の価値が分かってない

472 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 00:52:36 ]
>>471
古本屋での相場は美本で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


473 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 01:00:09 ]
>>471
教科書で使ってたりするから、古本の流通量は結構多い気がする。

474 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 02:46:31 ]
カバーの焼けはあるけどおそらく新品
改訂版じゃなくて初版の方だったので返品在庫の放出かしら

配列のとこやってるけど、配列への入力とかあってすごいね
宣言なしで唐突に出てくるループカウンタにもびっくりするが

475 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 10:19:44 ]
>>474
えぇ〜?
暗黙に型宣言されてるぜ!

最近のスクリプト言語で、これに近い形に先祖がえりしているのがワロス




476 名前:デフォルトの名無しさん [2008/11/13(木) 14:07:56 ]
implicit none しても結局は暗黙のやつに則ることは多いよね。
character,logicalは無いので c と l で始めるようにしたり。
暗黙の型宣言はあれはあれで良いものだ。

477 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 21:11:06 ]
いや、Cが複素数でZが倍精度複素数だろ

478 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 00:55:13 ]
>>476
lは1と見間違いやすいからあまり使わないが、貴重な整数型なのでもったいない。

479 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 05:22:43 ]
>>478
Lは大文字で使う

480 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 00:36:10 ]
>>479
ボーランド記法?
昔PASCALに散々いじめられたから嫌w

481 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:49:36 ]
>>477
c を複素数に振るときには character 型は s で始めるようにしてるな。
>>478
l は先頭でだけ使うようにしてる。 先頭が数字の変数ははじかれるから
混同しなくてすむ。

482 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 01:24:43 ]
東京で先週開かれたISOのFortran部会でCoArrayFortranに関する扱いで
何か進展はあったのでしょうか?

つまりCAFを排除できたのでしょうか?

483 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 16:57:56 ]
>>482
東京会議の結論がうpされたようだ。
www.nag.co.uk/sc22wg5/




484 名前:デフォルトの名無しさん [2008/12/06(土) 18:55:27 ]
The shapes of the array expressions do not conform.
って出てくるのですが、どういうことですか?

485 名前:デフォルトの名無しさん [2008/12/11(木) 16:23:19 ]
配列間違ってないか?



486 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 02:11:30 ]
C Pad for Salford FTN77
でCPU TIME を出力できるようにする方法はありますか?

487 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:02:53 ]
>>486
HIGH_RES_CLOCK@

使い方は Library Reference に載ってる。

488 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 09:11:38 ]
>>487
亀ですが
ありがとうございます。
出来ました!

489 名前:デフォルトの名無しさん [2009/01/24(土) 19:01:34 ]
関連スレが新しくなりました。

くだすれFORTRAN(超初心者用)その4
pc11.2ch.net/test/read.cgi/tech/1232789521/l50


490 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 00:23:26 ]
うちの研究室の人たちがFortranでプログラミングしているけれど
お前らgoto使いすぎ・・・
というか自分の提出したプログラムがgoto文に書き換えられている・・・

subroutine、functionを使いすぎるのはスパコン計算に向かないと言っていたけれど
勉強してきた構造化プログラミングの手法自体がfortran向きでないということなの?

491 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 02:32:22 ]
>>490
インラインされるようにしろw

コンパイラが安心してグローバル最適化できるように、付加的な情報を与えてやれ。
グローバルな構造が人間が見て分かりやすいならコンパイラも見て分かりやすい。

INTENT指定はつける。
FUNCTIONは、PURE (可能ならELEMENTAL)にする
とかすればDO..LOOP内で関数呼び出しとかしても並列化やベクトル化してくれるはず。
コンパイラによるが。

実際にベンチマークを取って、自分が勝利すれば、後は文句いわれないべw


492 名前:デフォルトの名無しさん [2009/02/12(木) 12:52:18 ]
>>491
intent属性つけると微妙に速くなるよね。
特にloop内で頻繁に呼ばれるやつだと全体で5から20%くらい違ってくる。
最近のコンパイラはF77で書いててもintentをわかってくれるから楽だ。

で・・・・pure,elementalの事はよくわからないので詳しく!

493 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 00:04:13 ]
>>492
PUREも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)



494 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 08:29:24 ]
>>493
ありがとう。pure 属性は使い易そうだ。

495 名前:494 mailto:sage [2009/02/13(金) 11:01:13 ]
loop内で頻繁に呼ばれる4個つくらいの function や subroutine に pure 属性つけただけで
並列(OpenMP)の時にちょびっと速くなった。わーい。
もともとdo-loopで一つずつ処理しているので elemental を使える状況は少ないけど、
もう少し理解してから使ってみよう。
inlineを少し深くするようになったからかコンパイル時間がすこし長くなったけどまあ気にしない。



496 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 22:12:50 ]
>>491
なるほど、ためになったわ。サンキュー。PUREを付けるだけで簡単に速くなったわ。

担当のは基本的に古い人間だから、あまりコンパイラ任せにするなとか言うんよな…。
Fortran90っぽい77形式の文も、「完成した後で直します」とか言ってそのままだったり。
implicit realもcommon文もどうにかしたいけれど、きっと文句言うんだろうな。

497 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 02:22:54 ]
>>496
PURE 属性はもともと HPF で導入されたものなので、それなりのメーカならコンパイラ
にも最適化のノウハウの蓄積があるはず?
ELEMENTAL も一変数用にサブルーチン書いて、配列を渡せばいいので、DO..LOOPを
あからさまに書かずにすむ。時々ソースがすごくすっきりして楽になることがある。

でも、ついでだから古い人間を擁護してみるかw

FORTRAN77 にも、むきだしの良さがあるw
Fortran90 以降だとソース上は簡潔になっても、影で動的にテンポラリ配列とか取るので
気持ち悪いところもある。長時間並んだJOB がStackOverflow とかで止まっていたり
すると殺してやりたくなる。古い時代の人はその辺が嫌なのかもしれないw

COMMON もグローバル変数だと思うとむかつくだろうが、 自分でガベージコレクション
しながら、変数領域を自由自在に再利用して操っていると思うと、結構気持ち良い。
メモリーが貴重だった時代には、利用価値が高かった。

IMPLICIT に関していえば IMPLICIT NONE をつけた上で、頭文字を守ればいい。
C と違ってローカルスコープの捨て変数が使えないから、頭文字を守らないと
いちいち宣言部に戻って型を確かめないといけないのでめんどい。
Fortran では数値の精度が致命的に重要で、倍精度計算中に1個単精度が混じるだけでも
すべての結果が単精度のゴミになるのだから、数値精度に無頓着の他のおしゃれ言語の
連中の言説を信じると痛い目に会わされるw



498 名前:デフォルトの名無しさん [2009/02/18(水) 13:19:26 ]
pure属性付けたサブルーチン内で
pure属性付けた他のサブルーチン呼ぶ時には
interfaceで引数部分の性質を教えて置かないといけないんだね。
f77書式で書いてるのに interface intent が
現れるのでムズムズするけどムズムズするだけなのでそのまま。

499 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 16:08:37 ]
OpenMPを試してみてるんだけど、いまいちうまくいかないんだが・・・
ifort -QParallel でコンパイル+実行するとうまくいくんだけど、
同じソースをifort -Qopenmp でコンパイル+実行すると
Program Exception - stack overflow
っていうエラーが出る
ソース中にOpenMP構文は use omp_lib だけ
これってどうしたらいいのかな?

500 名前:499 mailto:sage [2009/02/26(木) 16:22:10 ]
おk事故解決
-auto_scalar オプションでいけた

501 名前:デフォルトの名無しさん [2009/02/26(木) 16:49:38 ]
>>500
だたの
-auto

-static
でうまく行くこともあるよ。あとは実行時の環境変数の
setenv KMP_STACKSIZE 16M
とかデフォより大きめに取ると幸せなことが多い気がする。

502 名前:デフォルトの名無しさん [2009/02/26(木) 16:50:50 ]
>>500
ていうか、
-auto_scalar
ってデフォルトになってない?

503 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 17:23:54 ]
-openmpだとデフォで動的(-auto)になるんだっけか
>>499は単にスタック不足なだけでは?

ところで、KMP_STACKSIZEってunlimitedに設定できないの?

504 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 17:58:56 ]
動的っていってもヒープとスタックがあるよね。
Fotranの場合ってどういう風に割り当てられるんだろう・・・そういやあまり意識したことなかった。

505 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 02:43:33 ]
>>504
元々はAUTOMATIC変数の類はスタックに、ALLOCATE命令のときはヒープだった気がする。

ただ歴史的経緯のせいでサブルーチン側で巨大な配列をとっているプログラムが多くて
それがSTACKOVERFLOWを引き起こすから、IntelFortranなんかはデフォールトでは
スカラー変数はスタックで、配列の類はヒープで確保するようになった気がする。

インテルの掲示板に、デフォールト・オプション切り替えの話が出ていた旗もするのだが
昔のことなので記憶がはっきりしない。

OpenMPを指定すると、オプションが切り替わってしまう話はこのスレに出ている。
software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/59627/


FortranはFORTRAN66時代がSTATICに変数をとっていた関係で、
FORTRAN77で規格の上ではサブルーチン類の変数はAUTOMATICでありうるように
なったにもかかわらず、互換性の観点からデフォールトでSTATICに変数を
とっていることが多くて、それはFortran90でもしばらく続いていたという歴史的経緯がある。




506 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 11:54:19 ]
>>505
そのスレの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(つまりローカルスカラ変数だけじゃなく、ローカル配列変数も含む)の間違いじゃないかな?


勘違いしてたらすいません

507 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 13:12:01 ]
>>506
そうなんじゃないかな?
配列までスタックにとるからoverflowしていると考えるとつじつまが合う?


508 名前:506 mailto:sage [2009/02/27(金) 13:52:41 ]
>>507
そうだよね。SteveさんIntelのスタッフなんだし書き間違わないでくれよぉ・・・

OpenMPの場合にデフォルトで全てのローカル変数(スカラも配列も)がスタックになるのは
スレッドセーフのためってあるけど、逆に言えばそれらをstaticに扱ったらスレッドセーフに
ならないってことだよね。それってやっちゃまずいことなんだろうか?

OpenMPまともに使った経験がないもんで・・・識者の方コメントおながいします

509 名前:デフォルトの名無しさん [2009/02/27(金) 14:48:49 ]
-openmp
つけてコンパイルすると、仮にautomaticは嫌いだっと
-noauto
つけても消されるはず。なのでopenMPを読んだ状態だと
有無をいわさずにぜんぶautomaticになる・・・と理解しているけど。
shared属性をつけてかつcommonブロックに貼り付けるとかして
やや無理なことをしないとstatic領域には配置されないと思ふ。
-staticはその名のイメージとは違って共有ライブラリを使わない
(というか実行ファイルに埋め込んじゃう)オプションだし。

spec.orgにあるOMP2001の情報のところに試した人たちが
実際に使ったオプションが載ってるので、自分のところのシステムに
近い(or 同じ)マシンがあったらそれと同じモノをだいたい使っているけど、
まあ大間違いではないと思う。お薦めできるのかは分らないけど・・・。

510 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 15:30:30 ]
え、OpenMPだとサブルーチン内ではstatic配置ってできないわけ?
数値計算では馬鹿でかい配列は可能な限りstaticにするのが基本じゃない?
サブルーチン渡る度に配列をコピーとかやってられんでしょ?

その代わりメモリのアロケーションはコーディングする側がきちんと考えてあげないといけないけど。
この辺がリソースをある意味富豪的に使うことが前提とされるJavaやC#などのオブジェクト系言語との違いだね。

511 名前:デフォルトの名無しさん [2009/02/27(金) 16:56:15 ]
510はちょっと尋ね方が変だな。
副プログラムが並列のloop内にあるのか、
副プログラム内で並列のloopがあるのかで答は変わる。

512 名前:510 mailto:sage [2009/02/27(金) 19:38:52 ]
的外れな質問してたのかな、ごめん・・・。
>>511の両方のケースとも知りたいので、よかったら教えてほしい。
流体とかの数値計算では行列の反復法とかはサブルーチン内でやるけど、
そういうケースでメモリのアロケーションはどうすべきなのか、という視点で興味があります。

513 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 00:58:18 ]
>>512
引数に載ってれば、Fortranは参照呼出しなんだから配列のコピーが生じるはずもない。
CやPASCALとは違う。(まぁ最近はVALUE属性も出来るようになったが)

ここでは副プログラム内で新たに割り付けられる配列の話だろう。
それが動的に取られるとして、スタックに取られるか、ヒープに取られるかの違い。



514 名前:510 mailto:sage [2009/02/28(土) 01:28:49 ]
>>513
>副プログラム内で新たに割り付けられる配列
あ、そういう話か・・・ありがとう。

自分は一時作業用の配列も全部メイン側で用意してやって引数渡ししてるんだけど、
そういうのはサブルーチン内でスタックやヒープで取ってやる方がいいのかな?
皆さんどうしてますか?

515 名前:デフォルトの名無しさん [2009/03/03(火) 06:16:03 ]
allocatableを副プログラム内で作ってそれ(先頭アドレスやらサイズその他)を
メイン階層や他の副プログラムに行き渡らせるのが割りと
面倒臭いのでメイン階層でやってる。
メイン階層が長くなるのは正直あまり好みではない、けど
まあ好みの問題なだけなので気にしないようにしている。

allocatable使うと場合によってはプログラム内で明示するサイズより大きいメモリを扱えたり
(コンパイラはハンドルできるメモリサイズ < OSがハンドル出来るメモリサイズ、なので)、
格子数(データ数)の違う処理を同じ実行イメージで出来る(コンパイルしなおさなくて良い)のが
いいけど、最近ではサイズをプログラム内で固定変数で明示していちいちコンパイルしている。
その方がミスは少ない気がする。気のせいかもしれないけど。



516 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 12:11:34 ]
何がスタックやヒープに割り当てられるのか分からんかったのでググった。
ブログだけどw

ttp://monologuemidnight.blogspot.com/2009/01/blog-post_03.html

module中の大域的な変数、save属性付きの変数→.bss
allocatable属性な配列→ヒープ
普通にサイズが宣言されている自動配列→スタック
手続き中の変数(mainでも同様)→スタック

ってことらしいが…。
この辺は規格ではないっぽいので、コンパイラの仕様をちゃんと確認したほうがいいな。

517 名前:デフォルトの名無しさん [2009/03/11(水) 18:46:48 ]
ifortで複数の数字を出力すると勝手に改行されるんだけど、改行を抑制するオプションってある?
gforntranでは改行されないんだけど。
real(8) a(5)
write(*,*) a(:)
とするとa(3)とa(4)の間で改行されちゃう。

518 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 04:57:59 ]
>>517
気持ち悪いけど、下記のようにしてもだめかな?
クラシックな書き方だけど。

  write(*, '(100f10.5)') a(:)


519 名前:デフォルトの名無しさん [2009/03/12(木) 09:37:42 ]
>518
ありがとん。
write(*,'(100f)') a(:)
でいけた。

520 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 01:01:35 ]
改行抑制なら、write文ならadvance='no'を付ければできるはず
出力するものが決まってるなら、改行してしまう書式の箇所に\(バックスラッシュ)を入れてもいい

521 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 11:34:42 ]
>520
advanceはフォーマット文がいるから、結局519と同じでは?

522 名前:デフォルトの名無しさん mailto:sage [2009/03/17(火) 03:12:33 ]
>>521
'(100f)' なんて書くよりはスマートな気がするけど?
ま、どうでもいいことだな

523 名前:デフォルトの名無しさん [2009/03/18(水) 04:24:12 ]
do i = 1, 5
  write(*, '(f10.5,$)') a(i)
enddo
write(*,*) ''

はダメかな?
改行するなよ、の$は非標準だけどDEC以来ほぼ標準と思っていいのではないだろうか

524 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 21:51:40 ]
ちょっとテストしてみた@Intel Fortran 10.1

integer::i
integer,parameter::imax=5
real(8)::f(imax)
do i=1,imax ; f(i)=i ; enddo

print *, "print *,f"
print *, f
print *, '---'

print *, "write(*,'(f)') f"
write(*, '(f)') f
print *, '---'

print *, "write(*,'(f)') (f(i),i=1,imax)"
write(*, '(f)') (f(i),i=1,imax)
print *, '---'

print *, "write(*,'(f\)') f"
write(*, '(f\)') f
print *, '---'

print *, "write(*,'(f)',advance='no') f"
write(*, '(f)',advance='no') f
print *, '---'

print *, "write(*,'(f)',advance='no') (f(i),i=1,imax)"
write(*, '(f)',advance='no') (f(i),i=1,imax)
print *, '---'

end

525 名前:>>524の結果 mailto:sage [2009/03/18(水) 21:52:34 ]
print *,f
1.00000000000000 2.00000000000000 3.00000000000000
4.00000000000000 5.00000000000000
---
write(*,'(f)') f
1.0000000000000000
2.0000000000000000
3.0000000000000000
4.0000000000000000
5.0000000000000000
---
write(*,'(f)') (f(i),i=1,imax)
1.0000000000000000
2.0000000000000000
3.0000000000000000
4.0000000000000000
5.0000000000000000
---
write(*,'(f\)') f
1.0000000000000000 2.0000000000000000 3.0000000000000000 4.0000000000000000 5.0000000000000000 ---
write(*,'(f)',advance='no') f
1.0000000000000000
2.0000000000000000
3.0000000000000000
4.0000000000000000
5.0000000000000000 ---
write(*,'(f)',advance='no') (f(i),i=1,imax)
1.0000000000000000
2.0000000000000000
3.0000000000000000
4.0000000000000000
5.0000000000000000 ---



526 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:07:03 ]
ごめん。
print文かwrite文か、また出力並びをfとするか(f(i),i=1,imax)とするかで、
出力結果が違うのかと思ってやってみたが、違いはないっぽい。
というわけで、>>524をもっとすっきりさせた。

integer::i
real(8)::f(3)
do i=1,3 ; f(i)=i ; enddo

print *, "write(*,*) f"
write(*,*) f
print *, '---'

print *, "write(*,'(f)') f"
write(*,'(f)') f
print *, '---'

print *, "write(*,'(f\)') f"
write(*,'(f\)') f
print *, '---'

print *, "write(*,'(f)',advance='no') f"
write(*,'(f)',advance='no') f
print *, '---'

end

527 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:19:08 ]
↑の結果

write(*,*) f
1.00000000000000 2.00000000000000 3.00000000000000
4.00000000000000 5.00000000000000
---
write(*,'(f)') f
1.0000000000000000
2.0000000000000000
3.0000000000000000
4.0000000000000000
5.0000000000000000
---
write(*,'(f\)') f
1.0000000000000000 2.0000000000000000 3.0000000000000000 4.0000000000000000 5.0000000000000000 ---
write(*,'(f)',advance='no') f
1.0000000000000000
2.0000000000000000
3.0000000000000000
4.0000000000000000
5.0000000000000000 ---


結論
@書式省略すると、適当な位置で改行してくれる(規格で決まってるんかな?)
A書式指定すると、書式の中身が終わる度に改行
B書式に\を付けると改行抑制
C書式にadvance='no'(デフォルトはyes)を付けるとwrite文が終了したときに行う改行を抑制(Aとの違いに注意)

って感じかな。
改行抑制の\と改行指定の/が混ざるとどんな出力になるんだろう。

528 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:20:24 ]
ごめん、>>526
real(8)::f(3)
do i=1,3 ; f(i)=i ; enddo

は↓に修正。

real(8)::f(5)
do i=1,5 ; f(i)=i ; enddo

529 名前:デフォルトの名無しさん [2009/03/22(日) 01:30:43 ]
>@書式省略すると、適当な位置で改行してくれる(規格で決まってるんかな?)
コマンドプロンプトの右端で改行だと思う
違うかなー

530 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 10:23:20 ]
>>529
他のコンパイラでは改行しないので、コンパイラのせいだと思います。
>>524-528
ありがとうございます。
参考になりました。
write(*,'(f\)') f
が良さそうですね。

531 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 15:14:13 ]
>>529
Fortranに限らず、プロンプトのサイズは関係ないよ






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<180KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef