Last modified 7 years ago Last modified on 02/18/09 23:57:58

行列計算で利用する CLAPACK および ATLAS の構築方法

MISTで行列計算(基本演算以外の固有値の計算など)には,netlib で公開されている CLAPACK (Linear Algebra Package) ライブラリが必要となります. ここでは,CLAPACK ライブラリの構築方法を説明します. また,CLAPACK は各CPU毎に最適化された ATLAS を利用することで,非常に高速に計算することができるようになります. MISTでは,基本的には CLAPACK のみあればよいので,さらに高速な計算をしたい人のみ ATLAS を利用してください.

ATLASを利用しない場合の LAPACK 構築手順

とりあえず,CLAPACK の構築手順を説明します. まず,CLAPACK から clapack.tgz をダウンロードしてきます. これは,UNIX とか LINUX とか CYGWIN 用のパッケージで,Windows+VC って言う方は CLAPACK3-Windows.zip を落としてください.

まず,Windows+VC の場合は,CLAPACK3-Windows.zip を解凍してでてきたプロジェクトファイル dsw を開き,libF77 blas clapack を順番にビルドします.そして作成された libI77.lib libF77.lib blas.lib clapack.lib を適当なフォルダにコピーし,VCにパスを通せばOKです.

次に,UNIX系の場合は clapack.tgz を解凍して,INSTALLフォルダの中にある各OSにあった make.inc.[OS名] (CYGWINの場合は make.inc.LINUX を利用する)を解凍後の一番上のフォルダにコピーします.あとはビルドすればOK.LINUXの場合は,

tar xvfz clapack.tgz
 ...
ファイルが解凍される
 ...
cd CLAPACK
cp INSTALL/make.inc.LINUX ./make.inc
make f2clib
make blaslib
make lapacklib

の順番にコマンドを実行すればOKです. あとは,作成されたライブラリをどっかのパスにコピーして利用してください.

以上で作成されたライブラリ libI77.a libF77.a lapack_LINUX.a blas_LINUX.a がLAPACKライブラリ集になります. 作成されたライブラリの名前を lapack_LINUX.a から liblapack.ablas_LINUX.a から libblas.a に変更してください. コンパイル時には -llapack -lblas -lI77 -lF77 をリンク時に指定してください(リンクする順番は重要です).

ATLASを利用する場合の LAPACK 構築手順

Linux および Unix で利用する場合

まず,ATLAS の構築手順を説明します. まず,ATLAS からATLAS (基本的にはstableの利用をお勧めします,現時点では3.6.0が最新の安定板になります) のソースatlas3.6.0.tar.bz2 をダウンロードしてきます. 適当なフォルダに解凍して,展開された ATLAS フォルダに入ります. 以下の手順は,コンパイラにGCCを利用しているものとして話を進めます.

ATLASのCPU毎の最適化設定

まず,ATLAS フォルダで make を実行する

020 ← これ
019
018
017
016
015
014
013
012
011
010
009
008
007
006
005
004
003
002
001
Enter number at top left of screen [0]:

と表示されるので,画面の一番左上に見える数字(ここでは20)入力します. そうすると,次に

===============================================================================
                                  IMPORTANT
===============================================================================
Before going any further, check
   http://math-atlas.sourceforge.net/errata.html
This is the ATLAS errata file, which keeps a running count of all known
ATLAS bugs and system problems, with associated workarounds or fixes.
IF YOU DO NOT CHECK THIS FILE, YOU MAY BE COMPILING A LIBRARY WITH KNOWN BUGS.

Have you scoped the errata file? [y]:

と聞いていますので,デフォルトのままリターンキーを押します.

Configure will ask a series of questions, in one of two forms.  The first form
of question is a menu of choices.  One option in almost all menus is
'Other/UNKNOWN'.  If you are unsure of the answer, always choose this option.
The second form of question is a single line, with a default answer shown in
square braces.  If you hit return without typing anything, this default answer
will be used.  Again, if you are unsure of the answer, simply accept the
default.

ATLAS can detect almost everything it needs to know, so choosing the default
or 'Other/UNKNOWN' will at worst simply extend the install time (if you tell
config the answer to something ATLAS can skip some tests).

Configure makes no changes to the state of things until all questions have
been asked and answered.  Therefore, if you get confused and want to start
over, feel free to break out of this program (CTRL-C, CTRL-BREAK, etc)
and start again.  Alternatively, if you make a mistake you can finish the
configure process, and then edit the created make include file by hand to fix
the mistake manually (the name and location of this file will be printed
out at the end of configure).

If you have problems during configure or installation, consult the file
'ATLAS/README/TroubleShoot.txt'.

Are you ready to continue? [y]:

と聞いていますので,デフォルトのままリターンキーを押します.

Probing to make operating system determination:
Operating system configured as Linux

Probing for architecture:
Enter your machine type:
   1. Other/UNKNOWN
   2. AMD Athlon
   3. 32 bit AMD Hammer
   4. 64 bit AMD Hammer
   5. Pentium PRO
   6. Pentium II
   7. Pentium III
   8. Pentium 4
Enter machine number [1]:

次に,構築するATLASライブラリをどのCPU向けに最適化するかということを聞いてきます. ここでは,make を実行している計算機が搭載しているCPUを入力してあげてください.

ATLAS can provide SMP support for the Level 3 BLAS via Posix threads.
If you choose to build a threaded library, ATLAS will compile all
aspects of the library (including the serial components) with the
threaded compiler/link flags.  Most machines can use the serial
library even when it is compiled with threaded options, but this
is not guaranteed to work, so if you want a true serial library,
answer no to threading below.

enable Posix threads support? [y]:

そして,スレッドサポートを追加するかどうか聞いてきます. なので,マルチスレッド版のライブラリを作るときは y を入力し,そうでないばあいは n を入力します.

ATLAS has default parameters for OS='Linux' and system='P4'.
If you want to just trust these default values, you can use express setup,
drastically reducing the amount of questions you are required to answer

use express setup? [y]:

ATLASの最適化パラメータにデフォルト値を使うかどうかを聞いてくるので,普通は y を入力してください.

You need to choose a name which represents this architecture (eg. UltraSparc,
Dec21164, etc).  Do not use a generic name (eg. solaris, linux), which might
apply to different  hardware.  This architecture name will be appended to the
name of the created make include file, and appear in all subdirectories, so
don't make it longer than you like to type.  The name should follow the rules
for file names (so don't use punctuation and spaces, for instance).

Enter Architecture name (ARCH) [Linux_P4SSE2_4]:

次に,今回のATLAS構築に関する設定に名前をつける必要があります. 特に必要がなければそのままで大丈夫です. ただし,この名前が後で必要となるので覚えておいてください(ここでは Linux_P4SSE2_4).

This next value is the size, in kilobytes, that ATLAS must read/write in order
to completely flush your largest cache.  ATLAS will flush this much memory
between timing calls, in order to ensure timings are not inflated by
cache preloading.  A safe maximum is usually twice the size of your actual
largest cache size.  If you do not know the size of your largest cache,
a maximum value is fine.  The only drawback to making this value large
is that it requires more memory to do timings, and may slow down
the install process (if you have only a small amount of memory, it can also
invalidate the timings by causing the timers to swap).  The default given
below is ATLAS's idea of either the maximum cache your system could have, or
the maximum ATLAS believes it is safe to flush.  If you are certain that
your largest cache is smaller than the default given below, expedite the
install by changing it.  If you are certain you have enough memory to
support the necessary memory demands without swapping, and the value
is not twice the size of your largest cache, increase it.  Otherwise, just
hit enter to continue.

Enter Maximum cache size (KB) [512]:

次にCPUのキャッシュサイズを聞いてくるので,適切なサイズを入力します. わからなければ,デフォルトのままで大丈夫です.

The ATLAS install process is heavily file-based, and this can cause major
reliability problems when interacting with an overloaded or malfunctioning
remotely mounted filesystem.  ATLAS therefore has a mechanism in place to
allow for a delay before a file is declared to not be there, so that
slow NFS (i.e., waiting for amd timout) problems can be overcome, or for
handling slightly differing clocks between server/client.  This problem is
magnified if doing cross-compilation.  In the question below, we ask how
much of a delay, in seconds, ATLAS should tolerate between file creation
and appearance.  If you are installing on a local filesystem (eg. /tmp) or
a smooth-running NFS system, answer 0; for a moderately loaded NFS server, you
may want a value in the 10 second range, and for cross-compiling systems or
NFS servers experiencing errors, you may want to go as high as a couple
of minutes (120).
Enter File creation delay in seconds [0]:

ここも,基本的にデフォルトのままで大丈夫です.

The ATLAS team has provided a default install for your architecture.  If you
want, these default values can be used, and ATLAS can skip most of the search
for your machine.  This will greatly decrease the amount of time required for
the install, allow you to take advantage of any special features found by the
ATLAS team, and provide protection against install miscues caused by unreliable
timing results, assuming you really have the machine ATLAS thinks you have.  If
your machine is non-standard in some way, or you just want to see the ATLAS
search for yourself, you should answer no to the following question.  Otherwise,
it is highly recommended to accept the default of yes.

Use supplied default values for install? [y]:

ATLASのパラメータを触るのは大変なので,ここはデフォルトのまま y にしましょう.

Configuration completed successfully.  You may want to examine the make include
file (Make.Linux_P4SSE2_4) for accuracy before starting the install with the command:
   ''make install arch=Linux_P4SSE2_4'' ← このコマンドを覚える

最後に,こんな文が表示されてATLASのコンパイル設定が終了します.

コンパイルの開始

先ほどの手順で,設定ファイルに名前を付けたと思います(今回は Linux_P4SSE2_4). これを使って,次のようにコマンドを実行します.

make install arch=Linux_P4SSE2_4

あとは,自動的に最適化されたATLASライブラリが,

ATLASのトップフォルダ/lib/設定ファイル名/

の下に,

libatlas.a  libcblas.a  libf77blas.a  liblapack.a  libptcblas.a  libptf77blas.a  libtstatlas.a

作成されたライブラリが格納されるので,適切なフォルダにコピーして利用します. また,Pentium4用に最適化されたATLASはPentiumIIIでは動作しない可能性がある(SSE2を利用している関係上)ため,PentiumIIIで利用したい場合は,PentiumIII用のライブラリを別途用意してください.

  • LAPACKライブラリの構築手順

次に,CLAPACK の構築手順を説明します. まず,CLAPACK から clapack.tgz をダウンロードしてきます. 次に,UNIX系の場合は clapack.tgz を解凍して,INSTALLフォルダの中にある各OSにあった make.inc.[OS名] (CYGWINの場合は make.inc.LINUX を利用する)を解凍後の一番上のフォルダにコピーします. そして,次の手順でビルドを行います. ATLASを利用しない場合の手順との違いは,cblaswrap を作成し,blaslib を作成しないという点だけです.

tar xvfz clapack.tgz
 ...
ファイルが解凍される
 ...
cd CLAPACK
cp INSTALL/make.inc.LINUX ./make.inc
make f2clib
make blaswraplib
make lapacklib

の順番にコマンドを実行すればOKです. あとは,作成されたライブラリをどっかのパスにコピーして利用してください.

最後に

MISTで必要となるライブラリセットを作成します. 適当なフォルダを作成し以下のファイルをコピーします. まず,ATLAS側から liblapack.alibatlas.alibcblas.a. 次に,CLAPACK側から liblapack_[OS名].alibcblaswr.alibF77.a ここで,ATLASをコンパイルした際にも lapack.a が作成されています. これは,CLAPACKライブラリ中の一部のルーチンをATLAS側で最適化しなおしたものが含まれているためです. そこで,CLAPACKが作成した liblapack.a をくっつける操作を以下の手順で行います.

mkdir tmp
cd tmp
ar x ../liblapack.a
mv -f ../lapack_[OS名].a ../liblapack.a
ar r ../liblapack.a *.o
cd ..
rm -rf tmp

以上で作成されたライブラリ libI77.a libF77.a libatlas.a libcblas.a libcblaswr.a liblapack.a がLAPACKライブラリ集になります. コンパイル時には -llapack -lcblaswr -lcblas -latlas -lF77 -lI77 をリンク時に指定してください(リンクする順番は重要です).

LAPACKライブラリの作り方がわからない人へ

MISTプロジェクトチームのほうで,あらかじめビルドした LAPACK ライブラリを用意しました. 各環境で,ライブラリが異なるので,自分の環境に合ったものを落としていってください. 落とした後は,適宜パスの通ったところに保存してください.

コンパイラ 日時 ファイル
Visual C++ 2004/07/20 Lapack-VC.zip
GCC LINUX 2004/07/20 Lapack-gcc-LINUX.tar.bz2

ATLAS + LAPACKライブラリの作り方がわからない人へ

ATLAS のライセンス

 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *   1. Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions, and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *   3. The name of the ATLAS group or the names of its contributers may
 *      not be used to endorse or promote products derived from this
 *      software without specific written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ATLAS GROUP OR ITS CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.

コンパイル済み ATLAS + LAPACK

MISTプロジェクトチームのほうで,あらかじめビルドした ATLASLAPACK ライブラリを用意しました. 各環境で,ライブラリが異なるので,自分の環境に合ったものを落としていってください. 落とした後は,適宜パスの通ったところに保存してください.

コンパイラ CPU 日時 ファイル
Visual C++ Pentium III
Visual C++ Pentium IV
GCC LINUX Pentium III 2004/07/20 ATLAS-P3-LAPACK-gcc-LINUX.tar.bz2
GCC LINUX Pentium IV 2004/07/20 ATLAS-P4-LAPACK-gcc-LINUX.tar.bz2