=========================
インストール方法
=========================
はじめに
=========================
UNIXにおける一般的なインストール手順(``./configure; make; make install``)により,インストールを行う.
``./configure`` に何もオプションをつけない場合,XcalableMPのみがインストールされる.XcalableACCとOpenACCをインストールする場合,``./configure`` にオプションをつける必要がある. :ref:`general` および :ref:`supercomputer` ではXcalableMPのインストール手順について説明し,:ref:`optional` ではXcalableACCとOpenACCのインストール手順について説明する.
入手方法
=========================
公式サイトから入手する方法とGitHubから入手する方法がある.
公式サイト
-------------
http://omni-compiler.org のトップページから入手できる.
Stable版とNightly Build版がある.
Nightly Build版は,毎日深夜0時ごろ(日本時間)に,GitHub上にある最新リポジトリが前日から更新されていると生成される.
GitHub
--------
下記のコマンドで入手できる.
.. code-block:: bash
$ git clone --recursive https://github.com/omni-compiler/omni-compiler.git
依存関係のあるソフトウェア
===========================
Omni Compilerのインストールの前に,下記のソフトウェアをインストールする必要がある.
* Yacc
* Lex
* C Compiler (supports C90)
* Fortran Compiler (supports Fortran 90)
* C++ Compiler
* Java Compiler
* MPI Implementation (supports MPI-2 or over)
* libxml2
* make
以下に,主要Linuxディストリビューションにおけるインストール手順について示す.
* Debian GNU/Linux 9.0
.. code-block:: bash
$ sudo aptitude install flex gcc gfortran g++ openjdk-8-jdk libopenmpi-dev openmpi-bin libxml2-dev byacc make perl
* Ubuntu 18.04
.. code-block:: bash
$ sudo apt-get install flex gcc gfortran g++ openjdk-8-jdk libopenmpi-dev openmpi-bin libxml2-dev byacc make perl
* CentOS 7.2
.. code-block:: bash
$ sudo yum install flex gcc gfortran gcc-c++ java-1.7.0-openjdk-devel openmpi-devel libxml2-devel byacc make perl
.. _general:
一般的な手順
=========================
一般的なUNIX環境におけるインストール手順について説明する.
ビルドとインストール
--------------------
.. code-block:: bash
$ ./configure --prefix=(INSTALL PATH)
$ make
$ make install
``(INSTALL PATH)`` には,インストール先を指定する.
.. note::
``(INSTALL PATH)`` にはOmni Compilerのソースコードのディレクトリは指定できません.
PATHの設定
--------------------
* bashやzshの場合
.. code-block:: bash
$ export PATH=(INSTALL PATH)/bin:$PATH
* cshやtcshの場合
.. code-block:: csh
% setenv PATH (INSTALL PATH)/bin:$PATH
.. _supercomputer:
各スーパーコンピュータの場合
==================================================
``./configure`` に ``--target=(machine name)`` でマシンを指定することにより,下記のスーパーコンピュータに適したOmni Compilerのビルドを行うことができる.
スーパーコンピュータ「京」
----------------------------------------
.. code-block:: bash
$ ./configure --target=Kcomputer-linux-gnu --prefix=(INSTALL PATH)
$ make
$ make install
Fujitsu FX100
----------------------------------------
.. code-block:: bash
$ ./configure --target=FX100-linux-gnu --prefix=(INSTALL PATH)
$ make
$ make install
片側通信の実装に,富士通MPI拡張RDMAではなくMPI Version 3を用いたい場合は, ``./configure`` に ``--disable-fjrdma`` を追加する.
.. code-block:: bash
$ ./configure --target=FX100-linux-gnu --disable-fjrdma --prefix=(INSTALL PATH)
Fujitsu FX10
--------------------
.. code-block:: bash
$ ./configure --target=FX10-linux-gnu --prefix=(INSTALL PATH)
$ make
$ make install
Intel Knights Landing
----------------------------------------
.. code-block:: bash
$ ./configure --target=KNL-linux-gnu --prefix=(INSTALL PATH)
$ make
$ make install
Intel Knights Corner
----------------------------------------
.. code-block:: bash
$ ./configure --target=KNC-linux-gnu --prefix=(INSTALL PATH)
$ make
$ make install
NEC SX-ACE
--------------------
ログインノードに ``libxml2`` がインストールされていない場合は, `libxml2 `_ をインストールする.
.. code-block:: bash
$ tar xfz libxml2-git-snapshot.tar.gz
$ cd libxml2-2.9.2
$ ./configure --without-python --prefix=(LIBXML2 PATH)
$ make
$ make install
次に,Omni Compilerのインストールを行う.
.. code-block:: bash
$ ./configure --target=sxace-nec-superux --with-libxml2=(LIBXML2 PATH) --prefix=(INSTALL PATH)
$ make
$ make install
NEC SX9
--------------------
.. code-block:: bash
$ ./configure --target=sx9-nec-superux --prefix=(INSTALL PATH)
$ make
$ make install
HITACHI SR16000
--------------------
.. code-block:: bash
$ bash
$ export PATH=/opt/freeware/bin/:$PATH
$ export PATH=/usr/java6/jre/bin/:$PATH
$ bash ./configure --target=powerpc-hitachi-aix --prefix=(INSTALL PATH)
$ make
$ make install
IBM BlueGene/Q
--------------------
ログインノードに ``Java`` がインストールされていない場合は,例えば `OpenJDK `_ の ``openjdk1.7.0-ppc-aix-port-linux-ppc64-b**.tar.bz2`` のインストールを行った後に,Omni Compilerのインストールを行う.
.. code-block:: bash
$ ./configure --target=powerpc-ibm-cnk --prefix=(INSTALL PATH)
$ make
$ make install
.. _optional:
オプショナルな手順
=========================
OpenACCのインストール
----------------------------------------
``--enable-openacc`` を ``./configure`` に付加する.必要に応じてCUDAのインストールパスを ``--with-cuda=(CUDA PATH)`` で設定する.
.. code-block:: bash
$ ./configure --enable-openacc --with-cuda=(CUDA PATH)
$ make
$ make install
OpenACC用のランタイムを生成する際に利用する ``nvcc`` コマンドにオプションを設定することにより,より適したランタイムを生成できる可能性がある.その場合,``./configure`` に ``--with-gpu-cflags="(NVCC CFLAGS)"`` を付加する.
.. code-block:: bash
$ ./configure --enable-openacc --with-cuda=(CUDA PATH) --with-gpu-cflags="-arch=sm_20 -O3"
XcalableACCのインストール
----------------------------------------
``--enable-openacc --enable-xacc`` を ``./configure`` に付加する.他はOpenACCと同様である.
.. code-block:: bash
$ ./configure --enable-openacc --enable-xacc --with-cuda=(CUDA PATH)
$ make
$ make install
PGIコンパイラを使う場合
------------------------
``--with-cuda=(CUDA PATH)`` には,PGIコンパイラに同梱されているCUDAを指定する.ただし,Omni CompilerのビルドにはNVIDIAが提供しているCUDAも必要である.
例えば,PGI Community Edition 16.10を/opt/pgi-1610に,NVIDIAが提供しているCUDA 7.5を/opt/cuda-7.5にインストールしている場合は,下記のように設定を行う.
.. code-block:: bash
$ export PATH=/opt/cuda-7.5/bin:$PATH
$ which nvcc
$ /opt/cuda-7.5/bin/nvcc
$ ./configure --enable-openacc --enable-xacc --with-cuda=/opt/pgi-1610/linux86-64/2016/cuda/7.5/
$ make
$ make install
XcalableMPにおける他の片側通信ライブラリの利用
------------------------------------------------------------
XcalableMPにおいてMPIと他の片側通信ライブラリとを併用することにより,より高速なランタイムを生成することができる場合がある.Omni Compilerは下記の片側通信ライブラリをサポートしている.
* 富士通MPI拡張RDMA
* `GASNet `_
* MPI Version 3
富士通MPI拡張RDMA
^^^^^^^^^^^^^^^^^^
富士通MPI拡張RDMAは,スーパーコンピュータ「京」,FX100,FX10でのみ利用可能である. ``./configure --target=(machine name)`` を実行することにより,自動的にOmni Compilerは富士通MPI拡張RDMAを利用する.
GASNet
^^^^^^^^^^^^^^^^^^
GASNetは,U.C. Berkeleyが開発している片側通信ライブラリである.GASNetを利用する場合,``./configure`` にGASNetのインストールパスとconduitを指定する.
.. code-block:: bash
$ ./configure --with-gasnet=(GASNET PATH) --with-gasnet-conduit=(GASNET CONDUIT)
``--with-gasnet-conduit=(GASNET CONDUIT)`` を省略した場合,自動的にOmni Compilerがconduitを選択する.
MPI Version 3
^^^^^^^^^^^^^^^^^^
MPI Version 3は下記の条件が成立した場合,自動的に選択される.
* 利用しているMPIの実装がMPI Version 3に対応している場合
* GASNetを指定しない場合
* スーパーコンピュータ「京」,FX100,FX10以外のマシンの場合
片側通信ライブラリの確認方法
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
omni-compilerがどの片側通信ライブラリが利用するのかは,``./configure`` の最後に出力される **Configuration Summary** で確認することができる.
* 富士通MPI拡張RDMAの場合
.. code-block:: bash
Onesided : yes
Communication Library : Fujitsu RDMA
* GASNetの場合
.. code-block:: bash
Onesided : yes
Communication Library : GASNet
* MPI Version 3の場合
.. code-block:: bash
Onesided : yes
Communication Library : MPI3
* 片側通信ライブラリを利用しない場合
.. code-block:: bash
Onesided : no
Omni Compilerで利用するコンパイラの指定
----------------------------------------
Omni Compilerが利用しているコンパイラは,そのバイナリの利用場所により2種類に分類できる.
* ローカルコンパイラ:Pre-process・Frontend・Translator・Backendに利用する.ローカルコンパイラが生成するバイナリは,Omni Compilerのビルドを行うマシン上(例えばログインノード)で利用される.
* ネイティブコンパイラ:実行ファイルの生成やOmni Compilerのランタイムの生成に利用する.ネイティブコンパイラが生成するバイナリは,計算を行うマシン上で利用される.
.. image:: ../img/flow.png
``./configure`` は上記のコンパイラを自動的に設定するが,ユーザが指定することも可能である.そのための変数は下記の通りである.
* ローカルコンパイラ
+------------+---------------------------+
| 変数 | 意味 |
+============+===========================+
| CC | C compiler |
+------------+---------------------------+
| CFLAGS | C compiler flags |
+------------+---------------------------+
| FC | Fortran compiler |
+------------+---------------------------+
| FCFLAGS | Fortran compiler flags |
+------------+---------------------------+
| JAVA | Java application launcher |
+------------+---------------------------+
| JAVAC | Java compiler |
+------------+---------------------------+
| JAR | Java Archive Tool |
+------------+---------------------------+
* ネイティブコンパイラ
+--------------+-------------------------------+
| 変数 | 意味 |
+==============+===============================+
| MPI_CPP | C preprocessor |
+--------------+-------------------------------+
| MPI_CPPFLAGS | C preprocessor flags |
+--------------+-------------------------------+
| MPI_CC | C compiler |
+--------------+-------------------------------+
| MPI_CFLAGS | C compiler flags |
+--------------+-------------------------------+
| MPI_CLIBS | C compiler linker flags |
+--------------+-------------------------------+
| MPI_FPP | Fortran preprocessor |
+--------------+-------------------------------+
| MPI_FPPFLAGS | Fortran preprocessor flags |
+--------------+-------------------------------+
| MPI_FC | Fortran compiler |
+--------------+-------------------------------+
| MPI_FCFLAGS | Fortran compiler flags |
+--------------+-------------------------------+
| MPI_FCLIBS | Fortran compiler linker flags |
+--------------+-------------------------------+
例えば, ``CC`` に ``icc`` を使いたい場合は, ``./configure CC=icc`` と実行する.
ランタイムに対するBLASの利用
----------------------------------------
Omni Compilerのランタイムの一部には,BLASが利用可能である.例えば,組み込み関数の中の1つである ``xmp_matmul()`` において,行列演算のBLASを利用すると高速に実行が可能になる.
何も指定しない場合(デフォルト)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ランタイムが用意している内部関数が利用される.
スーパーコンピュータ「京」の場合
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``./configure --target=Kcomputer-linux-gnu`` を実行することにより,ランタイム内で「京」が提供するBLASが利用される.
FX100もしくはFX10の場合
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``./configure --enable-SSL2BLAMP`` を実行することにより,ランタイム内でFX100もしくはFX10が提供するBLASが利用される.
Intel MKLを使う場合
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``./configure --enable-intelmkl`` を実行することにより,ランタイム内でIntel MKLが利用される.
ユーザが指定するBLASを利用する場合
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``./configure --with-libblas=(BLAS PATH)`` を実行することにより,指定されたBLASが利用される.
Dockerを用いる場合
=====================
Docker Hubに用意しているOmni CompilerのDockerイメージを用いる方法を示す.
.. code-block:: bash
$ docker run -it -u xmp -w /home/xmp omnicompiler/xcalablemp