RとGotoBLAS
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
COLOR(red){SIZE(25){RとGotoBLAS}}
#contents
*概要 [#m9553517]
現在, GotoBLASの開発は終了しており, TACCにあるバージョン...
昨年の暮れにTACCよりBSDにライセンスが変更されたのでこのバ...
追記:ずっとRCのままにして放置してあったのを, ちょこっと弄...
配布は, [[SurviveGotoBLAS2:http://prs.ism.ac.jp/~nakama/S...
ライセンスはAGPL-3です.
*Rユーザ向けの為の変な変更 [#ua69ddf0]
そのままでは一般の方には使いにくいので, いくつかの変更を...
ソースからビルドを行う方は, 以下のパラメータを指定しなけ...
また割と多くのアプリケーションでは, BLASとLAPACKのライブ...
これをビルド時に分割するように変更を加えました.
** REFBLAS_ANTILOGY=1 [#tf16ef47]
これはREFBLASの実装ではLAPACKに入ってるルーチンを一部Goto...
なのでこれをLAPACKのアーカイブに移すように指示します.
** NO_LAPACK=1 [#ec38c7d6]
GotoBLASではLAPACKルーチンの一部しか最適化されていないの...
オリジナルはwgetが必要でしたが, 無ければcurlやftp等あるも...
オリジナルはmd5も必要でしたが, これもopenssl md5も試すよ...
内部の計算機からnetlib.orgに繋げない方や, netlib.orgは時...
** NO_XERBLA = 1 [#fd9533c6]
これはxerblaをアプリケーション側で持っている場合で, リン...
例えば, OSXなどです.
** EXTERNAL_XERBLA_LIBNAME = R.dll [#cf4d6d20]
これはxerblaをアプリケーション側で持っている場合で, リン...
例えば, Windiwsなどです. 内部的には NO_XERBLA=1に設定して...
リンクします.
** LAPACK_VERSION = 3.1.1 ,3.2.1, 3.2.2, 3.3.0 or 3.3.1 (...
なんとなく作ってみました.
新しく増えたルーチンを使いたい場合等によいかも.
*各OS固有の情報 [#i906d6ed]
**Apple [#e9d88821]
***PowerPC [#yf88071a]
Rは倍精度ルーチンしか使わないので, 単精度ルーチンのaltive...
以前は問題がありましたが, 不具合は取れてると思います.
***Intel [#g02b2293]
大丈夫だと思います.
**AIX [#vcbc6281]
POWER4,5,6で動作を確認しています.
以前は問題がありましたが, 不具合は取れてると思います.
性能は1パッケージ(2CPU)までは出ますが, 3並列以上は全くリ...
正直, 電気代で巷に売られているパソコンのご購入をお勧めし...
**Solaris [#kef0f1fa]
Sparc64VIIでしか試してません.
SSLだと静的にしかビルド出来ませんし, Sunperf も含めてSPAR...
劇的に性能が劣化するので, GotoBLASは良い選択肢です.
**Linux [#n5ec4a86]
***PowerPC [#gff1db9f]
CPUのAffinityを設定可能にしましたが, NO_AFFINITY=1との違...
Appleと同じく, altivecは無効です.
***Intel [#tbf5e43a]
大丈夫だと思います.
AFFINITY(デフォルトは設定)を設定した場合は物理CPU数を得ま...
**Windows [#q0ecf427]
オリジナルには実装されていなかった, goto_set_num_threads,...
の関数を実装してあります.
CPU数は物理CPU数を得るようになっています.
*** x86 [#id3ca2d1]
現在のRは4byte境界で実行されているので, KATMAIでしか動き...
パッケージも全てgccであれば調整は可能ですが, そんな訳は無...
さっさと64bitにするべきです.
32bitでは例えNehalem(icore7)のCPUでもx86では動作するCore...
*** x64 [#rf5191b6]
大丈夫だと思います.
ただAVXには対応してませんが, Nehalemカーネルを選択するよ...
Rユーザであれば(所詮BLASの効果は限定的)問題なく利用できる...
*ソースからビルド方法 [#d75f07ea]
公開しているバイナリはBLASだけです. 一部最適化されたLAPAC...
以下のようにしてください.
ディレクトリのトップにquickbuild.osxRblasや, quickbuild.w...
とか, ファイルが置いてありますので, それを参考にしてくだ...
** Windows [#edfd4d7f]
libgfortranは静的にビルドされる筈です. Rtoolsでも大丈夫で...
現在手元の32bitのDLLWRAPが壊れているようなので32bitではビ...
make BINARY=64 \
CC=x86_64-w64-mingw32-gcc \
FC=x86_64-w64-mingw32-gfortran \
NUM_THREADS=24 NO_CBLAS=1 \
REFBLAS_ANTILOGY=1 \
DYNAMIC_ARCH=1 \
EXTERNAL_XERBLA_LIBNAME=R.dll \
GOTOBLASLIBDLLNAME=Rblas.dll \
GOTOLAPACKLIBDLLNAME=Rlapack.dll
** OSX [#j14cd91a]
quickbuild.osxRblasを参考にしてください.
LIBDYNNAMEはBLAS+LAPACK一体のファイル名なので, 分割する場...
GOTOBLASLIBDYNNAME=libRblas.0.dylib
GOTOLAPACKLIBDYNNAME=libRlapack.0.dylib
等としてビルドすると良いでしょう.
PPCTARGET=PPCG4 # or PPC970
mkdir ppc
mkdir i386
mkdir x86_64
make BINARY=32 CC="gcc -arch ppc" FC="gfortran -arch ...
TARGET=${PPCTARGET} \
NUM_THREADS=24 NO_CBLAS=1 REFBLAS_ANTILOGY=1 NO_...
GOTOBLASLIBDYNNAME=libRblas.0.dylib \
GOTOLAPACKLIBDYNNAME=libRlapack.0.dylib
cp exports/libRblas.0.dylib ppc
cp exports/libRlapack.0.dylib ppc
make clean
make BINARY=32 CC="gcc -arch i386" FC="gfortran -arch...
DYNAMIC_ARCH=1 \
NUM_THREADS=24 NO_CBLAS=1 REFBLAS_ANTILOGY=1 NO_...
GOTOBLASLIBDYNNAME=libRblas.0.dylib \
GOTOLAPACKLIBDYNNAME=libRlapack.0.dylib
cp exports/libRblas.0.dylib i386
cp exports/libRlapack.0.dylib i386
make clean
make BINARY=64 CC="gcc -arch x86_64" FC="gfortran -ar...
DYNAMIC_ARCH=1 \
NUM_THREADS=24 NO_CBLAS=1 REFBLAS_ANTILOGY=1 NO_...
GOTOBLASLIBDYNNAME=libRblas.0.dylib \
GOTOLAPACKLIBDYNNAME=libRlapack.0.dylib
cp exports/libRblas.0.dylib x86_64
cp exports/libRlapack.0.dylib x86_64
make clean
lipo -create -output libRblas.0.dylib \
-arch ppc ppc/libRblas.0.dylib \
-arch i386 i386/libRblas.0.dylib \
-arch x86_64 x86_64/libRblas.0.dylib
lipo -create -output libRlapack.0.dylib \
-arch ppc ppc/libRlapack.0.dylib \
-arch i386 i386/libRlapack.0.dylib \
-arch x86_64 x86_64/libRlapack.0.dylib
rm -rf ppc i386 x86_64
lipo -info libRblas.0.dylib
lipo -info libRlapack.0.dylib
あとはBLASの切り替えについてたしかドキュメントに書いてあ...
それを参考にして下さい.
*バイナリ [#o7dc4ce2]
BLASのみをビルドした
[[バイナリはこちらにあります:http://prs.ism.ac.jp/~nakama...
最新のMACはもって無いので動かしたことはないですが, たぶん...
Windowsはdllwrapの32bitが壊れていたので,32bit版は手元でビ...
そんなに変わらないので, 前のKATMAIのバイナリをおいてあり...
Windowsの64Bitの方は主にIntelの認識率を向上させました.
AVX以降のアーキテクチャはNeharemコアを使うようにしてあり...
なので, 前より早くなると思います.
*RからBLASの制御 [#b468bb5b]
CRANにある [[RhpcBLASctl:http://cran.r-project.org]]をイ...
$ R -q
> library(RhpcBLASctl)
> A<-matrix(runif(3e3^2),3e3,3e3)
> blas_get_num_procs()
[1] 1
> system.time(A%*%A)
user system elapsed
3.992 0.012 4.003
> blas_set_num_threads(get_num_cores())
> system.time(A%*%A)
user system elapsed
4.332 0.048 1.234
終了行:
COLOR(red){SIZE(25){RとGotoBLAS}}
#contents
*概要 [#m9553517]
現在, GotoBLASの開発は終了しており, TACCにあるバージョン...
昨年の暮れにTACCよりBSDにライセンスが変更されたのでこのバ...
追記:ずっとRCのままにして放置してあったのを, ちょこっと弄...
配布は, [[SurviveGotoBLAS2:http://prs.ism.ac.jp/~nakama/S...
ライセンスはAGPL-3です.
*Rユーザ向けの為の変な変更 [#ua69ddf0]
そのままでは一般の方には使いにくいので, いくつかの変更を...
ソースからビルドを行う方は, 以下のパラメータを指定しなけ...
また割と多くのアプリケーションでは, BLASとLAPACKのライブ...
これをビルド時に分割するように変更を加えました.
** REFBLAS_ANTILOGY=1 [#tf16ef47]
これはREFBLASの実装ではLAPACKに入ってるルーチンを一部Goto...
なのでこれをLAPACKのアーカイブに移すように指示します.
** NO_LAPACK=1 [#ec38c7d6]
GotoBLASではLAPACKルーチンの一部しか最適化されていないの...
オリジナルはwgetが必要でしたが, 無ければcurlやftp等あるも...
オリジナルはmd5も必要でしたが, これもopenssl md5も試すよ...
内部の計算機からnetlib.orgに繋げない方や, netlib.orgは時...
** NO_XERBLA = 1 [#fd9533c6]
これはxerblaをアプリケーション側で持っている場合で, リン...
例えば, OSXなどです.
** EXTERNAL_XERBLA_LIBNAME = R.dll [#cf4d6d20]
これはxerblaをアプリケーション側で持っている場合で, リン...
例えば, Windiwsなどです. 内部的には NO_XERBLA=1に設定して...
リンクします.
** LAPACK_VERSION = 3.1.1 ,3.2.1, 3.2.2, 3.3.0 or 3.3.1 (...
なんとなく作ってみました.
新しく増えたルーチンを使いたい場合等によいかも.
*各OS固有の情報 [#i906d6ed]
**Apple [#e9d88821]
***PowerPC [#yf88071a]
Rは倍精度ルーチンしか使わないので, 単精度ルーチンのaltive...
以前は問題がありましたが, 不具合は取れてると思います.
***Intel [#g02b2293]
大丈夫だと思います.
**AIX [#vcbc6281]
POWER4,5,6で動作を確認しています.
以前は問題がありましたが, 不具合は取れてると思います.
性能は1パッケージ(2CPU)までは出ますが, 3並列以上は全くリ...
正直, 電気代で巷に売られているパソコンのご購入をお勧めし...
**Solaris [#kef0f1fa]
Sparc64VIIでしか試してません.
SSLだと静的にしかビルド出来ませんし, Sunperf も含めてSPAR...
劇的に性能が劣化するので, GotoBLASは良い選択肢です.
**Linux [#n5ec4a86]
***PowerPC [#gff1db9f]
CPUのAffinityを設定可能にしましたが, NO_AFFINITY=1との違...
Appleと同じく, altivecは無効です.
***Intel [#tbf5e43a]
大丈夫だと思います.
AFFINITY(デフォルトは設定)を設定した場合は物理CPU数を得ま...
**Windows [#q0ecf427]
オリジナルには実装されていなかった, goto_set_num_threads,...
の関数を実装してあります.
CPU数は物理CPU数を得るようになっています.
*** x86 [#id3ca2d1]
現在のRは4byte境界で実行されているので, KATMAIでしか動き...
パッケージも全てgccであれば調整は可能ですが, そんな訳は無...
さっさと64bitにするべきです.
32bitでは例えNehalem(icore7)のCPUでもx86では動作するCore...
*** x64 [#rf5191b6]
大丈夫だと思います.
ただAVXには対応してませんが, Nehalemカーネルを選択するよ...
Rユーザであれば(所詮BLASの効果は限定的)問題なく利用できる...
*ソースからビルド方法 [#d75f07ea]
公開しているバイナリはBLASだけです. 一部最適化されたLAPAC...
以下のようにしてください.
ディレクトリのトップにquickbuild.osxRblasや, quickbuild.w...
とか, ファイルが置いてありますので, それを参考にしてくだ...
** Windows [#edfd4d7f]
libgfortranは静的にビルドされる筈です. Rtoolsでも大丈夫で...
現在手元の32bitのDLLWRAPが壊れているようなので32bitではビ...
make BINARY=64 \
CC=x86_64-w64-mingw32-gcc \
FC=x86_64-w64-mingw32-gfortran \
NUM_THREADS=24 NO_CBLAS=1 \
REFBLAS_ANTILOGY=1 \
DYNAMIC_ARCH=1 \
EXTERNAL_XERBLA_LIBNAME=R.dll \
GOTOBLASLIBDLLNAME=Rblas.dll \
GOTOLAPACKLIBDLLNAME=Rlapack.dll
** OSX [#j14cd91a]
quickbuild.osxRblasを参考にしてください.
LIBDYNNAMEはBLAS+LAPACK一体のファイル名なので, 分割する場...
GOTOBLASLIBDYNNAME=libRblas.0.dylib
GOTOLAPACKLIBDYNNAME=libRlapack.0.dylib
等としてビルドすると良いでしょう.
PPCTARGET=PPCG4 # or PPC970
mkdir ppc
mkdir i386
mkdir x86_64
make BINARY=32 CC="gcc -arch ppc" FC="gfortran -arch ...
TARGET=${PPCTARGET} \
NUM_THREADS=24 NO_CBLAS=1 REFBLAS_ANTILOGY=1 NO_...
GOTOBLASLIBDYNNAME=libRblas.0.dylib \
GOTOLAPACKLIBDYNNAME=libRlapack.0.dylib
cp exports/libRblas.0.dylib ppc
cp exports/libRlapack.0.dylib ppc
make clean
make BINARY=32 CC="gcc -arch i386" FC="gfortran -arch...
DYNAMIC_ARCH=1 \
NUM_THREADS=24 NO_CBLAS=1 REFBLAS_ANTILOGY=1 NO_...
GOTOBLASLIBDYNNAME=libRblas.0.dylib \
GOTOLAPACKLIBDYNNAME=libRlapack.0.dylib
cp exports/libRblas.0.dylib i386
cp exports/libRlapack.0.dylib i386
make clean
make BINARY=64 CC="gcc -arch x86_64" FC="gfortran -ar...
DYNAMIC_ARCH=1 \
NUM_THREADS=24 NO_CBLAS=1 REFBLAS_ANTILOGY=1 NO_...
GOTOBLASLIBDYNNAME=libRblas.0.dylib \
GOTOLAPACKLIBDYNNAME=libRlapack.0.dylib
cp exports/libRblas.0.dylib x86_64
cp exports/libRlapack.0.dylib x86_64
make clean
lipo -create -output libRblas.0.dylib \
-arch ppc ppc/libRblas.0.dylib \
-arch i386 i386/libRblas.0.dylib \
-arch x86_64 x86_64/libRblas.0.dylib
lipo -create -output libRlapack.0.dylib \
-arch ppc ppc/libRlapack.0.dylib \
-arch i386 i386/libRlapack.0.dylib \
-arch x86_64 x86_64/libRlapack.0.dylib
rm -rf ppc i386 x86_64
lipo -info libRblas.0.dylib
lipo -info libRlapack.0.dylib
あとはBLASの切り替えについてたしかドキュメントに書いてあ...
それを参考にして下さい.
*バイナリ [#o7dc4ce2]
BLASのみをビルドした
[[バイナリはこちらにあります:http://prs.ism.ac.jp/~nakama...
最新のMACはもって無いので動かしたことはないですが, たぶん...
Windowsはdllwrapの32bitが壊れていたので,32bit版は手元でビ...
そんなに変わらないので, 前のKATMAIのバイナリをおいてあり...
Windowsの64Bitの方は主にIntelの認識率を向上させました.
AVX以降のアーキテクチャはNeharemコアを使うようにしてあり...
なので, 前より早くなると思います.
*RからBLASの制御 [#b468bb5b]
CRANにある [[RhpcBLASctl:http://cran.r-project.org]]をイ...
$ R -q
> library(RhpcBLASctl)
> A<-matrix(runif(3e3^2),3e3,3e3)
> blas_get_num_procs()
[1] 1
> system.time(A%*%A)
user system elapsed
3.992 0.012 4.003
> blas_set_num_threads(get_num_cores())
> system.time(A%*%A)
user system elapsed
4.332 0.048 1.234
ページ名: