1 名前:デフォルトの名無しさん [2009/01/24(土) 18:32:01 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 FORTRAN使いが優しくコメントを返しますが、 お礼はFORTRANの布教と初心者の救済と次期Fortran2008規格でのCOMEFROM文採用をお願いします。 ●注意事項 ・質問する前にGoogle等の検索サイトで検索しましょう。 ・回答者にわかりやすい様に、質問内容はできる限り詳しく書きましょう。 ・エラーの場合は起きた状況、環境(OS・コンパイラ・バージョン)、エラーメッセージも詳しく書きましょう。 ●前スレ くだすれFORTRAN(超初心者用)その3 pc11.2ch.net/test/read.cgi/tech/1196384126/ くだすれFORTRAN(超初心者用)その2 pc11.2ch.net/test/read.cgi/tech/1164121236/ くだすれFORTRAN(超初心者用) pc8.2ch.net/test/read.cgi/tech/1138063703/ ●関連スレ FORTRAN W pc11.2ch.net/test/read.cgi/tech/1163319215/
488 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:00:29 ] >>486 内接正六角形で円周を近似すれば3となる。 根拠なしに妙な数を覚えさせるよりましとも考えられる。 逆に、根拠無くともマジックナンバーを覚えさせるのが重要だという考えもある。 近年の教育界の風潮では、素朴な情緒的な根拠付けを求めて、 それ以外(とりあえず覚えとけ的なものや複雑で論理的なもの)を拒否するので 正六角形で円周を近似させる方向に行くのもさもありなんと思える。 3.14で切れてると思っている輩も居るし、有理数だと思っている輩も居る。 素朴なモンテカルロ法でやっても中々小数点以下二桁までは出ない。 理系でも超越数であることを知らないものは多い。 古代エジプトでは円の面積は直径の(1-1/9)=8/9の自乗とされたが、これだと3.16だったか。 電卓で確認してくれw これはエジプト分数(分子は1)的にはかなりいい値。
489 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:15:30 ] 実用レベルでは有効数字3桁あればおkって場合が多いから、 3.14と思い込ませるのも悪くないかと思うけど。 数学的素養のない一般人にはそれで十分でしょ。 「円周率?3だろ(キリッ」って言われるよかよっぽど良い。
490 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:25:01 ] 背後にあるものを隠蔽して気がつかせないようにする教育は理由があっても気に入らないな こういう隠蔽が積み重なってあとで取り返しがつかなくなるんだよ 1度でいいからいろいろな性質があることを説明して、ポカーンとしてるところで 「でも今は君たちにはわからんだろうからおよそ3で覚えてください」 とはっきり言ってくれればおk
491 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:34:32 ] >>488 > 理系でも超越数であることを知らないものは多い。 事実として知っては居るが、証明できない。どのような知識が要るんだろう。
492 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 16:08:23 ] 超越数って名前だけは知ってるが(あとπとeがそうらしいということも)、 具体的には代数的数ではない、んだっけ、ってことしか知らないな。
493 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 16:28:45 ] 超越数って、たしか係数が全て有理数な多項式の解ではないものを言うんだっけ
494 名前:デフォルトの名無しさん [2009/08/06(木) 05:28:00 ] forrtl: severe (67): input statement requires too much data, unit 50 このエラーを解決するには???
495 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 06:25:47 ] >>494 それだけで解決方法が分かったら素晴らしいエスパーだな。
496 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 10:11:35 ] >>494 英語を日本語に翻訳してほしいんですか? forttl: 深刻 (67): INPUT文が要求するデータ量が多すぎます。 ユニット 50
497 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 10:56:06 ] >>496 その発想は無かった。他に翻訳してくれそうなところ無いかな? Excite forrtl: 厳しい(67): 入力文はあまりに多くのデータ、ユニット50を必要とします。 Yahoo! forrtl:厳しい(67):入力声明は、あまりにたくさんのデータ(単位50)を必要とします Google forrtl :重度( 67 ) :入力文、大量のデータが、 50単位が必要
498 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:36:05 ] >>494 READ(50,*) のように書いてあるところの変数の数を疑え
499 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:07:21 ] >>494 入力データの数が足りない。
500 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 00:21:42 ] fortran90のallocateに関してですが、メモリ2GBの環境で、 allocatbleの配列A:0.3GB程度、配列B:1.8GB程度、配列C:0.3GB程度を使用するとします。 1)まず、配列Aをallocateし、使用後にdeallocate、 2)次に、配列Bをallocate、使用後に同様にdeallocateを行い 3)最後に、配列Cをallocateし、最終処理を行う。 上記一連の作業であれば、2GBの環境で動作すると考えたのですが、 ○実行すると最後の配列Cのallocateでメモリオーバーで落ちてしまいます。 ○試しに、EM64Tの環境(メモリ8GB)で実行し、topコマンドでチェックしたところ、 確かに最後の配列Cのallocate部分でメモリ使用量が2.1GB程度となっていることが分かりました。 つまり、配列Bのdeallocateを行っても、この部分のメモリが解放されていないということだと思いますが、 配列Bのallocate自体はできているので、配列Aのdeallocateによるメモリ解放はできているということになると思います。 allocatbleの配列でメモリが解放される場合と、されない場合というのはどのような条件で決まるのでしょうか。 (使用コンパイラーはIntel fortran Version 9.1)
501 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 01:06:54 ] 質問させてください。 silverfrost FTN95 compilerとcpad for FTN77でコンパイルしようとしているのですが、 うまくいきません。以下のエラーメッセージがでます。 コンパイルに失敗しました ファイル"D:\My Documents\FORTRAN\sample.exe"は存在しません。 メッセージ *** Invalid executable file suffix - only .EXE is permitted どこに原因があるか教えていただけないでしょうか。 まだコンパイルすらしたこと無いド初心者ですが、よろしくおねがいします。
502 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 01:52:53 ] >>501 CPad for FTN77 は名前の通りFTN77用なので、そのままではFTN95では使えない。 どうしてもCPadを使いたければコマンドラインの並びを変えるバッチファイルを間に噛ますか FTN77をDLしてきて使えば良い。 他のIDEでよければFTN95 Personal Edition に付属のPlatoを使うか(但し日本語未対応) Visual Studioが付いてきてフリーなFTN95 Expressを使えば良い。
503 名前:501 mailto:sage [2009/08/08(土) 03:22:49 ] >>502 ありがとうございます。 salfordからFTN77をダウンロードできなくなっているようなのでFTN95が使えれば…と思っていたのですが やはりそこに無理があったようですね。platoを使うことにします。 連続で申し訳ないのですが、質問させてください。 platoで無事コンパイルはできるようになったのですが、コンパイル後にstart(緑の三角)ボタンを押しても "Press RETURN to close window . . ."と表示されたコマンドプロンプトが開くだけでプログラムが走りません。 exeファイルは生成されているのでそちらから直接起動することはできるのですが、plato上で実行する方法は無いでしょうか。 また、起動したプログラムウインドウが一瞬で勝手に閉じてしまうのですが、表示させたままにしておくことはできますか。
504 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 04:21:07 ] >>503 FTN とかいうのを使ったことが無いので、少し調べてみました。で、分かった範囲のことを元に書きますので 結果は保証できません。 ●先ず、どのようなプログラムを書いているか。 例えば例題でよくある2つの整数を入力すると、その和、差、積、商を表示するプログラムだとします。ボタ ンを押してプログラムを実行すると、入力待ちになる筈です。で、2つの整数を入力すると次の処理に移って 計算をし、結果を表示して、プログラムを終了します。その時点で【プログラムとしてやりたいことが全て終 了して、やることが無くなった】ので、窓を閉じてしまう(とエスパー)。 ●じゃぁどうしよっか。 計算結果を表示後に、更に何かを実行させる。例えば 続けて計算しますか?(Y/N) みたいなので、次の動作を入れる。これだと入力待ちになる(ちゃんと書けばね)ので、窓は出たまま。用が 済んだら N を入力して閉じれば良いし、また別の数でやりたかったら Y を入力すれば良い。C の do while 相 当の処理が FORTRAN に有るのかは知らないけど、goto か無限ループで実現できると思う。 というのは駄目ですか?
505 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 11:07:49 ] お助けお願いします。 「y=x**3-5*(x**2)-2*x+24 のグラフを23行80桁の画面上に描画するプログラムを作成せよ。ただし、次の条件を守れ。 1)描画範囲のx (例 -1 から +6まで)をキーボードから入力し、 その範囲を画面全体に描画せよ 2)描画範囲のグラフが画面に収まるよう、 y軸の描画範囲を自動的に調整せよ。」 という課題をやっているのですが、完全に行き詰りました。 以下にとりあえずやってみたプログラムを 張って行きますので、 皆さんのお力で完成させていただけないでしょうか? グラフの詳細は↓ ttp://skm.vip2ch.com/-/hirame/hirame051462.jpg に、はっておきました。 何卒、よろしくお願いします。
506 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 11:08:54 ] print *,"最小値は?" read *,readminx print *,"最大値は?" read *,readmaxx ! real function rtransx(i,readminx,readmaxx) real,parameter::readminx,readmaxx real,parameter::crtminx=1.0,crtmaxx=23 integer::i rtransx=((readmaxx-readminx)/(crtmaxx-crtminx))*(i-crtminx)+readminx return end function rtransx real function func(x) real::x func=x**3-5*(x**2)-2*x+24 return end function func integer function transy(y) real,parameter::miny,maxy real,parameter::crtminy=1.0,crtmaxy=80 real::y transy=(crtmaxy-crtminy)/(maxy-miny)*(y-miny)+crtminy return end function transy
507 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 11:10:07 ] program integer::i,iy character*80::line real::x,y do i=1,23 line(1:80)=' ' x=rtransx(i,readminx,readmaxx) y=func(x) iy=transy(y) line(iy:iy)='*' print'(a80)',line end do end program
508 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 13:37:15 ] >>503 > コンパイル後にstart(緑の三角)ボタンを押しても > "Press RETURN to close window . . ."と表示されたコマンドプロンプトが開くだけでプログラムが走りません。 それでプログラムは走っている。 Plato上でプログラムを走らせると「Plato IDE」というタイトルのウインドウが開いて そこで画面/キーボードからの入出力を行う。 「Press RETURN to close window . . .」はプログラムが終了すると表示される。 もしそれが望み通りの結果でないのなら、それはあなたのプログラムが間違っているのだ。 > また、起動したプログラムウインドウが一瞬で勝手に閉じてしまうのですが、 エクスプローラ上で実行ファイルをダブルクリックするとそうなる。 コマンドプロンプトから実行すればよい。
509 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 12:40:55 ] fortran最高! 今日で人生が変わった!
510 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 14:34:43 ] >>509 地獄に片足つっこんだん?
511 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 15:14:56 ] >>509 また犠牲者が一人・・・(´;ω;`)
512 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 19:25:07 ] あの、>>505 です・・・ どなたか、アドバイスください。 fortran90を使っています。
513 名前:501 mailto:sage [2009/08/11(火) 01:11:27 ] >>504 ,508 レスありがとうございます! アドバイスを参考にいろいろと試してみたいと思います。 まずはプログラムの書き方の基本から身につけないといけませんね。
514 名前:デフォルトの名無しさん [2009/08/11(火) 03:37:27 ] Fortranでどうにもならん部分だけCで書いてリンクすればいいしな。 Fortranでやりにくい(出来ないわけではないけどシステム依存が強すぎるからいやだ)部分って Argumentをコマンドラインから取り込むとか、バイナリファイルの読み込みくらいだけど。 ・・・ってf77の話だな。F90や95だとどうなってるんだろう?
515 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 14:27:51 ] >>514 > Argumentをコマンドラインから取り込むとか、バイナリファイルの読み込みくらいだけど。 どっちも普通にできたと思うけど、環境依存大きいの?バイナリファイルの読み書きに関しては C と Fortran では 違いがあるので、成る可く Fortran で済ませてしまった方が良いと思うが…。 ただ市販の Fortran の本でこの辺を説明しているものは見た事が無い。あと倍精度実数も。科学技術計算云々とい う割にその辺手抜きなのが解せん。そ〜いやプリプロセッサの話も書いてないな。洋書は知らんけど。
516 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 22:12:23 ] >>514 STREAM I/O や コマンドライン引数の扱いはFortran2003で規格に入って統一された。 まぁそれ以前もベンダー依存の機能で実現できたが。 >>515 浮動小数点も世界がIEEE754で天下統一されて、かつその機能をFortran2003規格で Fortran内部からアクセス出来るようになっている。
517 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 02:10:53 ] >>512 いきなり画面に書かずに、まず画面に対応する文字配列に書くといいと思う。 そうすると、座標軸とかキャプションのたぐいも別々に処理できる。 最後に配列を一括で出力する。 昔のマイコンのキャラクター用ビデオRAMの感じ?って言ってもわかんないかなw お盆までまってくれ。
518 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 12:11:00 ] >>517 > お盆までまってくれ。 アンタ優しいな。
519 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 14:14:45 ] このスレには相当のベテランがいるんだろうな せっかくだから、本とか出版してみたらどうだ? 10万までなら出すw
520 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 14:22:30 ] >>516 これって、浮動小数点のビット配列とか丸め誤差が、 以前は処理系依存だったってこと? >>515 処理系依存のものは本じゃなくて、 コンパイラのマニュアルを見るしかないんだろうね。
521 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 15:09:35 ] >>520 >これって、浮動小数点のビット配列とか丸め誤差が、 >以前は処理系依存だったってこと? 処理系依存というか、CPUアーキテクチャに依存していたでしょ。 太古のIBM S/360の浮動小数点とか、CDC 7600の浮動小数点とか。
522 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 18:06:31 ] >>521 そうなんですか。勉強になります。 ちょいとググってみたら、 S/360、CDC7600は60年代のメインフレームですね。 (初めてコンピュータ・アーキテクチャの概念が使われたとか、 初めてこれまでモニタと呼ばれていたOSが、 360からOSと呼ばれるようになったとか書いてある) IEEE754が1985年だから、S/360からおよそ20年後で、 それからさらに20年ぐらいたって、Fortran2003に導入されたということですか。 それはそうと、 処理系がCPUアーキテクチャに特化してるんだから、 処理系依存という言い方はまずいんでしょうか?
523 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 19:16:53 ] >>522 10年前くらいまでは、浮動小数点はベンダー固有のものだった。 IBM、CRAY、DEC、NECとかはそれぞれに固有のフォーマットを持っていた。 IEEEフォーマットが支配的になったのは90年代後半くらいでは無いかな? SX−3か4あたりは、IEEE(Big,Little Endian)、IBM、CRAYの4つのフォーマットに対応していた記憶がある。 数値コプロがCPUに標準装備される前のパソコンの浮動小数演算はソフトウェア毎に 実装が異なっていて、しかも精度はメチャクチャというのが普通。 Fortran90に精度に関する関数が多いのは、IEEEが普及する前だったため。
524 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 03:06:38 ] >>512 最小値は? -1 最大値は? 6 | * | | * | * | | * | | * | * | * | ************** * *** | *** * | *** * | *** * | *** * | ** * | *** ** | ** * | *** ** | *** ** | **** **** -----------|----------------------------------**********------------------------ 続行するには何かキーを押してください . . . >>524 セルフアンカー
525 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 03:12:00 ] >>505 寝る前に全く考えずに作ったし、バグ取りしてないw 参考程度に 正直、自分で満足できないww でも休みに遊びに行くことになったので。 間違ってたら、ごめんw でも賠償はしない。 MODULE m_screen IMPLICIT NONE ! INTEGER, PARAMETER :: nx = 80, ny= 23 CHARACTER(LEN = 1) :: screen(nx, ny) = ' ' REAL :: valx(nx), valy(nx) ! CONTAINS !----------------------------------- SUBROUTINE calc_range(xmin, xmax, fun) REAL, INTENT(IN) :: xmin, xmax INTERFACE REAL FUNCTION fun(x) REAL, INTENT(IN) :: x END FUNCTION fun END INTERFACE INTEGER :: i DO i = 1, nx valx(i) = (xmax - xmin) * (i - 1) / (nx - 1) + xmin valy(i) = fun( valx(i) ) END DO RETURN END SUBROUTINE calc_range
526 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 03:12:52 ] !----------------------------------- INTEGER FUNCTION iposy(i) INTEGER, INTENT(IN) :: i iposy = NINT( ( valy(i) - MINVAL(valy) ) / ( MAXVAL(valy) - MINVAL(valy) ) * (ny - 1) ) + 1 RETURN END FUNCTION iposy !----------------------------------- SUBROUTINE plot_screen() INTEGER :: ix, iy DO ix = 1, nx iy = iposy(ix) screen(ix, iy) = '*' END DO RETURN END SUBROUTINE plot_screen !----------------------------------- SUBROUTINE print_screen() INTEGER :: iy DO iy = ny, 1, -1 PRINT '(80A1)', screen(:, iy) END DO RETURN END SUBROUTINE print_screen !-----------------------------------
527 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 03:13:44 ] SUBROUTINE plot_xaxis() ! INTEGER :: ix, iy, k(1) IF ( MINVAL(valy) * MAXVAL(valy) < 0 ) THEN ! cross x-axis k = MINLOC(valy) iy = iposy(k(1)) DO ix = 1, nx screen(ix, iy) = '-' END DO END IF RETURN END SUBROUTINE plot_xaxis !----------------------------------- SUBROUTINE plot_yaxis() ! INTEGER :: ix(1), iy IF ( MINVAL(valx) * MAXVAL(valx) < 0 ) THEN ! cross y-axis ix = MINLOC(ABS(valx)) DO iy = 1, ny screen(ix(1), iy) = '|' END DO END IF RETURN END SUBROUTINE plot_yaxis !----------------------------------- END MODULE m_screen
528 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 03:14:27 ] !===================================== PROGRAM graph USE m_screen IMPLICIT NONE REAL :: read_minx, read_maxx ! PRINT *, "最小値は?" READ *, read_minx PRINT *, "最大値は?" READ *, read_maxx ! CALL calc_range(read_minx, read_maxx, func) CALL plot_xaxis() CALL plot_yaxis() CALL plot_screen() CALL print_screen() STOP CONTAINS !------------------------------------- REAL FUNCTION func(x) REAL, INTENT(IN) :: x func = x**3 - 5 * x**2 - 2 * x + 24 RETURN END FUNCTION func !------------------------------------- END PROGRAM graph うざくて、ごめんw
529 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 03:38:49 ] ごめw バグってるw X軸がちゃんと書かれない。 SUBROUTINE plot_xaxis() INTEGER :: ix, iy, k(1) IF ( MINVAL(valy) * MAXVAL(valy) < 0 ) THEN ! cross x-axis k = MINLOC(ABS(valy)) 〜〜〜〜〜〜 ABS( ) が抜けてた。入れといて。 連続投稿規制でかけない 汚しすまそ
530 名前:505,512 mailto:sage [2009/08/13(木) 10:55:12 ] >>524 〜>>529 さん ありがとうございました! 凄いです・・・ このスレは猛者の集まりですw 実行してみたところ、完璧に動きました。 まだまだ、私が知らない構文がいっぱいあるんですね! これを元に、またちょっと勉強してみたいと思います。 本当に、ありがとうございました。
531 名前:デフォルトの名無しさん [2009/08/17(月) 05:06:52 ] まったく関係ないが・・・ gfortranをVistaにいれてみた。 gfortran関連のpathを一番前に持ってこないと、実行ファイル作成リンクで落ちた。 ん〜、なんだか。まあ自宅PCであそぶには十分か。OpenMPできるし。
532 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 20:18:12 ] Fortran の話ではないけど、PATH が異様に長いときに PATH の末尾に追加すると上手く動かない という話は聞いたことがある。Windows は色々とメンドクサイよね。もう使ってないから知らな いけど。
533 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 02:41:35 ] autoexe.bat なくしたのは失敗な気もするなあ。 せめてpath管理だけはテキストファイルで「も」出来る仕様を残しておいてほしかった。 Ghostscript、Latex入れると自然とパスが長くなるし。 Fortranの話でないけど・・・
534 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 22:55:32 ] まあ、バッチファイルとかsetxとか使えばそれなりに管理できる > PATH
535 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 00:01:45 ] でも若い人はそういうことを何処で学ぶんだろう。Windows 嫌いで使わない私には ほぼどうでも良いことだが。
536 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 03:38:47 ] >>534 そうそう。自分はgfortran用とlatex用の2つバッチ作ってる。Me以降はpathの管理が面倒だしね。 ・・・・・なんだかwin3.1かDOS5.0の頃に戻ったようだw setx.exe は使いかたがよくかわんないから使ってないけど、便利? >>535 Win嫌いな人だとかえってPath関連は熱心になるんじゃないかなぁ? どうだろう。
537 名前:536 mailto:sage [2009/08/20(木) 03:42:55 ] gfortran -Wall foo.for で文句を言ってこなくなるまでソースを訂正すると、 他のシステムでもちょびっと速くなる気がする。気がするだけかもしれないけど。 gfortranって中で何やってるのかいまいちよくわからん。
538 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 11:06:25 ] >>537 -Wall の意味を考えると、気のせいだと思う。でも最低限 -Wall は付けている。
539 名前:デフォルトの名無しさん [2009/08/21(金) 13:39:17 ] vineにintel fortran Compilerとmkl10.2.1インストールして、 ユーザーズガイド通りに環境変数を設定。 でlapac95をビルドした後サンプルのコードをコンパイルしようとするとエラーでます。 ifort gesv.f90 -L -I-lmkl_lapack95 -lmkl_intel -lmkl_thread -lmkl_core -lguid -lpthread gesv.f90(31): error #7002: Error in opening the compiled module file. Check INCLUDE paths. [MKL95_PRECISION] USE MKL95_PRECISION, ONLY: WP => SP ----------^ gesv.f90(32): error #7002: Error in opening the compiled module file. Check INCLUDE paths. [MKL95_LAPACK] USE MKL95_LAPACK, ONLY: GESV ----------^ gesv.f90(39): error #6683: A kind type parameter must be a compile-time constant. [WP] REAL(WP), ALLOCATABLE :: A(:,:), AA(:,:), B(:,:), BB(:,:) -----------^ gesv.f90(64): error #6406: Conflicting attributes or multiple declaration of name. [GESV] CALL GESV( A, B ) -----------^ gesv.f90(71): error #6406: Conflicting attributes or multiple declaration of name. [GESV] CALL GESV( AA, BB(:,1), IPIV, INFO ) -----------^ gesv.f90(31): error #6581: Unresolved rename. [WP] USE MKL95_PRECISION, ONLY: WP => SP ---------------------------------^ gesv.f90(32): error #6580: Name in only-list does not exist. [GESV] USE MKL95_LAPACK, ONLY: GESV ------------------------------^ compilation aborted for gesv.f90 (code 1) 何がいけないんでしょうか?よろしくお願いします。
540 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 14:23:24 ] >>539 >Error in opening the compiled module file. Check INCLUDE paths. [MKL95_PRECISION]
541 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 14:26:04 ] >>539 > vineにintel fortran Compilerとmkl10.2.1インストールして、 > ユーザーズガイド通りに環境変数を設定。 > > でlapac95をビルドした後サンプルのコードをコンパイルしようとするとエラーでます。 lapack95 は自前でビルド? > ifort gesv.f90 -L -I-lmkl_lapack95 -lmkl_intel -lmkl_thread -lmkl_core -lguid -lpthread gfortran しか使わんので、この辺は知らん。 > -----------^ > gesv.f90(64): error #6406: Conflicting attributes or multiple declaration of name. [GESV] > CALL GESV( A, B ) > -----------^ > gesv.f90(71): error #6406: Conflicting attributes or multiple declaration of name. [GESV] > CALL GESV( AA, BB(:,1), IPIV, INFO ) > -----------^ これは明らかに可笑しくないか?そんな名前のサブルーチンは lapck にあるかどうか知らんが。 ウチに入れた lapack だと少なくとも man では引っ掛からなかった。
542 名前:デフォルトの名無しさん [2009/08/21(金) 14:28:36 ] >>540 /opt/intel/mkl/10.2.1.017/include/にINCLUDE path通してます。 コンパイル時に必要なファイルは.modのファイルですか? /opt/intel/mkl/10.2.1.017/include/32の中に lapack95関係の.modのファイルが入ってるんですがそっちにパス通してもうまくいきませんorz
543 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 14:30:33 ] >>542 どうやって PATH を通してるの?
544 名前:デフォルトの名無しさん [2009/08/21(金) 14:37:34 ] >>541 lapack95のビルドもユーザーズガイドにあった通りにしたんで、たぶんできてるはずです。 自前というのはどういう意味ですか? opt/intel/mkl/10.2.1.017/examples/lapack95/source/内のサンプルコードなんでサブルーチンはあるはず?
545 名前:デフォルトの名無しさん [2009/08/21(金) 14:42:34 ] export MKLROOT="/opt/intel/mkl/10.2.1.017" if [ -z "${INCLUDE}" ] then export INCLUDE="${MKLROOT}/include" else export INCLUDE="${MKLROOT}/include:$INCLUDE" fi ・ ・ ・ /opt/intel/mkl/10.2.1.017/tools/environment/mklvars32.shを実行すれば、 環境変数設定されるみたいにユーザーズガイドに書いてあったんですけど、 実行しても設定されないようなので上の文を.bash_profileにつけたしました。
546 名前:541 mailto:sage [2009/08/21(金) 14:48:44 ] >>544 > >>541 > lapack95のビルドもユーザーズガイドにあった通りにしたんで、たぶんできてるはずです。 > 自前というのはどういう意味ですか? 公式サイトからソースを拾って来て、自分で make すること。私はそれで lapack を入れてる。 特に何もしなければ lapack.a、blas.a というファイルが出来る。で、これをリンクすると。 lapack95 はやったことがない。 と、ここまで書いてぐぐってみた。 basewall.kuciv.kyoto-u.ac.jp/dokuwiki/doku.php?id=ifort なんかどう?
547 名前:デフォルトの名無しさん [2009/08/21(金) 14:57:32 ] >>546 ソースは元々あって、それを自分でmakeしました。 リンクするっていうのはコンパイルのときの例えば-lmkl_lapack95とかのことですか? そのホームページも見てやってみたんですが・・・ もうちょっとやってみます!!
548 名前:541 mailto:sage [2009/08/21(金) 15:11:42 ] >>547 > >>546 > ソースは元々あって、それを自分でmakeしました。 > リンクするっていうのはコンパイルのときの例えば-lmkl_lapack95とかのことですか? そです。 それはそうと echo $INCLUDE の結果って、問題ないですか?設定さえチャンと出来ていれば、後はマニュアル通りにしたら 出来るはずなんですけどね。そのマニュアルってフリーで転がってんのかな。 エラーの中身見たら設定が出来てないようにも見えるけど…気のせいかな? >>541 > これは明らかに可笑しくないか? この部分、実は問題無いみたいですね。でもこれ、私にはとっても変態な仕様にしか見えない。 90 は余り使わないから、そう思うのかもしれない。そろそろ 90 もリハビリした方が良さそう。 再帰を書けるのは知っているけど書き方知らないし。 探せば他にも出て来ると思いますヨ。> 纏めページ
549 名前:デフォルトの名無しさん [2009/08/21(金) 15:30:57 ] echo $INCLUDEの結果は /opt/intel/mkl/10.2.1.017/include これで大丈夫ですか? www.ncsa.uiuc.edu/UserInfo/Resources/Hardware/SGIAltix/Doc/mkl10/doc/userguide.pdf マニュアルこれです。4章のAutomating the Processでmklbars32.sh実行すればいいとあるのですが、 実行してもダメみたいで、mklbars32.sh内のソースを.bash_profileにコピペしました。
550 名前:541 mailto:sage [2009/08/21(金) 16:03:10 ] 書いてたら凄く長くなりました。他の皆さんスイマセン。 >>549 > echo $INCLUDEの結果は /opt/intel/mkl/10.2.1.017/include > これで大丈夫ですか? それが正しいかどうかは、mklvars32.sh が無いのでなんとも。晒さなくていいですよ。 やると問題になりそうですし。 あと、気になったんですが、コンパイル時のコマンドの書式はどこから拾って来たのですか? 私が先に挙げたリンク先のサンプルでは $ ifort /opt/intel/mkl/10.1.0.015/examples/lapack95/source/gesv.f90 -L/opt/intel/Compiler/11.0/074/mkl/examples/lapack95/lib/em64t/ -I /opt/intel/Compiler/11.0/074/mkl/examples/lapack95/lib/em64t -lmkl_lapack95 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lguide -lpthread $ ./a.out < /opt/intel/Compiler/11.0/074/mkl/examples/lapack95/data/gesv.d となっています。$ はプロンプトです。ここでは見易さのために改行して引用していますが、実際は改行無し。 バージョンのことはキニシナイ。 -lmkl_lapack95 ということは、libmkl_lapack95.a というファイルが何処かに在る。 多くの場合は -L で指定しているディレクトリになる。 (続く)
551 名前:541 mailto:sage [2009/08/21(金) 16:06:20 ] (続き) >>549 > 4章のAutomating the Processでmklbars32.sh実行すればいいとあるのですが、 > 実行してもダメみたいで、mklbars32.sh内のソースを.bash_profileにコピペしました。 そんなこと書いてないみたいですが? In the above commands, mklvars<arch> stands for each of mklvars32, mklvarsem64t or mklvars64. だから . <absolute_path_to_installed_MKL>/tools/environment/mklvars<arch>.sh の mklvars<arch>.sh は mklvars32.sh か mklvarsem64t.sh に読み替えればいいのでは?最初の . は必要ですヨ。
552 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 16:23:33 ] www.obihiro.ac.jp/~suzukim/masuda/ifc_lapack31.html この辺も何かの参考にはなるかも? というか気になってたんですけど、身近に質問できる人は居ないんでしょうか? 学生だと思うんだけどなぁ(何となく)。 ## 2ch で聞くなよ、とかいうことではありません。念のため。
553 名前:デフォルトの名無しさん [2009/08/21(金) 16:51:46 ] >>550 -Lで指定しているディレクトリにパスを通してる(echo $PATHで表示される)ので、 -Lと-lの後のフォルダの指定は省いてるんですがダメですか? コンパイルのコマンドは挙げていただいたサイトのをちょっといじって書きました。 ifort gesv.f90 -L -I-lmkl_lapack95 -lmkl_intel -lmkl_thread -lmkl_core -lguid -lpthread >>551 最初の.が抜けてました。ありがとうございます。 >>552 linuxいじってる奴もfortran使いもいないんですwwwwwwwwwwwwww やっぱりエラーなりますorz 何がいけないのか・・・
554 名前:541 mailto:sage [2009/08/21(金) 19:18:08 ] >>553 > >>550 > -Lで指定しているディレクトリにパスを通してる(echo $PATHで表示される)ので、 > -Lと-lの後のフォルダの指定は省いてるんですがダメですか? ダメです。環境変数 PATH は ls や gcc、make などのコマンドが在るディレクトリを登録するものです。 なので、ここに何を書いていようとライブラリは無関係。普通はね。 > >>552 > linuxいじってる奴もfortran使いもいないんですwwwwwwwwwwwwww > > やっぱりエラーなりますorz > 何がいけないのか・・・ -L などを抜いたことが原因でしょうね。それだけが原因ではない気もしますが。コンパイラによって違います が、-v または -V というオプションを付けてコンパイルすると、ライブラリなどの検索ディレクトリを表示し ます。コンパイルもしますが、そういうものを画面に表示します。まぁ見てみると良いと思います。 で、デフォルトで登録されていない所に在るライブラリなどはコンパイル時に自分で指定しないとリンクして くれません。しなかった場合は、そんなもの無いということでコンパイルに失敗します。例えば私の環境だと /opt/lib に liblapack.a と libblas.a が在ります。標準的には /opt/lib なんて登録されませんし、登録する方法 も知りません。lapack のサブルーチンを使っているソースをコンパイルするときは $ gfortran sample.F90 -L/opt/lib -llapack -lblas とします。こうすることで、/opt/lib に在る liblapack.a と libblas.a をリンクするしろ、と指定しています。
555 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 19:38:19 ] スレ違いで恐縮ですが、どのライブラリにどのサブルーチンや関数が入っているか調べる方法ってありますか?
556 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 19:45:12 ] >>545 > /opt/intel/mkl/10.2.1.017/tools/environment/mklvars32.shを実行すれば、 > 環境変数設定されるみたいにユーザーズガイドに書いてあったんですけど、 > 実行しても設定されないようなので上の文を.bash_profileにつけたしました。 shellがbashなら .bash_profile に source /opt/intel/fc/<IFCのバージョン>/bin/ifortvars.sh source /opt/intel/mkl/<MKLのバージョン>/tools/environment/mklvars32.sh を追加しとけ。 MKLは(IFCも)バージョンUP時にディレクトリ構成や必要なライブラリが変わることがあるんでヤヤコシイわ。
557 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 19:52:17 ] >>555 こんなんではダメですか? % nm liblapack.a | head -20 liblapack.a(sgbbrd.o): U _lsame_ 00000000 T _sgbbrd_ U _slargv_ U _slartg_ U _slartv_ U _slaset_ U _srot_ U _xerbla_ U dyld_stub_binding_helper liblapack.a(sgbcon.o): U _isamax_ U _lsame_ U _saxpy_ U _sdot_ 00000000 T _sgbcon_ U _slacon_ U _slamch_
558 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 19:57:51 ] >>557 ありがとうございます!
559 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 20:06:14 ] >>556 勉強になります。ウチの Debian は1年ほど前に急に起動しなくなってから放置してますが。 >>558 それで問題なかったのなら何よりです。
560 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 20:28:18 ] 使わないライブラリってリンクしたらまずいですか? サイズが大きくなって多少遅くなる?
561 名前:デフォルトの名無しさん [2009/08/21(金) 21:27:53 ] >>554 丁寧に説明していただきありがとうございます。 やってみましたがなぜかエラーですwwwwwwwwwwwwww >>556 環境変数の設定はできてるみたいです。ありがとうございます。 みなさんありがとうございました。もうちょいがんばってみようと思います。
562 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 22:38:05 ] 確認したいんだけど、せいぜい Hello, world. を表示する程度のソースは 無事にコンパイルできる?ここで転けてたら話にならない。
563 名前:デフォルトの名無しさん [2009/08/21(金) 23:22:39 ] >>562 簡単なソースのコンパイルはできます。 mklとリンクしてコンパイルすると、.aと.soファイル内に、 定義されてないサブルーチンを使用しようとしていますとか警告出ます。。
564 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 23:53:13 ] >>563 > mklとリンクしてコンパイルすると、.aと.soファイル内に、 > 定義されてないサブルーチンを使用しようとしていますとか警告出ます。。 これは簡単なソースをコンパイルするときに出るの?簡単なソース(Hello, World. 程度)と ライブラリをリンクするときに出るのであれば設定が可笑しいと思う。それかコンパイル時 のコマンドの書き方か。両方の可能性もあるけど。 普通は、リンクするライブラリの中にある関数を使っていなくても、そんなことにはならな い。例えば sin( 1.00D0 ) を計算して表示するだけのソースと FFT のライブラリをリンクし ても文句は言われない。コンパイラはスルーすれば済むから。呼んでもないものをくっ付け る必要は無い。
565 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 00:00:54 ] MKLのUser’s Guideに環境別に必要なライブラリファイルと使い方の例が載ってるから その通りにやればコンパイル/リンクできるはずだが。
566 名前:デフォルトの名無しさん [2009/08/22(土) 10:01:37 ] >>564 /opt/intel/Compiler/11.1/046/mkl/lib/32//libmkl_lapack.so: undefined reference to `mkl_serv_load_fun' /opt/intel/Compiler/11.1/046/mkl/lib/32//libmkl_lapack.so: undefined reference to `mkl_serv_load_dll' /opt/intel/Compiler/11.1/046/lib/ia32/libiomp5.so: undefined reference to `___tls_get_addr' このエラーが出ます。 リンクするときって.aと.soは混ぜない方がいいんでしょうか? >>565 その通りにやってるつもりなんですが・・・
567 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 10:19:38 ] >>566 コンパイル時のコマンドを晒して。 あとリンクの順番を間違えるとエラーになることがある。要するに ライブラリ A と B をリンクするとき A が B にある関数を呼んでい るなら、例えば A の中にある関数 funcA がその中で B の中にある 関数 funcB を呼んでいるとき -lA -lB という順番でリンクしないと転ける。 リンクするときは .a だけで良いはず。あとは勝手にやるはずなん だけどライブラリに依るかもしれんので何も。 マニュアル通りにしていると言う割には勝手なことをしている気が する。
568 名前:デフォルトの名無しさん [2009/08/22(土) 10:25:02 ] >>567 ifort test.f90 -L/opt/intel/Compiler/11.1/046/mkl/lib/32/ -I/opt/intel/Compiler/11.1/046/mkl/include/ -I/opt/intel/Compiler/11.1/046/mkl/include/32/ -lmkl_lapack95 -lmkl_lapack -Wl,--start-group /opt/intel/Compiler/11.1/046/mkl/lib/32/libmkl_intel.a /opt/intel/Compiler/11.1/046/mkl/lib/32/libmkl_intel_thread.a /opt/intel/Compiler/11.1/046/mkl/lib/32/libmkl_core.a -Wl,--end-group -liomp5 -lpthread ちなみに簡単なソースでリンク無しだとコンパイルできます。 lapac95は.aなんですけどlapackは.soです。 ググってみたら全部.aでやる必要があるみたいです。 が、lapackの.aファイルがないんですが、勝手に持ってきてlibフォルダにいれていいんでしょうか?
569 名前:デフォルトの名無しさん [2009/08/22(土) 10:44:08 ] >>567 ifort test.f90 -L/opt/intel/Compiler/11.1/046/mkl/lib/32/ -I/opt/intel/Compiler/11.1/046/mkl/include/ -I/opt/intel/Compiler/11.1/046/mkl/include/32/ -lmkl_lapack95 -Wl,--start-group /opt/intel/Compiler/11.1/046/mkl/lib/32/libmkl_intel.a /opt/intel/Compiler/11.1/046/mkl/lib/32/libmkl_intel_thread.a /opt/intel/Compiler/11.1/046/mkl/lib/32/libmkl_core.a -Wl,--end-group -liomp5 -lpthread -libmkl_lapackいらないみたいです。 これでコンパイルしようとすると以下のエラーが出ます; /opt/intel/Compiler/11.1/046/lib/ia32/libiomp5.so: undefined reference to `___tls_get_addr'
570 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 10:44:26 ] >>568 > >>567 > ifort test.f90 (長いので中略) > -Wl,--end-group -liomp5 -lpthread このようにしなさいという説明は何処にあるのでしょう。 > が、lapackの.aファイルがないんですが、勝手に持ってきてlibフォルダにいれていいんでしょうか? ということはビルドしていないということでは?やり方はマニュアルに書いているはず。因みに無いという 根拠はなんですか?それと find /opt/intel -name "libmkl_*.a" の実行結果は? www.obihiro.ac.jp/~suzukim/masuda/ifc_lapack31.html にも書いていますが、LAPACK95 はラッパーのようなので、単体では動かないと思います。勝手に持って 来るったって何処から持って来るのだろう。そんなことしても意味ないと思うケド。あと > -lmkl_lapack95 -lmkl_lapack -Wl,--start-group これって BLAS はリンクしてないみたいだけど、しなくて良いの?
571 名前:デフォルトの名無しさん [2009/08/22(土) 10:52:24 ] >>570 >このようにしなさいという説明は何処にあるのでしょう。 ユーザーズガイドのexampleにありました。 >find /opt/intel -name "libmkl_*.a" lapack95.aはあります。.soはありません。逆にlapac.soはあって.aはありません。 lapack95のビルドはしました。が、.soはないです; BLASリンクしてもダメでした;
572 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 11:12:20 ] >>569 > これでコンパイルしようとすると以下のエラーが出ます; > > /opt/intel/Compiler/11.1/046/lib/ia32/libiomp5.so: undefined reference to `___tls_get_addr' iomp5 って OpenMP 用のものみたいだから、並列でもしない限りイラネ。と思うけど、どうなんだろ? ということで、外してやってみて。 取り敢えずオプション付けとけって感じにしか見えない。それぞれのオプションの意味を調べ直した方が 早い気がして来た。どっかに日本語版も落ちてたし。場所は忘れた。
573 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 11:29:08 ] 横からだけど、なんでも OpenMPのオプションを付けるといくつかのオプションを呼び出すことになって 非OpenMPでも最適化にプラスに作用するので 弊害がなければ付けておくといいよ、と奨められたことがある。 なくても良さそうだけど・・。
574 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 15:51:38 ] >>573 そんな話があるんですね。だったら最初から最適化しとけよ、と思わなくもないですが。 ずっと疑問なんですけど、元質問者ってそもそも何がしたいんだろう。 Fortran の勉強または単に Lapack を使う必要があるという程度なら、gfortran でも使っていれば良い。 Lapack なんてディストリビューションの公式ビルド(?)もあるだろうから、準備には手間取らない。 Debian なら Synaptic でも起動して検索すれば良いし、CentOS なら yum かな。 それでも基本的な知識が欠けているように見えるけど、考え過ぎかな。PATH の話を読んだときは噴き ました。こちらが立ち入る話ではないんですが、何となく迷走しているように見えたので。
575 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 19:06:12 ] >>573 それってopenmp以外のオプションを何も付けてない場合じゃないの? -fastや-O3などの普通の最適化オプションを付けている状態でopenmpオプションを足しても意味ないような
576 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 08:01:41 ] openmp つけると明示的に抑制しなければ auto やら (p)thread やらほかのも呼ぶはずけど、 どうだろうね。openmp 単独では最適化はデフォルトレベル以上はしないからどのみち -fast あたりと いっしょに使う前提だろうけど。
577 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 08:04:41 ] たぶん最適化されて速くなる、というよりは アドレスがらみのエラーが防げそう、とか 古い習慣のsave属性を仮定しないで処理する、とかがメリットなのではなかろうか。
578 名前:デフォルトの名無しさん [2009/08/23(日) 09:35:37 ] >>572 iomp5外したらlapackとか使わない簡単なソースはコンパイルできました!!! が、exampleのソースをコンパイルできないです。。。やっぱり同じエラーでます。。。 >>574 今やりたいことは逆行列求めるだけなんでlapackだけでいいし、 それぐらい自分で本見てプログラミングしろよって話なんですけど、 後々並列とかも使えるようにしたいのでmklを入れようとしたのです。 2週間ぐらい前に初めてvineインストールして、 環境変数とかも最近知ったので知識はまったくありませんorz
579 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 11:51:40 ] >>578 「___tls_get_addr」でgoogle先生に聞いてみたらVine Linuxだとglibcが古いのでエラーになるらしい ttp://biokids.org/?CCP4%2FAdvanced%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB CentOS5では>>569 のライブラリ指定で問題なくコンパイル/リンク出来ているので Vineの使っているglibcの問題じゃないかな? つーか、なんでVine? 特にVineを使う必要がなければIntelで動作確認してるディストリで試してみたら? #CentOS使っててこんな事言うのも何だが(まあ一応RHEL互換ではあるし)
580 名前:デフォルトの名無しさん [2009/08/23(日) 12:03:07 ] >>579 あああぁぁぁああああFedoraいれてみます!!!! みなさんありがとうございました!!!
581 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 12:14:51 ] >>578 > が、exampleのソースをコンパイルできないです。。。やっぱり同じエラーでます。。。 エラー内容は分からんが設定が出来ていないか、コンパイル時の指定にミスがあるかのどちら かだろう。 > >>574 > 今やりたいことは逆行列求めるだけなんでlapackだけでいいし、 > それぐらい自分で本見てプログラミングしろよって話なんですけど、 > 後々並列とかも使えるようにしたいのでmklを入れようとしたのです。 だったら gfortran でいい。並列も出来る。MPI が使えることは確認済み。OpenMP は知らん。 使ってる PC に複数の CPU があるのなら並列で動かす努力に意味もあるが、マトモに Fortran のコードを書けないうちから並列をやり始めても先に進めないまま時間が過ぎるだけのような 気がする。 知識も無いのに無理して intel を使う必要は無い。 ということで、自分でソース書けばよろし。あと Lapack のルーチンは処理内容に対して命名 規則があるので、それは自分で調べること。 しかし逆行列を求める程度のことで並列するヤツは居ないと思うが、そうでもない?>識者
582 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 14:25:29 ] >>581 スパコンのLinpack競争を知らんのかw
583 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 15:17:54 ] >>582 知りません。 並列については無知なので、だいぶイイカゲンなことを言っているとは思い ます。でも3×3行列程度で並列というのはそれ自体がナンセンスな気はしま す。3 が 10 でも 100 でも同様かと。100000 程度になれば意味はあるのか もしれませんが。元質問者がどの程度の規模のことをしたいのかによって選 択肢も変わって来るでしょう。 そもそも Lapack って並列を意識して書かれてないと思いますが、そんなこ とはないとか? 私は並列はやったことが無いですし、この先もやらないと思います。以前に gfortran で MPI が動くことを確認したときも、リンクの仕方は私が調べて から、「リンクの仕方は知らないけど、実行の仕方は知っている」コーハイ 君に簡単なプログラムで実行確認をしてもらっただけです。そのコーハイ君 はマトモなソースを書けな(ry 対象データを N 分割して、N 個の CPU に振り分け、個々の CPU で計算した 後に、それを1箇所にかき集めるというイメージしか無いです。間違ってる かもしれませんが。
584 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 16:47:13 ] 難しい話じゃなくて、サイズがでかけりゃ並列化するでしょ普通 問題は行列の性質。密行列なのか疎なのか、とか
585 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 17:24:37 ] >>583 逆行列計算にこそ並列化の最適化が進んでいる。 MKLなんか使えばCPU数に比例した効果が得られる。密行列だが。 そういう意味で、質問者は一応理にかなっている。 逆行列計算は、普通線形方程式を解く形で求めるが、線型方程式はアメリカの分散型の スパコンに非常に向いていて、自分に有利なようにLINPACKという線形方程式用のパッケージで スパコンベンチマークが行われている。 当然、その部分へのアルゴリズム研究や最適化がもっとも進んでいる。 ちなみに、おおよそLAPACK=LINPACK+EISPACK。LINPACKは線形演算、EISPACKは固有値演算 ライブラリで、1970〜80年代の米英国家プロジェクトの産物。原型はFORTRAN66で書かれていて NETLIB辺りに行けば今も拾えるはず。LAPACKは、それをFORTRAN77で統合したもの。 詳細は忘れたので間違ってるかもしれん(笑)LAPACKの前書きあたりを詳しく読んでくれ給へ。 これらの基底にBLASという基本サブルーチン集があって、この部分を書き換えることで ハードウェアのアーキテクチャーの違いをうまく吸収して何十年も生き残っている。
586 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 17:29:09 ] なるほどそういう背景だったのか
587 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 18:16:07 ] GotoBLAS って、そのBLASを後藤さんが最適化したものなの?
588 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 18:46:54 ] LAPACKって疎行列も対応してるの? 密より疎のほうが一般的だよな