1 名前:名無しさん@お腹いっぱい。 [04/06/01 00:13] 知る人ぞ知る強力なデータ解析ツール octave ... unixを科学研究で使っている香具師には非常に心強い味方のはずだ。 matlab互換を主張しながら、微妙にバージョンアップを続ける octaveについて語ろう。
764 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/16(月) 13:20:48 ] Cygwin介す場合が遅すぎるだけな気がする
765 名前:octave for windowsメモの筆者 mailto:sage [2009/02/16(月) 15:38:46 ] >>764 cygwin のblasってATLASじゃないとおもいまね。 かなり昔,mingwでliboctaveだけビルドできた時,行列計算にATLASをつかうと (もちろんコードはliboctaveを使ったstandalone C++ですが。) mingwとcygwinで差は,出ませんでした。 まあ,cygwinならoctaveビルド簡単だし, マルチスレッド対応のテキサス州立大学の GotoBLASを使う(無料、自由配布不可) もcygwin上ならできるのでそこでどうなるかでしょうね。 Core2Duoのマシンのない私には無縁ですが^^; HT Pentium(3.4GHz)だからそれでどれくらい,sse2なATLASとどこまで 向上するか比較できます。
766 名前:octave for windowsメモの筆者 mailto:sage [2009/02/16(月) 16:04:11 ] >>762 >・マルチスレッド対応のテキサス州立大学のGotoBLASを使う(無料、自由配布不可) この場合, octaveを自分でビルドする必要があるわけですね。 gcc-4.3.2-dw2-TDMのmingwでoctaveを構築(3.0.4RC3)したら,左除算がハングって なぜ???? mingw-gcc-3.4.5なら何とかビルドできますが,いまさらgcc-3ってのもねと おもっています。 Linuxを入れてgotoBlasてのもいいんかなとおもいますね。 職場から出るときにATLAS仕込んで帰ってやってみます。
767 名前:octave for windowsメモの筆者 mailto:sage [2009/02/16(月) 16:18:05 ] >>761 Octaveで行列型のデータつくってはきだして gnuplotのcontourにお任せするのはどうですか。 3Dのグラフの等高線図はgnuplotで書きますから。 たしかMATRIX型のデータも扱えるはずですよ。 どうやって等高線を引くのかアルゴリズムはしりませんが, gnuplotはソースコード公開しているからその気になれば 読めばわかると思います。
768 名前:octave for windowsメモの筆者 mailto:sage [2009/02/16(月) 18:44:26 ] >>766 自己レスです。意味不明な文章になっているので。<m(__)m> 帰りにコンピュータを走らせcygwinで自分のCPUにあわせたatlasを構築して, そのATLASを使ってcygwin上でoctaveをビルドして, MSVCのSSE2のCPUのATLASとの比較をして見ます。 という意味です。すみません。<m(__)m>
769 名前:761 mailto:sage [2009/02/16(月) 22:48:04 ] >>767 返信ありがとうございます! わたしの質問の仕方がまずかったようです。出力したデータの等高線を描くのは問題ないのですが、 そのデータを出力する際に、 for xi = (1:5) * 25.0 / 5.0 - 10.0 for yi = (1:5) * 25.0 / 5.0 - 10.0 c = [1; xi; yi]; a = A * c; b = 1.0 ./ (1+exp(-a)); z = sum(b); printf("%f %f %f\n", xi, yi, z); endfor endfor としているのですが、これより速く動作する(octaveらしい)書き方がありますか? という意味でした。分かりにくくてすみませんでした。 特にfor文で回すのではなく、他の言語(SciPy, RubyのNArray)で使えるような 3次元行列を使う方法があれば嬉しいと思っています。
770 名前:octave for windowsメモの筆者 mailto:sage [2009/02/17(火) 19:16:55 ] >>762 MSVC MFLOPS = 1845.9 mingw (Benjamin さんのもの) MFLOPS = 1973.0 ATLA3.8.2を自分のコンピュータ用にcygwinでビルドしてこれをつかって, mingw-4.3.2-dw2-TDMでoctave-3.0.4RC3をビルドしたもの MFLOPS = 4830.2 (mingw 4.3.2でのビルドがReference Blasだとうまく動かなかったのが Atlas使ったらあっさり動いた。なぜ!!) 私のコンピュータはHT-PentiumなのでCore2Duoまでは行かないでも, マルチスレッドですから,やはり専用にATLASかけるとかなり違いますね。 Core2Duoならどうでしょうか? ATLASの威力をフルに発揮させるにはやはりoctaveを自分でビルドしないと だめですね。 octave for windowsメモにmingwで自分でビルドする方法でも書いたほうが いいのかな。 goto blasもためしてみたいですね。
771 名前:octave for windowsメモの筆者 mailto:sage [2009/02/17(火) 19:30:43 ] >>769 すいません。思いつきません。 <m(__)m> Octaveは現在3次元とは言わず, 多次元行列サポートしてますんで,頑張ればできるんではないかと^^;
772 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/17(火) 20:00:29 ] >>770 おおすごいですね MSVCで2GFLOPSだとCore2duo 2.1GHz並ですか ATLASで5GFLOPS近くもすごい MSVC版は作者の使ってるマシンのCPUで最適化してるから キャッシュ容量とかの差で、セルフビルドしたATLASと差が出るのかもしれません こちらでもAtom 1.6GHzのネットブックに FreeBSD7.1RのPackagesで入れたOctave 3.0.2で、0.17GFLOPSだったのが Portsでatlas-3.8.2をmakeした後に、Portsでoctave-3.0.3をmakeして測ったら0.81GFLOPSでした 3万円ぐらいのネットブックでこんだけ出れば十分です
773 名前:octave for windowsメモの筆者 mailto:sage [2009/02/18(水) 09:13:35 ] >>770 >>772 家のパソコン1.2GHzのCeleron Mでやってみました。 MSVC 3.0.3 367 MFLOPS (sse2,Michael) mingw 3.0.2 830 MFLOPS (see2,Benjamin) mingw 3.0.4RC3 1110 MFLOPS (sse2, ATLAS3.8.2を自分のパソコンで作成) やはり,自分の使っているCPUでATLASかけたほうがいいですね。 Celeron Mは,意外に速いのですが,MSVC版とmingw版ではHT-pentiumでは 差が少ない飼ったのですが, Celeron Mではかなり差がありますね。 実際に ATLASをかけられたCPUとCeleron Mとのコードの最適化の 相性でしょうね。 P行列計算が関係のない,硬い微分方程式の解析でもmingw Octave版の方msvc版よりかなり速いです。 mingw版はサポートしているforgeが少ないですが,私はforgeを つかっていないのでデメリットにはなりません。 GCCも入っているのでmkoctfileのために,Msvc 2008 Expressを 入れる手間を考えると私は,Benjamin版を使っていました。 しかし,これからは自分でビルドしたものを使います。
774 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/18(水) 13:03:57 ] >>769 こんな感じでいいのかな? x = (1:5) * 25.0 /5.0 - 10.0; [X,Y] = meshgrid(x, x); c = [ones(length(x).^2, 1), X(:), Y(:)]; a = A * c'; b = 1.0 ./ (1+exp(-a)); z = sum(b); result = [X(:), Y(:), z']; for i = 1:length(x).^2 printf("%f %f %f\n", result(i,:)); end
775 名前:octave for windowsメモの筆者 mailto:sage [2009/02/18(水) 13:05:10 ] >>770 >>772 >>773 大学のパソコンでcygwinでやりました。ATLAS演算は,予想通りほぼ一緒でした。 MFLOPS = 4749.2 とにかく,windows上でお金をかけずに行列計算をそこそこ高速でやりたい人は 自分でATLASからビルドするということがとりあえずのまとめですね。 goto BLASでどうでるかですね。これは,再配布禁止なので, 自分でビルドするしかないですよね。
776 名前:octave for windowsメモの筆者 mailto:sage [2009/02/18(水) 17:31:53 ] octave-3.0.4RC4がでました。 ttp://www.nabble.com/3.0.4-RC4-to22073703.html#a22073703 これで最後のRelease Candidate (RC) だと思いますが^^;
777 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/18(水) 20:43:39 ] >>774 ありがとうございます!XとYの長さが同じ時はこれで完璧ですね。 なるほど、X(:), Y(:)で列ベクトルにして値をもっちゃえばできたんですね、 勉強になりましたm(_ _)m
778 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/19(木) 09:40:55 ] Octave 3.0.3をcygwinでmakeすると libcxsparse.a でこけますね 3.0.2でやればいいのかな
779 名前:octave for windowsメモの筆者 mailto:sage [2009/02/19(木) 14:25:20 ] >>778 SuiteSparse3.2.0になってますか。 なんか,g77とgfortranが互換性がないため, gcc-4を使うためには,SuiteSparseを最新版にする必要があります。 ちなみに私は,SuiteSparseは自分でビルドして使っています。 自分のコンピュータ用にオプション入れていますので -O3 -fomit-frame-pointer -march=1686 -mmmx -msse3 自分でcygwinでビルドする場合にはcs.hにパッチをあてる必要があります。 --- cs.h.org/cs.h 2007-05-18 21:12:04.000000000 +0900 +++ cs.h 2007-08-15 04:10:12.078125000 +0900 @@ -17,7 +17,11 @@ extern "C" { #else #ifndef NCOMPLEX +#ifdef __CYGWIN__ +#define I 1.0I +#else #include <complex.h> +#endif #define cs_complex_t double _Complex #endif #endif
780 名前:octave for windowsメモの筆者 mailto:sage [2009/02/23(月) 13:04:07 ] ATLAS(3.8.2)の組み込み(Windows版cygwin,mingw)の簡易メモ そのうち自分のページに書くつもりですが,その前に ATLASのビルドは,cygwin上で行う。(mingwでは無理)。 ATLAS(3.8.2)はgcc-3とgcc-4では違うコードを吐く。octaveでgcc-4でのビルドが よいので,gcc-4でのビルドがいい。cygwinのgcc-4は,gcc-4.exeとgfortran-4.exe を使うが,ATLASはgccとgfortranでないと動かない。gcc-3のgcc.exeをgcc-3.exe のようにリネームして,構築する。 外部ライブラリではcygwinでは,setup.exeでインストールし,mingwではBenjamin さんのライブラリを拝借するのがはやい。 まずは,ここまで。
781 名前:octave for windowsメモの筆者 mailto:sage [2009/02/23(月) 13:15:46 ] >>781 すでにあるLapackは使えないので, 適宜,CC,F77,CXX,CFLAGS,FFLAGS,CXXFLAGS,CPPFLAGS,LDFLAGSを定義して (これが結構面倒なんだが^^;) ./configure --with-blas='-L/usr/local/atlas/lib -lf77blas -lcblas -latlas' --without-lapack で構築する。外部のLapackをつかうと使っているblasが違うのでうまくいかない ,octaveのソースにあるLapackを使うのが簡単。それで--without-lapackを つかって./configureをする。 分かる人にはこれでわかるはず。わからない人には,暇になったら丁寧に書くの でお待ちを。
782 名前:octave for windowsメモの筆者 mailto:sage [2009/02/23(月) 13:30:14 ] >>780 推敲がいい加減だな。<m(__)m> 途中の文章を以下に訂正。 cygwinのgcc-4は,gcc-4.exeとgfortran-4.exe という名前だが, ATLASはgcc.exeとgfortran.exeでないと動かない。gcc-3のgcc.exeをgcc-3.exe のように退避して,gcc-4.exeとgfortran-4.exeをそれぞれ gcc.exeとgfortran.exeにしてATLASを構築する。 >>781 mingw-gcc-4.3.0-dw2-TDMでは,C++のdllライブラリlibstdc++_tdm_dw2_1.dll を使えるので.octファイルのサイズを抑えることができる。 CXXFLAGSの先頭にに-D_DLLをLDFLAGSの先頭に,-shared -shared-libgccを 加える。 今日はここまで。
783 名前:名無しさん@お腹いっぱい。 [2009/02/24(火) 18:30:30 ] Octave-3.0.4 RC5がでました。予想外に3.0.4のリリース苦戦している模様。 これが最後のRC版になればいいのですが, ttp://www.nabble.com/octave-3.0.4-rc5-td22177145.html
784 名前:octave for windowsメモの筆者 mailto:sage [2009/02/25(水) 08:05:40 ] >>783 Plot周りのバグの指摘にJaroslav Hajekさんがきづいていなかったようで Jwe氏より待ったがかかりました。3.0.4のリリースは遅れそうです。 私としては通常の使用では3.0.3で十分なので,無理して急ぐことはない と意見をかきこんでいます。 しばらくは,3.0.2または3.0.3を使いましょう^^;。
785 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/28(土) 01:18:02 ] matlabと完全互換でなくなったのは 何か理由があるのでしょうか?
786 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/28(土) 01:48:42 ] >>785 互換性はあると思いますよ MATLAB→Octave は比較的 Octaveの変な方言を使うのをやめれば Octave→MATLAB もスムーズになると思われます 変な方言とは具体的には if A<=B, endif ← end; にする function F=func(x) endfunction ←不要 # ←コメントは % if A<>B, if A!=B, ← A ~= B だけ
787 名前:octave for windowsの筆者 mailto:sage [2009/02/28(土) 13:22:51 ] >>785 元々からして完全互換を歌ったことははないですよ。 MATLABが変わっていったのに追いついていなかったというのが正しい認識だと思います。 Octave ver.3は、MATLABの仕様変更に対応して変わったという面があります。 私自身はMATLABを使ったことはなく、Octaveを使った講義でMATLAB互換を歌っていますのでMATLABの書籍は持っています。 最近のOctaveは、本格的なMex対応やplot周りなどは、最近のMATLABに仕様を変えつつありますし、互換性のあるコードが以前より書きやすくなっていると思います。
788 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/02/28(土) 16:19:08 ] >>787 「歌う」って「MATLAB互換ですよ〜♪」みたいなw 「謳う」じゃね?
789 名前:octave for windowsの筆者 mailto:sage [2009/03/01(日) 06:21:24 ] >>788 うーん。そうっすね(^_^;)
790 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/04(水) 22:19:08 ] gnuplotへの直接命令(__gnuplot_hogehoge)がobsoleteになった、ということが 今一わかっていないのですが、とりあえず3.0系列ではplotするとgnuplotが起動 しますよね。んでterminalはx11になっているようなんですが、これを例えばwxt にするにはどうすればいいんですか?
791 名前:octave for windowsメモの筆者 mailto:sage [2009/03/05(木) 08:10:20 ] >>790 octaveで最初のplotをする前ににgnupotの環境変数GNUTERMを 変更しておけばいいです。 bashなら $ export GNUTERM=wxt; octave または, share/octave/3.?.?/m/startup/octaverc share/octave/site/m/startup/octaverc ~/.octaverc のいずれかににputenv(GNUTURM,'wxt'); を書き込みます 要はgnuplotの起動時に環境変数で決まるターミナルの名前に変更します。 後から__gnuplot__set term wxt命令はハイレベルな関数plot()には なにも影響を与えません。 砂悪 __gnuplot__plot__ 'hoge.dat' などのような_gnuplot_hogehoge__で使うプロットにしか 影響を与えないということです ハイレベルというのは,アセンブラとCとの関係でC がアセンブラと比べて高い汎用性で動いているとです。 UNIXのOctaveでも環境さえ準備すればJhandleは使用可能です。 plotなどの関数はgnuplotでもjhandleでも動くので汎用性をもった関数で なくてはならないので,ローレベルのgnuplot直接命令が汎用命令のplotに 影響を与えることはできません。
792 名前:octave for windowsメモの筆者 mailto:sage [2009/03/05(木) 08:12:30 ] >>791 砂悪 は消し忘れです。すいません<m(__)m>。
793 名前:octave for windowsメモの筆者 mailto:sage [2009/03/05(木) 12:32:03 ] >>791 書き忘れましたが,print関数でplotのファイル出力には 複数のファイル形式に対応してます。 詳しくは,help plotを参照してください。 上はgraphic backendにgnuplotを使った場合です。 Jhandleだとepsしか出力できません。
794 名前:790 mailto:sage [2009/03/05(木) 13:50:03 ] "筆者"様、ありがとうございました。
795 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/05(木) 19:28:38 ] >>755 の続きで Intel Core2Duo 2.1GHz, WinXP マシンのcygwinでatlasをmakeして、octaveを再makeしてみました 現在までの結果は MSVC, Octave 3.0.1 2.05 GFLOPS Cygwin, Octave 3.0.3 0.99 GFLOPS で、 cygwinでAtlasをmakeしてみた結果は Cygwin, Octave 3.0.3+Atlas 4.35 GFLOPS これはすごい!。 >>762 のMSVC版の結果も合わせると Intel Core2Duo 2.4GHz WinXPなら Cygwin, Octave 3.0.3+Atlas 4.92 GFLOPS ぐらいでしょうか。Matlabのシングスレッドの6GFlopsに匹敵します。 これでAtlasがマルチコアに対応すれば… ちなみにcygwin上でのoctaveのmakeは簡単です ttp://ftp.yz.yamagata-u.ac.jp/pub/cygwin/release/octave/ このcygwinで配布してるsrcを取ってきて、解凍して、同梱のpatchをあてて、configureしてmakeするだけです。 その前にAltasをmakeしてインストールして、/usr/local/atlas/lib の中にある*.a のシンボリックリンクを /usr/local/lib に置くかどうかすれば、configureした時に見つけてくれます。
796 名前:octave for windowsメモの筆者 mailto:sage [2009/03/06(金) 09:25:17 ] >>795 cygwinでoctaveつかうならaltas入れてgcc-4をつかって 自分でビルドするのがいいと私もおもいますね。 forgeはpkg installで必要なやつだけいれればいいので。
797 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/07(土) 20:06:18 ] というわけで、Intel Core2Duo 2.4GHzのCygwinにGotoBLASを入れてみました 入れたのは最新のバージョン1.26です。CBLASも必要。 そのあとにOctaveをmakeしなおしました(Makeconfを修正してGotoBlasを有効にする) その結果は… octave:2> n=2000; A=randn(n); B=randn(n);tic; C=A*B; t=toc, MFLOPS=2*n^3/t*1e-6 t = 1.0160 MFLOPS = 1.5748e+04 なんと15.75GFLOPSです。 >>762 >>795 の結果も合わせると、 Intel Core2Duo 2.4GHz, WindowsXP Proでは Octave Cygwin版3.0.3 GFLOPS = 1.14 Octave MSVC版3.0.3 GFLOPS = 2.32 Octave Cygwin+Atlas GFLOPS = 4.92 MatlabR2008a(MT OFF) GFLOPS = 6.15 (MT: Multi Thread) MatlabR2008a(MT ON) GFLOPS = 10.33 Octave Cygwin+GotoBlas GFLOPS = 15.75 Cygwin版ノーマルと比べると15倍!この差は大きい
798 名前:octave for windowsメモの筆者 mailto:sage [2009/03/09(月) 10:06:54 ] >>797 GotoBLAS恐るべしですね。これだとMACと同等以上でしょうか。 MacでもGotoBLASを使えってことでしょうね。 再配布が禁止なので,自分でビルドしないといけないのが難点かな。 mingwでも今度やってみます。 Makeconfを書き直されたそうですが。 私がatlasを使うとき行っている ./configure --with-blas='-L/hoge/atlas -lf77blas -lcblas -latlas' という感じで行きませんかね。
799 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/09(月) 10:58:25 ] >>798 lapackはバイナリーのoctaveを入れた時に入ってるので ./configure --with-blas='-L/usr/local/lib -lgoto' だけで拾ってくれました それとMacで速かったのはAppleのBLASであるアクセラレーション・フレームワークが入っていたからで GotoBlasを使うのなら、Cygwinで十分だと思います。 ちなみにGotoBlasは環境変数で GOTO_NUM_THREADS=1 とすると、1coreだけで演算してくれますが、その場合は8GFlopsでした。 2coreで約15.5GFlopsですからスケーラビリティーはあると思います。 例えば、DELLのStudio Desktop Core2Quad(2.33GHz)・4GBメモリ搭載ハイエンドミニタワーが 販売価格 69,980円 こんななので、これで4core有効にすれば30GFlopsぐらい出るでしょう。 1GFlopsと30GFlopsの差はたぶんけっこうあって、体感的には30分かかる計算が1分で終わる感じでしょうか。 もしくは1GFlopsで1回に1分かかるベクトル演算を1万個のパラメータで計算すると1万分=1週間かかりますが 30GFlopsなら5時間半で終わります。まあとにかく差が大きいです。 Atlasで使う限りはその1/4以下の能力しか出せないと考えるとGotoBlasはなかなかいいです。
800 名前:octave for windowsメモの筆者 mailto:sage [2009/03/10(火) 15:08:02 ] >>799 /configure --with-blas='-L/usr/local/lib -lgoto' だけで拾ってくれました ありがとうございます >>770 HT-pentium4 mingw-4.3.2-dw2-TDMでoctave-3.0.4RC3をビルドしたもの MFLOPS = 4830.2 GotoBLAS MFLOPS = 5227.0 私のやつはHT-Pentiumだからかな。でもATLASより少しは速い。 ATLASはビルドに時間食うし自分でビルドするならGotoBLASに決まりですね!!。
801 名前:octave for windowsメモの筆者 mailto:sage [2009/03/10(火) 19:37:56 ] >>800 キリ番ゲットしてたんですね<m(__)m>。 mingw(GCC-4.3.2-dw2-TDM)でもcygwinでビルドしたリブラリ使えます。 (できたlibgoto_(cpu name).a をlibgoto.aにコピーして, 適当な場所にいれ,--with-blas='-L/usr/local/lib -lgoto' でビルドする。) MFLOPS = 5535.1 すこしですが速くなります。こりゃビルド方法をメモにかかんとあかんなあ。 しばしお待ちを<m(__)m>。
802 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/10(火) 19:59:18 ] >>801 MSVC版で使えると最高なんですがねぇ GotoBlasのexports/というディレクトリーで make dll とやると、dllファイルが出来るんですけど MSVCのbin/のlibblas.dllとリネームして置き換えても cblasの関数が無いみたいなエラーが出てダメでしたね GotoBlasとcblasをくっつけてdllをつくればあるいは… という感じがしないでもありませんが
803 名前:octave for windowsメモの筆者 mailto:sage [2009/03/11(水) 08:19:59 ] >>802 おそらくoctaveは将来,MSVC版はなくなりそうです。 というのはLapack 3.2はfortran90でかかれており,fortran90に対応した f2cがないからです。 ttp://www.nabble.com/Octave---Fortran-continued-td20976664.html#a20976664 Michael(MSVC版の開発者)さんとBenjamin(Mingw版の開発者)のやり取り を参照ください。また,行列計算以外octaveの計算速度はgcc-4.3以上を 使えばmingwの方が速いです。 clear; function dx = oregonator_m (x, t) dx = zeros (3, 1); dx(1) = 77.27*(x(2) - x(1)*x(2) + x(1) - 8.375e-06*x(1)^2); dx(2) = (x(3) - x(1)*x(2) - x(2)) / 77.27; dx(3) = 0.161*(x(1) - x(3)); end x0 = [ 4; 1.1; 4 ]; %t = [0, logspace (-1, log10(303), 150), logspace (log10(304), log10(500), 150)]; %t=linspace(0,500,1000); t=0:0.5:500; ts=cputime(); y = lsode ('oregonator_m', x0, t); cputime()-ts plot (t',y(:,1),"",t',y(:,2),"",t',y(:,3)); をやるとMsvc 3.0.3 1.6563s, Mingw 3.0.2 1.2188s, 4割程度mingw版の方が 速いです。私はjhandleを使わないのでmingw派です。
804 名前:octave for windowsメモの筆者 mailto:sage [2009/03/11(水) 09:41:58 ] >>773 >>800 >1.2GHzのCeleron M >mingw 3.0.4RC3 1110 MFLOPS (sse2, ATLAS3.8.2を自分のパソコンで作成) でしたが GotoBLASでは900弱でした。 古いCPUの場合はATLASの方が速いですね。
805 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/11(水) 10:01:18 ] >>803 GotoBlasを入れて15GFlopsにしても、一部のプログラムでGotoBlas+Cygwin版が 2GFlopsのMSVC版よりも極端に遅い事があったのです。それで調べてみました 行列のベクトル積 MSVC octave:1> A=randn(100);tic;for jj=0:1000;C=A*A;end;toc Elapsed time is 0.938295 seconds. Cygwin octave:1> A=randn(100);tic;for jj=0:1000;C=A*A;end;toc Elapsed time is 0.25 seconds. Cygwinの方が4倍ぐらい速いしループのオーバーヘッドはほとんど無い 比較処理 MSVC octave:2> A=randn(100);tic;for jj=0:10000;B=(A>0)*1;end;toc Elapsed time is 1.797 seconds. Cygwin octave:2> A=randn(100);tic;for jj=0:10000;B=(A>0)*1;end;toc Elapsed time is 40.28 seconds. Cygwin版は比較処理が致命的に遅い! 一部の関数計算に比較処理を使うのですが、これが遅いと非常に困るんですよね そういう意味でMSVC版のリリースは続けて欲しいのでう感じなのです。 それと自前でBuildしたlibgoto.dllを使えるようにして欲しいですね。 ちなみにMatlabだと1.68秒なのでMSVCとほぼ同じなんですが。
806 名前:octave for windowsメモの筆者 mailto:sage [2009/03/11(水) 11:43:53 ] >>805 cygwinのgccはなにをお使いですか? gcc-4を使わないと極めて遅いですよ。これはgcc-3の 有名なslowness issue of sjlj exception handling in cygwin gccに よるものです。現在のoctave 3.0.3はgcc-4でビルドされています。 gcc-4はdwarf2 exception handlingですから,MSVCより遅いですがそれ穂ほどでも gcc-4はcygwin set upから簡単に手に入ります。gcc-4でのoctaveのビルドは ttp://www.tatsuromatsuoka.com/octave/jpn/OctaveWinMemo.html#090131 をご覧ください。またこの場合,g77とgfortranがbinary互換 でないので,またGotoBLASもgcc-4でビルドしたください。 Makefile.ruleをのgccをgcc-4にgfortranをgfortran-4に 書き直してくださいね。 ちなみに私のPCで比べると A=randn(100);tic;for jj=0:10000;B=(A>0)*1;end;tocは 2.464 seconds.(cygwin 3.0.3) 2.88553 seconds. (msvc 3.0.3) 2.32813 seconds (mingw 3.0.2) msvcが一番遅いです やはりmingw版が最速です。開発版ではoctave独自のMATLAB like なgraphic backendを持つため(gnuplotも使えますよ)Jhandleが使えない ことは開発版では問題ありません。スピードでいうならmsvcよりmingwが 速いです。ごれはgcc-4がmsvcより最適化性能に優れていることによります。
807 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/11(水) 13:34:46 ] >>806 gcc 3.4.4でした そのうち4.xに入れ換えて試してみます >開発版ではoctave独自のMATLAB likeなgraphic backendを持つ 3.1.xではそんな機能が入るんですか
808 名前:octave for windowsメモの筆者 mailto:sage [2009/03/11(水) 13:58:51 ] >>801 Benjaminさんのexternal libraries ではうまくいきませんね^^; アプリケーションエラーがでてしまいます。 あれ使えると楽なのになあ。 もう少しあがいてだめなら,私がビルドしたexternal librariesと GnuWin32にexternal librariesでビルドする方法を書くとしますかね. まだ,external librariesはgcc-3でビルド多くて多くがスタティックライブラリ だから,この際新しいソースを手に入れてやってみます。
809 名前:octave for windowsメモの筆者 mailto:sage [2009/03/11(水) 15:16:25 ] >>807 gcc-4は一応まだαリリースですので,gcc-4.exe,g++-4.exe…となっており, gcc-3.4.4と共存が可能です。 >>開発版ではoctave独自のMATLAB likeなgraphic backendを持つ >3.1.xではそんな機能が入るんですか まだ,開発途中ですけどね。今見てみるとあまりMATLAB likeではないですね。 OpenGL/FLTK graphics backend. This backend can be enabled with the following commands: input_event_hook ("__fltk_redraw__"); __init_fltk__ (); set (0, "defaultfigure__backend__", "fltk"); OpenGLつかっているので3Dでご利益があるのかな。 いまのところは使い物にはなりませんね。 jhandleは生き残るのかな。gnuplot派なのであまり興味ないですが^^;
810 名前:Octave + GotoBLAS (Cygwin上) [2009/03/12(木) 02:57:54 ] Cygwin 上での Octave バージョン 3.0.3 + GotoBLAS のインストール手順を 書いてみました 133.5.18.167/rinkou/octave/octavemake.html ※ 今は gcc バージョン 3 にしています.そのうち gcc バージョン 4 にしたいと思っています. お役に立ちたい,とは恐れ多いですが,フィードバックが欲しいので (なかなか,ご返事できないかも知れないのはご容赦ください).
811 名前:octave for windowsメモの筆者 mailto:sage [2009/03/12(木) 08:10:41 ] >>810 大変丁寧に書かれていていいと思います。 gcc-4を使うと現在のSuiteSparse(3.2.0)はgcc-4でビルドしてあるので バイナリがそのままが使えます。 また,SuiteSparseのoctave用ライブラリを作成するだけならビルドに GotoBLASは不要です。checkができませんが。octaveでチェックすればいいので) octave-3.0.4RC5では,liboctave/CSparse.ccなどへのパッチは不要でした。 ただし,プロットに致命的なバグがあり,別のパッチが必要ですが^^; octave-3.0.4RC5はホームページにはなく,octave-maitainersのMLの スレッドを探せば見つかります。(パッチも) なお,MetisとGotoBLASは再配布不可なのでビルドしたバイナリを人にあげる ことはできないことを明記してくださいね。 ここら辺は,欧米人は当然ですがうるさいので。
812 名前:octave for windowsメモの筆者 mailto:sage [2009/03/12(木) 12:00:07 ] >>810 cd /usr/local/bin cp *.dll /usr/lib は不要です。Unixの.soと違いwindowsの場合dllは, そのdllを使うexeファイルと同じディレクトリかpathのとおったディレクトリ に入れます。したがって/usr/local/binにあればよろしいので,libにコピー しても意味はありません。/usr/libにおくのはlib??????.dll.aです。
813 名前:octave for windowsメモの筆者 mailto:sage [2009/03/13(金) 07:51:33 ] >>811 すいません。 SuiteSparseはblasにあわせてビルドしなおす 必要ありかもしれません。
814 名前:octave for windowsメモの筆者 mailto:sage [2009/03/13(金) 14:50:26 ] GotoBLASだと make checkで引っかかりますね。ウーム。 test_sparse.m ..........................................panic: Segmentation violation -- stopping myself... ATLASは家では成功したんですがね。 すこしかかりそうですね<m(__)m>
815 名前:octave for windowsメモの筆者 mailto:sage [2009/03/13(金) 17:00:59 ] なんかコンピュータがおかしいと思っていたらメインのファンが回って いなかった(T_T) 良く壊れなかったもの。ふた開けてUSB扇風機で冷やしています。 まあこれでいいかな。 >>800 は >mingw-4.3.2-dw2-TDMでoctave-3.0.4RC3をビルドしたもの(ATLAS) >MFLOPS = 4830.2 はMFLOPS = 4923.1になりちょっとあがりました。 Lapackのパッケージを使うと左除算がうまくいかず今は--without-lapack でoctaveにはいっているサブセットのLapackでやると左除算がうまくいく。 GotoBLASにlapack-3.1.1へのパッチが入っているので これを使わないといけなのいかも また,GotoBLASの説明をよく読むとHyper ThreadingではPerformanceは出せないの で物理コアの数で利くみたいですね。たしかにSMP=1として,並列Threadで GotoBLASでやってみたけどほとんど変わらないですね。それだったらシングル ジョブを2個立ち上げたほうが効率いいかなですね。
816 名前:octave for windowsメモの筆者 mailto:sage [2009/03/13(金) 17:05:02 ] >>810 Octave + GotoBLAS (Cygwin上)に私のページからリンク張ってもいいですか?
817 名前:Octave + GotoBLAS (Cygwin上) mailto:losingsleep@mail.goo.ne.jp [2009/03/14(土) 15:33:08 ] 810 の投稿者です. 「octave for windows メモの著者」様,コメント,ご意見,ご示唆ありがとうございます. 個別にご返事せず,済みません.Web ページの改訂を行いつつあります.お陰様で,よい Web ページができそうです. 私が,掲示板の新参者で,「ずいぶん,厚かましいお願いをしてしまった」と恥じています.Web ページずいぶん細かく見ていただいてありがとうございます. 「私のページからリンク」は,もちろんOKです.名誉です. 事後報告で申し訳ないのですが,私の方からも,リンクを張り,相互リンクをお許しいただけますでしょうか? Web ページは,もう少し見直しを続けます. GotoBLAS を見つけ,Octave に組み込んだとき,「こんなに速くなるのか」と感動しました.私は初心者なのですが,少しでもお役に立てればと思っています.
818 名前:octave for windowsメモの筆者 mailto:sage [2009/03/16(月) 07:57:46 ] >>817 相互リンクの件了解しました。よろしくお願いします。
819 名前:octave for windowsメモの筆者 mailto:sage [2009/03/16(月) 13:42:41 ] >>817 ATLASについて math-atlas.sourceforge.net/errata.html#winpt を見てください。cygwin上ではThreadの数のauto detectができないと かかれています。 (eg., I add -t 4 to my Core2Quad configure command). 他にも直す点がありそうです。しかし,GotoBLASに勝てるかは わかりませんが,ATLASのマックスの性能をだすにはこの点を指定する 必要がありそうです。
820 名前:octave for windowsメモの筆者 mailto:sage [2009/03/16(月) 18:21:48 ] >>819 うーむ。やって見たのですが。-lpthread以外になんかオプションが必要なのかな! octave.exe:1> n=2000; A=randn(n); B=randn(n);tic; C=A*B; t=toc, MFLOPS=2*n^3/t*1e-6 assertion !pthread_mutex_lock ( &(ROOT->mutex) ) failed, line 74 of file /home/atlas/atlas3.8.2-gcc4.3.3-2/../ATLAS3.8.2 //src/pthreads/misc/ATL_signal_tree.c export LIBS='-lstdc++ -lg2c -lpthread' ../../octave-3.0.3/configure --prefix=/usr/local/octave-3.0.3a --with-blas='-lptf77blas -lptcblas -latlas'
821 名前:Octave + GotoBLAS (Cygwin上) [2009/03/17(火) 01:38:34 ] 817 の投稿者です. Atlas + Octave 3.0.3 (Cygwin 上) やってみました. ・インストールの手順を書いてみました 133.5.18.167/rinkou/cygwin/atlas.html ・「-t 2」有りと無しで,性能の差が出ないので,力尽きました.残念. (私が素人なのでいけないのですが)(うまくいくと面白いんだけどなあ)
822 名前:Octave + GotoBLAS (Cygwin上) [2009/03/17(火) 02:56:37 ] 821 の投稿者です.ミスがありました.次のように訂正します. (済みません). 私が書いた「Atlas + Octave 3.0.3 (Cygwin 上) インストール手順」 133.5.18.167/rinkou/cygwin/atlas.html では: ■ Octave の make check が通らない (src/syscalls.cc のエラー.力尽きて,原因が分かっていません). ■ 「-t」無しは 1.57 秒.「-t 2」は 0.87秒 CPU: Intel Core2 Duo E8500. x=rand(2000,2000); y=rand(2000,2000); tic(); z=x*y; toc() ATLAS のことを分かっている人が,4コア以上の CPU を使うと,最高速 を叩き出せそう,と感じています.(私の力及ばず).
823 名前:Octave + GotoBLAS (Cygwin上) [2009/03/17(火) 03:41:07 ] 821 の投稿者です. (再び,自己フォローです.済みません.確かめもせず,投稿している私がオッチョコチョイです.最新情報です) ■ ATLAS の configure の引数 ../configure -t 2 -b 32 -D c -DWALL --prefix=/usr/lib/atlas --with-netlib-lapack=/tmp/lapack-3.2/lapack_LINUX.a -t 2 は,「コア数が2個」というような意味 ■ Octave の configure の引数 CC=gcc-4 CXX=g++-4 F77=gfortran-4 ./configure --prefix=/usr/local --with-blas="-L/usr/lib/atlas/lib -lptff77blas -latlas -lpthreads" --with-lapack="-L/usr/lib -llapack_LINUX -ltmglib_LINUX" これで,Octave の make check は通過. CPU: Intel Core2 Duo E8500 の場合 ・「-t」無しは,およそ 1.57〜1.60秒 ・「-t」の場合,およそ 0.85〜0.87秒 「n=2000; A=randn(n); B=randn(n);tic; C=A*B; t=toc, MFLOPS=2*n^3/t*1e-6」の結果, MFLOPS=1.8868e+04 と出てきます. ※ 819 番のご投稿に「>> 817」とありましたので,少しがんばってみました.
824 名前:octave for windowsメモの筆者 mailto:sage [2009/03/17(火) 10:03:35 ] >>823 すばらしい Octave Cygwin+GotoBlas GFLOPS = 15.75 MFLOPS=1.8868e+04 おお!,ATLASは手間がかかりますが勝ってますね。 ATLASもいつのまにか3.8.3になってますね。 HPを参考に再チャレンジします。 あと,GotoBLASはcygwinで構築したliblapack.a (lapack_LINUX.aをリネームしたもの)を使うとmingwで正常に動きました。 mingwのライブラリキットのリリースを手がけます。一部はまだ,gcc-3.4.5 でビルドしていますが,動作するのでとりあえずあげるのを優先します。 (ぼちぼち再構築します。)
825 名前:octave for windowsメモの筆者 mailto:sage [2009/03/17(火) 16:27:41 ] >>822 GNU FORTRAN コンパイラ・バージョン 3 を使うと,LAPACK バージョン 3.2 がうまくビルドできないことがあります(例えば,下記の通りです.状況によってエラーメッセージが変わります). 原因は不明です. ttp://www.netlib.org/lapack/lapack-3.2.html の7. Install Procedureに LAPACK-3.2 now requires a FORTRAN 90 compiler. (Do not try to compile with g77 or other 77 compilers.) となっており,GCC-3のfortranはFortran 77ですから使えないのです。 いまやGCC-3はObsoleteです。Octave もDevelopment branch (3.1.x)ではGCC-3では ビルドできません。というわけで,cygwinでもgcc-4に移行の最中なのです。 gcc-4 cygwinはついこないだ4.3.2-1のalphaバージョンから4.3.2-2の betaバージョンになりました。 正式版がでたらgcc-4がgccになると思います。
826 名前:Octave + GotoBLAS (Cygwin上) [2009/03/18(水) 12:44:31 ] >> 824, 825 ご親切に,ご教示ありがとうございます.確かに,gcc-4 が今後の主流だと思います. (Web ページは,別の面からみても,表現が不適切でしたので,見直しつつあります). Windows は MinGW + Octave の方が,CYGWIN よりも需要が多い,と思いますので, MinGW 版のリリースに期待している人は多いと思っています. さて,もう1度実験してみました. ソフト: Octave 3.0.3 + ATLAS (Cygwin) ハード: Intel Core2 Quad Q9550 のマシン x=rand(2000,2000); y=rand(2000,2000); tic(); z=x*y; toc() ⇒ 0.566〜0.578秒 ※ 詳細は 133.5.18.167/rinkou/cygwin/atlas.html ※ インストールに慣れている人でしたら,もっと速くなるような気がします.
827 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/18(水) 19:06:51 ] >>797 と >>805 の者です gcc-4, g++-4, gfortran-4で、Gtoblas, Cblas, Lapack3.1.1, SuiteSparse3.2をmakeしなおした上で octave-3.0.3をやっとmakeしました。 つまづいたのは libstdc++.dll.a で、エラーの理由はよくわからないのでリネームして隠し それでもSuiteSparseでエラーが出るので色々やった結果 (octave-3.0.3-1.src.patchをあてたのが効いたか、SuiteSparseのincludeファイルもインストールしたのどちらか) どうにかmakeに成功したました。 マシンは自宅の Intel Core2Duo 2.1GHzです(2.4GHzマシンの12%落ちぐらいの性能のはず)。 octave:1> n=2000; A=randn(n); B=randn(n);tic; C=A*B; t=toc, MFLOPS=2*n^3/t*1e-6 t = 1.32200 MFLOPS = 12102.9 約12GFlopsでした。まあまあですね。 それで問題の比較演算なんですが、 octave:1> A=randn(100);tic;for jj=0:10000;B=(A>0)*1;end;toc Elapsed time is 2.245 seconds. 一方、MSVCだと octave:1> A=randn(100);tic;for jj=0:10000;B=(A>0)*1;end;toc Elapsed time is 2.42354 seconds. で、ほぼ同じ。これでやっと使えるようになりました。ありがとうございました。
828 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/18(水) 19:26:05 ] >>824 その15.75GFlopsのは、Core2Duo 2.4GHzなのですが Atlasの1.8868e+04MFlopsのは、Core2Duo E8500=3.16GHzなのです なので、おそらくgcc-3を使ってGotoBlasで測定すると 2.4:3.2=15.75:X でX=3.2*15.75/2.4=21GFlops ぐらいになるはずです それでAtlasの約19GFlopsというのはそれよりも若干低いわけですが、 このレベルになるとそれはもう細かい話で、再配布可能な点を考えれば Atlasは十分実用的だと思われます。
829 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/18(水) 19:55:27 ] 長い行列などをless表示ではなくコンソールに残したまま表示することってできますか? 長めの出力を交互に見比べたいときにqで消えてしまうので不便です
830 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/18(水) 19:57:15 ] 829です。環境はwindows版です。 ここしかOctave関連が見つからなかったので質問しました。 よろしくお願いします。
831 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/18(水) 20:25:38 ] >>829 more off としてください
832 名前:octave for windowsメモの筆者 mailto:sage [2009/03/19(木) 08:51:45 ] >>829 >>830 >>831 この場合コンソールのバッファを増やしておくとよいでしょう。 スクリーンのoctaveのアイコン右クリック→プロパティ→レイアウト →画面バッファのサイズ→高さ 変更すると確認の画面で このウインドウを起動したショートカットを変更する で設定を保存してください。 この高さの値をたとえば9999とかにしておくとlessなしでも結構いけます。
833 名前:octave for windowsメモの筆者 mailto:sage [2009/03/19(木) 08:59:11 ] >>828 ありがとうございます。GotoBLASの方がいい場合が多いが 配布に関するライセンスの問題があり,その点ではATLASがいいという ことでしょうね GotoBLASのライセンスはテキサス大学の Texas Advanced Computing Center ものなので仕方ないのでしょうね。
834 名前:octave for windowsメモの筆者 mailto:sage [2009/03/19(木) 09:38:49 ] ここも800番超えたしそろそろ次スレたてを考えないととはおもうのですが。 >>439 次スレからはプログラム板に立てるか。 >様々なプラットフォームに対応しているプログラマブルな >ソフトがUNIX板にあるというのがおかしい。 というような意見があるので, ソフトウェア板 あたりなのかな。 タイトルは 「データ解析ツールoctaveを語ろう2」 か octaveはデータ解析ツールだけでないので シンプルに 「octaveを語ろう2」なのかな。
835 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/19(木) 10:03:21 ] >>834 UNIX板でいいと思います そもそもインストールネタしか無いぐらいの過疎スレですから あっちこっち動き回るのは得策とは思えません 言語の内容的な論議はシミュレーション板やプログラム板のMatlabスレにまかせて 導入方法や、高速化などに特化した方がいいと思います
836 名前:octave for windowsメモの筆者 mailto:sage [2009/03/19(木) 11:02:28 ] >>835 なるほど。まあ,ビルドねたになるとwindows上でもMSYS+mingwやcygwin などのUnixyなツールでやるわけで,Visual Studio云々にはなりませんよね。 最近やり取りしたGOTOBlasやATLASネタもUnix上の方がすこし便利というくらい の話で基本は同じですからね。 データ解析ツールoctaveを語ろう2 でもいいですかね。名前よりもないようですからね。名前変えると 検索とかで大変ですからね。
837 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/19(木) 15:48:25 ] 行列演算を高めたOctaveで何が律速になってるのかのテスト マシンはIntel Core2Duo 2.4GHz MATLAB 7.6.0 (R2008a) >> tic;for jj=0:10000;end;toc 経過時間は0.000066秒です >> A=randn(200);tic;for jj=0:10000;B=(A>0);end;toc 経過時間は3.358699秒です >> A=randn(4000000,1);tic;for ii=1:4000000,if A(ii,1)>0,end;end;toc 経過時間は0.118251秒です Octave 3.0.3 (MSVC) ← BLASの関係しない演算なので octave:1> tic;for jj=0:10000;end;toc Elapsed time is 0.0079 seconds. octave:2> A=randn(200);tic;for jj=0:10000;B=(A>0);end;toc Elapsed time is 5.9 seconds. octave:3> A=randn(4000000,1);tic;for ii=1:4000000,if A(ii,1)>0,end;end;toc Elapsed time is 52.8131 seconds. 一番目はループテスト。tic,tocの誤差程度の差。 二番目は比較演算。Matlabより1.6倍遅い。けどそんなにひどくも無い。 三番目はif文。Matlabより50倍遅い。ここが明らかに律速。 Cygwin番のifはさらに1.5倍程度遅いもよう。 なので、if文は使わないようにして、比較演算に置き換えるべき。
838 名前:octave for windowsメモの筆者 mailto:sage [2009/03/19(木) 17:06:12 ] >>837 フーム。なるほど。loop自体よりよりifが遅いってわけですね。 これはためになる。 MATLABが速いのはJIT(Just In Time)コンパイルしてるからだそうですね。 でもloopの速度の改善がそれほどないことを考えると完全なバイナリじゃなく 中間コードぐらいかな。octaveもscirptをロードするときには中間コードには しているらしいけどそのレベルがちがうんでしょうか。 MATLABもっていない人の発言なのであくまでも推測でしかありませんが。
839 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/19(木) 17:39:24 ] ifのやつパイプラインがどのくらいストールしてるか知りたいですね。
840 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/19(木) 18:11:50 ] >>838 いや、400万回の空ループ(3番目のif文のテストに相当)を回すと MATLABで0.01秒 Octave-MSVCで2.22秒で 200倍以上差があるんですけど、 それだけのループの中でやる演算にかかる時間に比べれば ループのオーバーヘッドは無視出来るって事ですね JITがどうのというのは、たぶんその程度のの差です 比較式については以下の例をあげます 100x100の行列の全要素を調べて正なら1、違ったら0の行列を返す場合 if文なら A=randn(100);for ii=1:100,for jj=1:100,if A(ii,jj)>0,B(ii,jj)=1;else,B(ii,jj)=0;end;end;end; MATLABで0.01秒、MSVCで0.36秒です 比較式で同じ事をした場合 A=randn(100);C=(A>0).*1; でよくて MATLABで0.0004秒、MSVCで0.0008秒です。 同じA行列で計算した後にB-Cするとゼロ行列が返るので同一の結果のようです。
841 名前:octave for windows メモの筆者 mailto:sage [2009/03/21(土) 15:30:55 ] ウーム。MinGWでの高速行列計算用octaveのビルドは苦戦中。 GotoBLASは、make checkのtest_sparseでsegmentation violationでこける。原因不明。 ATLASのマルチスレッドは、posix threadを使うのでcygwin上でないと動かない。 MinGWでは、今のところシングルスレッドのATLASしか動かない。まあ、これでも、バイナリ配布のoctaveよりも行列計算速度はかなり改善するので、ライブラリキットを出す意味はあるかな。 今のところ、マルチコアのCPUの利点をWindowで使うにはcygwinということですかね。 となると、やはり、計算はwindowsよりもunixがいいような気がしてます。unix屋さんにはそんなの当然といわれそう(^_^;)。 まあ、もう少しMinGWであがいてはみますが。
842 名前:Octave + GotoBLAS (Cygwin上) [2009/03/22(日) 02:26:32 ] >> 841 ■ Octave の configure の引数 ATLAS のマルチスレッド・ライブラリを使って,Octave を make するとき Octave の configure の引数を調整できるようです. 例えば,普通の CBLAS でなくて,ATLAS の libptcblas.a をリンクすることができます (→この方が望ましい) CC=gcc-4 CXX=g++-4 F77=gfortran-4 ./configure --prefix=/usr/local --with-blas="-L/usr/lib -L/usr/lib/atlas/lib -lptcblas -lptf77blas -latlas -lpthread" --with-lapack="-L/usr/lib/atlas/lib -llapack" ※ 口出しだけで,実行が伴っていなくて済みません(MinGW の環境を作るスキルがないもので). あわよくば,解決のヒントになれば良いなと思いまして,書き込みました.
843 名前:Octave + GotoBLAS (Cygwin上) [2009/03/22(日) 02:29:18 ] 842 の投稿者です. 済みません.「841」の内容は,すでに 820 で投稿済みでした.申し訳ない.
844 名前:Octave + GotoBLAS (Cygwin上) [2009/03/22(日) 02:31:57 ] --- 842 の投稿者です. 済みません.「841」の内容は,すでに 820 で投稿済みでした.申し訳ない. --- ^^^ [842」の内容は,すでに 820 で投稿済みでした.申し訳ない. このように訂正します. 恥の上塗りで,申し訳ないです.
845 名前:octave for windowsメモの筆者 mailto:sage [2009/03/23(月) 12:39:28 ] Octave + GotoBLAS (Cygwin上)様 貴兄のページで気になった点を すいません。/usr/localでなく/usrにインストールすれば 以下の作業は不要です。 cp /usr/local/lib/octave-3.0.3/lib* /usr/lib /usrにインストールするにはconfigureで ./configure --prefix=/usr (... other options) prefixを指定します。 また,octaveはpkg-configは使いません。独自のshell script octave-configを使います。 そこで,prefixの値を変更すればいいのですが。 これは他のソフトからoctaveのライブラリを使う場合に octaveのインストール情報を探るのにconfigureやmakeから参照されるとき つかう物なので用途がないときは触らないで結構です。 cp /usr/lib/libctave.dll.a /usr/lib/liboctave.dll.a ですがこれは,libctave.dll.aがMacroさんのミスなので mv /usr/lib/libctave.dll.a /usr/lib/liboctave.dll.a が妥当です。
846 名前:octave for windowsメモの筆者 mailto:sage [2009/03/23(月) 12:40:28 ] >>845 私は試験的にいろいろを作成するため prefixを --prefix=/usr/local/octave-3.0.xx.yy のように指定してます xxはバージョンでyyは自分で決める識別子です。頻繁に使うときはaliasを使って alias octaveyy='/usr/local/octave-3.0.xx.yy/bin/octave' を.bashrcに書き込みます。 ライブラリのコピーなど。この方法の利点は(もちろん欠点もありますが), アンインストールが/usr/local/octave-3.0.xx.yy をexplorer削除する だけでいいからです。 ソースのイメージを消しても同じprefixでconfigureして,make uninstall すればいいのですが面倒なので^^;。 無論これはoctaveのバージョンをいろいろ作成する人以外には面倒なので あまりすすめませんが。試験的にやるときにはいいですよ。
847 名前:octave for windowsメモの筆者 mailto:sage [2009/03/23(月) 12:55:45 ] ソースコードからコンパイルするときのヒント(メモ) (参考) Cygwinのソースパッケージを使わないというときは,下記の手順で,ソースコードを書き換えてください(バージョン 3.0.3 の場合) ですが 3.0.4のback portをするともっとシンプルです。 sparse-util.hの以下を extern OCTAVE_API void SparseCholError (int status, char *file, int line, char *message); extern OCTAVE_API int SparseCholPrint (const char *fmt, ...); ***** // FIXME this overload is here due to API change in SuiteSparse (3.1 -> 3.2) extern OCTAVE_API void SparseCholError (int status, char *file, int line, char *message); extern OCTAVE_API void SparseCholError (int status, const char *file, int line, const char *message); extern OCTAVE_API int SparseCholPrint (const char *fmt, ...); にします。ページに書かれている変更では,cygwinでは通りますが, mingwではとおりません。たぶん,3.0.4では私が今回書いたように変更された と思います。
848 名前:octave for windowsメモの筆者 mailto:sage [2009/03/23(月) 12:59:30 ] >>847 たぶん,3.0.4では私が今回書いたように変更された と思います。 は たぶん,コンパイラによっては,mingwのg++のようにcastが通らないものがある ので今回書いたように変更されたと思います。 です。すいません。<m(__)m>
849 名前:octave for windowsメモの筆者 mailto:sage [2009/03/23(月) 14:11:31 ] >>847 すいませんsparse-util.ccも書き直す必要があります。 SparseCholError (int status, char *file, int line, char *message) { (*current_liboctave_warning_handler)("warning %i, at line %i in file %s", status, line, file); (*current_liboctave_warning_handler)(message); } を // FIXME this overload is here due to API change in SuiteSparse (3.1 -> 3.2) void SparseCholError (int status, char *file, int line, char *message) { SparseCholError (status, file, line, message); } void SparseCholError (int status, const char *file, int line, const char *message) { (*current_liboctave_warning_handler)("warning %i, at line %i in file %s", status, line, file); (*current_liboctave_warning_handler)(message); } に変更が必要です。すいません。<m(__)m>
850 名前:octave for windowsメモの筆者 mailto:sage [2009/03/23(月) 15:20:12 ] >>770 TLA3.8.2を自分のコンピュータ用にcygwinでビルドしてこれをつかって, mingw-4.3.2-dw2-TDMでoctave-3.0.4RC3をビルドしたもの MFLOPS = 4830.2 cygwinでHT-pentiumでmulti-threadで効果があるか見てみました。 octave:6> n=2000; A=randn(n); B=randn(n);tic; C=A*B; t=toc, MFLOPS=2*n^3/t*1e-6 t = 3.8080 MFLOPS = 4201.7 ウーム。GotoBLASと同様にHyper Threadingでは,multithreadを使用しない ほうがいいようですね。物理的にコアが2つ以上ないとその威力は発揮 できないようです。 まあ,こういうのは試してみないとわからないもので,この記録はそれはそれ で意味があるのかなと思います。
851 名前:octave for windowsメモの筆者 mailto:sage [2009/03/24(火) 14:00:32 ] cygwinでビルドしてもgotoBLASでSegmentation faultがでました。:-( test_sparse.m ..........................................panic: Segmentation fault -- stopping myself... Segmentation fault GotoBLASの構築におかしなとこがあるのかなと思います。ウーム。
852 名前:Octave + GotoBLAS (Cygwin上) [2009/03/24(火) 23:25:00 ] octave for windowsメモの筆者様 845 から 850 まで.とても丁寧に見ていただいてありがとうございます. (近日中に,書き直ししたいと思っています.) 851 について.私の方では再現できないのですが, 133.5.18.167/rinkou/octave/57.png に,私の方での configure の結果を載せています.これが一致しているか否かで, 問題の切り分けができるかなあ,と思っています.(あまりお役に立てなくて済みません).
853 名前:名無しさん@お腹いっぱい。 [2009/03/26(木) 08:40:49 ] octave-3.0.4RC6がでました。グラフィックス周りのバグフィックスのようです。 controldemo(とういか制御系関数のバグ)のフィックスはなされていなかった ようですぐにパッチがでました。
854 名前:octave for windowsメモの筆者 mailto:sage [2009/03/26(木) 08:42:24 ] octave-3.0.4RC6がでました。グラフィックス周りのバグフィックスのようです。 controldemo(とういか制御系関数のバグ)のフィックスはなされていなかった ようですぐにパッチがでました。
855 名前:octave for windowsメモの筆者 mailto:sage [2009/03/26(木) 11:37:17 ] >>853 >>854 2重投稿すいません。なんかユーザ登録のエラーでて書き込みが できなかった見たいで<m(__)m>
856 名前:octave for windowsメモの筆者 mailto:sage [2009/03/26(木) 12:19:07 ] >>851 ,852 まあ,GotoBLASの再構築とか,ビルドの最適化オプションあてたりとか。 Macroさんのパッチをあてたりとかいろいろかえましたが同じ症状でますね。 どこが悪いかかは,分かりません。gdbでトレースしましたが,GotoBLAS自体 が私のCPUにたいして正常に動かないコードを発しているようです。 test_sparse.m .......................................... Program received signal SIGSEGV, Segmentation fault. 0x64aeda26 in zpotf2_ () zpotf2_はGotoBLASの中にあるので。 まあ,ATLASでもそこそこ性能だせるので,もうあがくのやめます(泣)。
857 名前:octave for windows メモの筆者 mailto:sage [2009/03/28(土) 10:35:59 ] 3.0.4RC7がでました。mingwとcygwinでテストし、報告しました。 今までずっと未解決だった問題は全てクリアされているようです。 unix系のplatformでも問題なく動いているようで、おそらくもうすぐ3.0.4の正式版のソースが出そうです。
858 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/29(日) 18:02:15 ] debianやubuntuって、octave3.0パッケージ導入して、atlasも導入してたら自動的にそっちを 使ってくれるんだね。Rも同様みたいですね。
859 名前:octave for windowsメモの筆者 mailto:sage [2009/03/30(月) 09:04:13 ] >>858 ウーム。さすがにUnixはちがいますね。ところでatlasは,ソースから自分の コンピュータにビルドですか。たしか,DebianだとそれぞれCPUに特化した atlasのバイナリあったような気がしているのですが気のせいですかね?
860 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/30(月) 09:30:24 ] >>859 そうみたいですよ。debianの派出したものがubuntuなのでそのまんま、同じことになってる ようです。 ただし、1cpuのみだろうと思う(未確認)なので、複数のcpuを使うときはソースをとってきて 自前でコンパイルしてパッケージで導入という流れなんだろうなと思ってます。
861 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/30(月) 09:32:15 ] あと、atlasは.debパッケージでバイナリ供給されています。
862 名前:octave for windowsメモの筆者 mailto:sage [2009/03/30(月) 15:57:47 ] >>860 multithreadのatlasは,pthread(posix thread)を使うのでptが ライブラリについています。libptf77blas.a libptcblas.a のように。 あとリンカにオプションで-lpthreadがついているかどうか。 でも,ダイナミックリンクだとライブラリの方にpthreadが取り込まれている かも知れませんが。
863 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/03/30(月) 16:13:20 ] >>862 atlasのライブラリを少し調べてみた(*1)けど、依存性にthreadライブラリは付いていない みたいでした。3.6.0を利用しているということで少々古いものなのかな。lennyのunstable ならoctaveも3.04 rc7みたいですが。 *1 packages.ubuntu.com/ja/intrepid/libs/libatlas3gf-sse2 *2 packages.debian.org/unstable/math/octave3.0
864 名前:octave for windowsメモの筆者 mailto:sage [2009/03/30(月) 18:00:05 ] >>863 3.6.0は古いですね。おそらく古いCPUならいいですが,GotoBLASでの 後藤先生のパワーポイントのファイルでATLAS 3.7.xxとGotoBLASの比較では GotoBLASがかなり速くなっていたんですが,Octave + GotoBLAS (Cygwin上) さんが >>828 で述べられているにATLAS3.8.3では差はそれほど大きくはありません。 やはりATLASは3.8.3で自分で作成されたほうがよいかと思います。 特にCore2DuoとかCore2Quadをお持ちならば。