ATLAS+Rのビルド
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
COLOR(red){SIZE(25){ATLASとR のビルド}}
現在は[[ATLASを使いたい>Q&A (初級者コース)#ATLAS]]のサ...
気が付いた時点で追加、修正をしていきます~
というより、このあたりよく知っている方の修正を希望(2chで...
(R用?)ATLASのビルドに関する事項はこちらで情報交換しま...
#contents
~
#comment
*概観
マシン毎に最適化されたBLASを構築します最適化の対象としてC...
並列(スレッド)化を行います.並列化ATLASとRのプロファイリン...
不可である点に注意してください.
*ディストリビューション固有の情報
**debian
deb化されています.atlas3-sseなどCPU別のATLASをインストー...
Rをapt-getなりdpkgでインストールすれば何もせずともATLASを...
lam-mpi,snow,rmpi等と併用すると,「野良ビルド無し(apt-get...
の並列化が行えます.Rユーザには夢のディストリビューション...
ありません.
*xconfigのオプション指定
xconfigにオプションを指定することにより自動認識では無く指...
ATLASを構築可能です.たとえば,16CPU搭載マシンで16並列にし...
せんから,CPU数を4や8で構築したい場合があると思います.libg...
後に並列数の指定は出来ません.~
経験では並列度の効果はだいたい16で頭打ちになります.
小さな行列の存在なども考慮すれば2〜4,巨大なら8ぐらいがい...
ATLAS自体を動的共有化(.so)にして,LIBPATH,LD_LIBRARY_PATH...
を切替えて使うのもありかと思います.~
R+シングルATLASのプロファイリングで十分チューニングした後,~
並列化を行うのが吉かもしれません.~
Rで利用するには再配置可能なオブジェクトを生成する必要があ...
の方はなんとなくxconfig後にMake.hogeのファイルに-fPICを追...
思います.~
動的共有ライブラリ(.so)を作るには-fPIC(Intel系は全ての石...
xconfigを起動すると色々聞かれますが,きっと誰かが詳しく書...
じます.
$ ./xconfig --help
USAGE: ./xconfig [flags]
-A # : Set config mach to #
-C 'string' : Add string to CDEFS
-D # : Set various levels of what config wil...
0 : Create Make.ARCH and config logfiles ...
1 : Unpack & set arch defauls
2 : Create ARCH subdirectories
4 : Create the ATLrun shell script
8 : If needed, create winf77.exe
16 : Store the known L1 value
32 : Move the config logfiles to ARCH subdir
-N # : Set ncpu to #
-t <TOPdir> : Set TOPdir as indicated
-a <arch> : Set ARCH to <arch>
-b <1/blaslib> : Use this BLAS for BLASlib (1: search ...
-f <f77> : Use <f77> for F77
-c <CC> : Use <CC> for CC
-m <MM> : Use <MM> for MCC
-g <gcc> : Use <gcc> for gcc
-x <XCC> : Use <XCC> for XCC
-F [c,f,m,x] '<flags>': set the indicated compiler flags
NOTE: If a compiler is specified without flags, ATLAS wi...
appropriate flags. This is the recommended way to ...
a non-default supported compiler.
*make install arch=xxxx
できあがると,
| | 本体 | fortran用 | C用 |
|シングルスレッド版 | | libf77blas |libcblas |
|マルチスレッド版 | | libptf77blas|libptcblas|
|本体 |libatlas | | |
が出来ます.
良く分からない人は 各.aファイルを /usr/local/libに入れて...
ATLASを使う場合、(--with-blasのオプション)
# シングルスレッド版
-L/usr/local/lib -lf77blas -latlas
# マルチスレッド版
-L/usr/local/lib -lptf77blas -lpthread -latlas
^^ ^^^^^^^^^
がリンク時に最低限必要となります.
*ATLASとCompiler
**IntelCompiler
IA32では,FTZ (Flush-to-Zero) モードや DAZ (Denormals-are-...
が設定できて,Ver8.1以降ではIntelCPUならデフォルト(-O0以外...
この影響はlibimf(-lmの代わり)にも顕著に表れて,
例えば,
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#ifdef __INTEL_COMPILER
#include <xmmintrin.h>
#include <pmmintrin.h>
#endif
#define XPRINT(x) printf(#x "=%x\n", x )
#define GPRINT(x) printf(#x "=%g\n", x )
main()
{
double d_2e_308 = 2e-308;
printf("current\n");
GPRINT(log(d_2e_308));
#ifdef __INTEL_COMPILER
XPRINT(_MM_GET_FLUSH_ZERO_MODE());
XPRINT(_MM_GET_DENORMALS_ZERO_MODE());
_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_OFF);
_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_OFF);
printf("seting\n");
GPRINT(log(d_2e_308));
XPRINT(_MM_GET_FLUSH_ZERO_MODE());
XPRINT(_MM_GET_DENORMALS_ZERO_MODE());
#endif
}
なども、素敵な値を返してくれます.ただし,AMDのCPUではFTZ,D...
くれないので安全な値が帰ります.:-)
Rで利用するなら,
http://www.nakama.ne.jp/memo/ia32_linux/R-2.1.1.iccftzdaz...
などを当てないと,make check は通らないでしょう.
**gcc
だいたい大丈夫です.
**xlc
たぶん(?)大丈夫です.# メジャーな環境では無いので
*Tips
-作成された「.a」をパスの通っているディレクトリへ、コピー
--パスの通ったディレクトリとありますが(ライブラリの検索は...
-./configure --with-blas='-L/usr/local/lib -lf77blas -lat...
-動的共有ライブラリを作るなら,Makefile内にatlas.soの作り...
-動的共有ライブラリを使う場合は,/etc/ld.so.confに格納場所...
-R の configure スクリプトは単に sgemm_ をリンクできるか...
-ついでに config.log の該当部分を書き写してくれると一発で...
* Linux
**X86
-ATLAS
make
make install arch=***** # rootである必要はありません
-R
./configure --with-blas='-L/usr/local/lib -lf77blas -lat...
#comment
**Xeon3.2GHz×2(1)
-atlas3.6.0(stable)
-なのに、なぜかCPU一個しか使わない設定でコンパイルしてま...
-(なぜかCPUに負荷をかけないとコンパイルが正常に終了しま...
-メモリ2Gbyte
-Red Hat Enterprise Linux WS release 3 (Taroon) Kernel 2....
-ATLAS
# xconfigで識別出来なかった場合はUNKNOWNなCPUとして扱わ...
# このため、適切なパラメータを得るためビルドには相当時間...
make install arch=Linux_UNKNOWNSSE2
-R
./configure --with-blas="-L/usr/lib -lf77blas -latlas"
-結果
--test2関数
test2 <- function ( n=500 )
{
A<-array(rnorm(n^2), dim=c(n,n))
B<-array(rnorm(n^2), dim=c(n,n))
C<-array(rnorm(n^2), dim=c(n,n))
D<-array(rnorm(n^2), dim=c(n,n))
BA <- B%*%A
return (system.time(A%*%solve(t(BA)%*%BA+C)%*%BA%*%D ))
}
--導入前
> test2()
[1] 2.24 0.08 2.33 0.00 0.00
> test2()
[1] 2.26 0.06 2.33 0.00 0.00
> test2()
[1] 2.27 0.05 2.32 0.00 0.00
--導入後
> test2()
[1] 0.46 0.07 0.54 0.00 0.00
> test2()
[1] 0.45 0.06 0.51 0.00 0.00
> test2()
[1] 0.43 0.05 0.48 0.00 0.00
~
#comment
**Xeon3.2GHz×2(2)
-atlas3.7.10 Developer (unstable)
-stableだと、CPU2個使う設定で、コンパイルができませんで...
-メモリ2Gbyte
-Red Hat Enterprise Linux WS release 3 (Taroon) Kernel 2....
-ATLAS
make xconfig
./xconfig -F f '-fomit-frame-pointer -O3 -funroll-all-lo...
-F c '-fomit-frame-pointer -O3 -funroll-all-lo...
-F m '-fomit-frame-pointer -O -fPIC'
make install arch=Linux_P4ESSE3_2
cp lib/Linux_P4ESSE3_2/libatlas.a /usr/lib
cp lib/Linux_P4ESSE3_2/libptf77blas.a /usr/lib
--P4として、認識されています
-R
./configure --disable-R-profiling --with-blas='-L/usr/lo...
make
make check
make install #rootで
-結果
> test2()
[1] 0.13 0.04 0.43 0.33 0.02
> test2()
[1] 0.11 0.06 0.43 0.34 0.02
> test2()
[1] 0.16 0.02 0.42 0.30 0.05
--先の結果より気持ち早くなっています。2個使う設定のため...
**Opteron×2
-ATLAS
make xconfig
./xconfig -F f '-fomit-frame-pointer -O -m64 -fPIC' ?
-F c '-fomit-frame-pointer -O -mfpmath=387 -m6...
-F m '-fomit-frame-pointer -O -mfpmath=387 -m6...
make install arch=Linux_HAMMER64SSE2_2 # rootである必要...
-R (ATLASのスレッドとR-profilingは不仲!)
./configure --disable-R-profiling --with-blas='-L/usr/lo...
-導入前は、大体4−5秒かかっていたのが
> test2()
[1] 0.76 0.05 0.57 0.00 0.00
> test2()
[1] 0.75 0.07 0.58 0.00 0.00
> test2()
[1] 0.75 0.06 0.56 0.00 0.00
#comment
* Solaris
* FreeBSD
**x86
ATLAS、R共にportsから導入可能。ただし、ATLASは2次キャッシ...
ANSWER_i386?= ${PRINTF} "\n\n\n\n\n\n\n\n\n\n"
を
ANSWER_i386?= ${PRINTF} "\n\n\n\n512\n\n\n\n\n\n"
などとする(2次キャッシュ512KBの場合)。portsからインストー...
Rは標準では通常のBLASを利用するようになっています。ports...
make WITH_ATLAS=yes all install clean
ちなみに、FreeBSD portsから導入できるATLASにはmath/atlas(...
* Windows
* Mac
PowerBook G4 (1.25GHz) 、OSX10.4.1上でATLAS、LAPACK( http...
コンパイラは、Apple製gcc 4.0.0(20041026)、g77 3.4.3(fink)...
-O3 -I/sw/include -I/usr/local/include -mcpu=7450 -falti...
としています。
コンパイルは以下のように行いました:
LDFLAGS="-lcc_dynamic" ./configure --with-blas --with-l...
"--with-lapack"オプションに-lcblasを付加したのは、途中でc...
Mac OSXでg77を使う場合に頻発するrestFP/saveFP問題
( http://www.astro.gla.ac.uk/users/norman/note/2004/restF...
を考慮しています。この辺の事情は疎いので、ご存知の方がい...
あとは、make; sudo make installすれば問題なくATLASを使っ...
以下は、vecLib版RとATLAS版Rの簡単素朴な性能比較です:
## mは1000x1000行列
## vecLib版R
> system.time(m%*%m)
[1] 1.58 0.05 1.92 0.00 0.00
> system.time(svd(m))
[1] 24.96 0.95 34.18 0.00 0.00
## ATLAS版R
> system.time(m%*%m)
[1] 1.69 0.07 1.81 0.00 0.00
> system.time(svd(m))
[1] 19.73 0.93 22.74 0.00 0.0
#comment
終了行:
COLOR(red){SIZE(25){ATLASとR のビルド}}
現在は[[ATLASを使いたい>Q&A (初級者コース)#ATLAS]]のサ...
気が付いた時点で追加、修正をしていきます~
というより、このあたりよく知っている方の修正を希望(2chで...
(R用?)ATLASのビルドに関する事項はこちらで情報交換しま...
#contents
~
#comment
*概観
マシン毎に最適化されたBLASを構築します最適化の対象としてC...
並列(スレッド)化を行います.並列化ATLASとRのプロファイリン...
不可である点に注意してください.
*ディストリビューション固有の情報
**debian
deb化されています.atlas3-sseなどCPU別のATLASをインストー...
Rをapt-getなりdpkgでインストールすれば何もせずともATLASを...
lam-mpi,snow,rmpi等と併用すると,「野良ビルド無し(apt-get...
の並列化が行えます.Rユーザには夢のディストリビューション...
ありません.
*xconfigのオプション指定
xconfigにオプションを指定することにより自動認識では無く指...
ATLASを構築可能です.たとえば,16CPU搭載マシンで16並列にし...
せんから,CPU数を4や8で構築したい場合があると思います.libg...
後に並列数の指定は出来ません.~
経験では並列度の効果はだいたい16で頭打ちになります.
小さな行列の存在なども考慮すれば2〜4,巨大なら8ぐらいがい...
ATLAS自体を動的共有化(.so)にして,LIBPATH,LD_LIBRARY_PATH...
を切替えて使うのもありかと思います.~
R+シングルATLASのプロファイリングで十分チューニングした後,~
並列化を行うのが吉かもしれません.~
Rで利用するには再配置可能なオブジェクトを生成する必要があ...
の方はなんとなくxconfig後にMake.hogeのファイルに-fPICを追...
思います.~
動的共有ライブラリ(.so)を作るには-fPIC(Intel系は全ての石...
xconfigを起動すると色々聞かれますが,きっと誰かが詳しく書...
じます.
$ ./xconfig --help
USAGE: ./xconfig [flags]
-A # : Set config mach to #
-C 'string' : Add string to CDEFS
-D # : Set various levels of what config wil...
0 : Create Make.ARCH and config logfiles ...
1 : Unpack & set arch defauls
2 : Create ARCH subdirectories
4 : Create the ATLrun shell script
8 : If needed, create winf77.exe
16 : Store the known L1 value
32 : Move the config logfiles to ARCH subdir
-N # : Set ncpu to #
-t <TOPdir> : Set TOPdir as indicated
-a <arch> : Set ARCH to <arch>
-b <1/blaslib> : Use this BLAS for BLASlib (1: search ...
-f <f77> : Use <f77> for F77
-c <CC> : Use <CC> for CC
-m <MM> : Use <MM> for MCC
-g <gcc> : Use <gcc> for gcc
-x <XCC> : Use <XCC> for XCC
-F [c,f,m,x] '<flags>': set the indicated compiler flags
NOTE: If a compiler is specified without flags, ATLAS wi...
appropriate flags. This is the recommended way to ...
a non-default supported compiler.
*make install arch=xxxx
できあがると,
| | 本体 | fortran用 | C用 |
|シングルスレッド版 | | libf77blas |libcblas |
|マルチスレッド版 | | libptf77blas|libptcblas|
|本体 |libatlas | | |
が出来ます.
良く分からない人は 各.aファイルを /usr/local/libに入れて...
ATLASを使う場合、(--with-blasのオプション)
# シングルスレッド版
-L/usr/local/lib -lf77blas -latlas
# マルチスレッド版
-L/usr/local/lib -lptf77blas -lpthread -latlas
^^ ^^^^^^^^^
がリンク時に最低限必要となります.
*ATLASとCompiler
**IntelCompiler
IA32では,FTZ (Flush-to-Zero) モードや DAZ (Denormals-are-...
が設定できて,Ver8.1以降ではIntelCPUならデフォルト(-O0以外...
この影響はlibimf(-lmの代わり)にも顕著に表れて,
例えば,
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#ifdef __INTEL_COMPILER
#include <xmmintrin.h>
#include <pmmintrin.h>
#endif
#define XPRINT(x) printf(#x "=%x\n", x )
#define GPRINT(x) printf(#x "=%g\n", x )
main()
{
double d_2e_308 = 2e-308;
printf("current\n");
GPRINT(log(d_2e_308));
#ifdef __INTEL_COMPILER
XPRINT(_MM_GET_FLUSH_ZERO_MODE());
XPRINT(_MM_GET_DENORMALS_ZERO_MODE());
_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_OFF);
_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_OFF);
printf("seting\n");
GPRINT(log(d_2e_308));
XPRINT(_MM_GET_FLUSH_ZERO_MODE());
XPRINT(_MM_GET_DENORMALS_ZERO_MODE());
#endif
}
なども、素敵な値を返してくれます.ただし,AMDのCPUではFTZ,D...
くれないので安全な値が帰ります.:-)
Rで利用するなら,
http://www.nakama.ne.jp/memo/ia32_linux/R-2.1.1.iccftzdaz...
などを当てないと,make check は通らないでしょう.
**gcc
だいたい大丈夫です.
**xlc
たぶん(?)大丈夫です.# メジャーな環境では無いので
*Tips
-作成された「.a」をパスの通っているディレクトリへ、コピー
--パスの通ったディレクトリとありますが(ライブラリの検索は...
-./configure --with-blas='-L/usr/local/lib -lf77blas -lat...
-動的共有ライブラリを作るなら,Makefile内にatlas.soの作り...
-動的共有ライブラリを使う場合は,/etc/ld.so.confに格納場所...
-R の configure スクリプトは単に sgemm_ をリンクできるか...
-ついでに config.log の該当部分を書き写してくれると一発で...
* Linux
**X86
-ATLAS
make
make install arch=***** # rootである必要はありません
-R
./configure --with-blas='-L/usr/local/lib -lf77blas -lat...
#comment
**Xeon3.2GHz×2(1)
-atlas3.6.0(stable)
-なのに、なぜかCPU一個しか使わない設定でコンパイルしてま...
-(なぜかCPUに負荷をかけないとコンパイルが正常に終了しま...
-メモリ2Gbyte
-Red Hat Enterprise Linux WS release 3 (Taroon) Kernel 2....
-ATLAS
# xconfigで識別出来なかった場合はUNKNOWNなCPUとして扱わ...
# このため、適切なパラメータを得るためビルドには相当時間...
make install arch=Linux_UNKNOWNSSE2
-R
./configure --with-blas="-L/usr/lib -lf77blas -latlas"
-結果
--test2関数
test2 <- function ( n=500 )
{
A<-array(rnorm(n^2), dim=c(n,n))
B<-array(rnorm(n^2), dim=c(n,n))
C<-array(rnorm(n^2), dim=c(n,n))
D<-array(rnorm(n^2), dim=c(n,n))
BA <- B%*%A
return (system.time(A%*%solve(t(BA)%*%BA+C)%*%BA%*%D ))
}
--導入前
> test2()
[1] 2.24 0.08 2.33 0.00 0.00
> test2()
[1] 2.26 0.06 2.33 0.00 0.00
> test2()
[1] 2.27 0.05 2.32 0.00 0.00
--導入後
> test2()
[1] 0.46 0.07 0.54 0.00 0.00
> test2()
[1] 0.45 0.06 0.51 0.00 0.00
> test2()
[1] 0.43 0.05 0.48 0.00 0.00
~
#comment
**Xeon3.2GHz×2(2)
-atlas3.7.10 Developer (unstable)
-stableだと、CPU2個使う設定で、コンパイルができませんで...
-メモリ2Gbyte
-Red Hat Enterprise Linux WS release 3 (Taroon) Kernel 2....
-ATLAS
make xconfig
./xconfig -F f '-fomit-frame-pointer -O3 -funroll-all-lo...
-F c '-fomit-frame-pointer -O3 -funroll-all-lo...
-F m '-fomit-frame-pointer -O -fPIC'
make install arch=Linux_P4ESSE3_2
cp lib/Linux_P4ESSE3_2/libatlas.a /usr/lib
cp lib/Linux_P4ESSE3_2/libptf77blas.a /usr/lib
--P4として、認識されています
-R
./configure --disable-R-profiling --with-blas='-L/usr/lo...
make
make check
make install #rootで
-結果
> test2()
[1] 0.13 0.04 0.43 0.33 0.02
> test2()
[1] 0.11 0.06 0.43 0.34 0.02
> test2()
[1] 0.16 0.02 0.42 0.30 0.05
--先の結果より気持ち早くなっています。2個使う設定のため...
**Opteron×2
-ATLAS
make xconfig
./xconfig -F f '-fomit-frame-pointer -O -m64 -fPIC' ?
-F c '-fomit-frame-pointer -O -mfpmath=387 -m6...
-F m '-fomit-frame-pointer -O -mfpmath=387 -m6...
make install arch=Linux_HAMMER64SSE2_2 # rootである必要...
-R (ATLASのスレッドとR-profilingは不仲!)
./configure --disable-R-profiling --with-blas='-L/usr/lo...
-導入前は、大体4−5秒かかっていたのが
> test2()
[1] 0.76 0.05 0.57 0.00 0.00
> test2()
[1] 0.75 0.07 0.58 0.00 0.00
> test2()
[1] 0.75 0.06 0.56 0.00 0.00
#comment
* Solaris
* FreeBSD
**x86
ATLAS、R共にportsから導入可能。ただし、ATLASは2次キャッシ...
ANSWER_i386?= ${PRINTF} "\n\n\n\n\n\n\n\n\n\n"
を
ANSWER_i386?= ${PRINTF} "\n\n\n\n512\n\n\n\n\n\n"
などとする(2次キャッシュ512KBの場合)。portsからインストー...
Rは標準では通常のBLASを利用するようになっています。ports...
make WITH_ATLAS=yes all install clean
ちなみに、FreeBSD portsから導入できるATLASにはmath/atlas(...
* Windows
* Mac
PowerBook G4 (1.25GHz) 、OSX10.4.1上でATLAS、LAPACK( http...
コンパイラは、Apple製gcc 4.0.0(20041026)、g77 3.4.3(fink)...
-O3 -I/sw/include -I/usr/local/include -mcpu=7450 -falti...
としています。
コンパイルは以下のように行いました:
LDFLAGS="-lcc_dynamic" ./configure --with-blas --with-l...
"--with-lapack"オプションに-lcblasを付加したのは、途中でc...
Mac OSXでg77を使う場合に頻発するrestFP/saveFP問題
( http://www.astro.gla.ac.uk/users/norman/note/2004/restF...
を考慮しています。この辺の事情は疎いので、ご存知の方がい...
あとは、make; sudo make installすれば問題なくATLASを使っ...
以下は、vecLib版RとATLAS版Rの簡単素朴な性能比較です:
## mは1000x1000行列
## vecLib版R
> system.time(m%*%m)
[1] 1.58 0.05 1.92 0.00 0.00
> system.time(svd(m))
[1] 24.96 0.95 34.18 0.00 0.00
## ATLAS版R
> system.time(m%*%m)
[1] 1.69 0.07 1.81 0.00 0.00
> system.time(svd(m))
[1] 19.73 0.93 22.74 0.00 0.0
#comment
ページ名: