Omni Compilerガイドブック - Omni Compiler Project

OmniCompilerガイドブック
⽬次
Introduction
0
omnicompilerとは
1
インストール⽅法
2
⼀般的な⼿順
2.1
各スーパーコンピュータの場合
2.2
オプショナルな⼿順
2.3
利⽤⽅法
3
コンパイル⽅法
3.1
実⾏⽅法
3.2
環境変数
3.3
Tips
4
制限事項
5
1
OmniCompilerガイドブック
OmniCompilerガイドブック
本書ではomnicompilerのインストール⽅法,利⽤⽅法,Tipsなどを記載している.
omnicompilerにはStable版とNightlybuild版がある.Stable版とはいわゆる安定版のことであ
り,Nightlybuild版とは深夜0時ころに公式サイトで公開される試⽤版のことである.本⽂章で
は基本的に最新のStable版(version1.0.0)についての情報を記載している.
Introduction
2
OmniCompilerガイドブック
omnicompilerとは
omnicompilerは,XcalableMP,XcalableACC,OpenACCといった指⽰⽂を含むコードを対象
としたコンパイラである.対応しているベース⾔語は,XcalableMPはC⾔語(C99)および
Fortran2003,XcalableACCとOpenACCはC⾔語(C99)である.
omnicompilerはトランスレータコンパイラの⼀種であり,ベース⾔語と各指⽰⽂で記述された
コードを,omnicompilerが提供するランタイムの呼び出しを含むコードに変換する.omni
compilerの内部では,XcodeMLというXML表現の中間コードを⽤いて,コードの解析などを⾏
っている.下記に,omnicompilerの動作の流れを⽰す.
omnicompilerは,最終的にネイティブコンパイラ( mpiccや nvccコマンドなど)を⽤いて,ラ
ンタイムの呼び出しに変換されたコードをコンパイルし,実⾏ファイルを⽣成する.omni
compilerが提供するランタイムは,XcalableMPではMPI,OpenACCではCUDA,XcalableACC
ではMPIとCUDAの両⽅を⽤いている.
XcalableMPにおいては,MPIと他の⽚側通信ライブラリとを併⽤することにより,より⾼速な
ランタイムを⽣成できる場合がある.詳細は2.3.オプショナルな⼿順で説明する.
omnicompilerは下記の2つのグループが開発を⾏っている.
理化学研究所計算科学研究機構プログラミング環境研究チーム
筑波⼤学システム情報⼯学研究科HPCS研究室
omnicompilerとは
3
OmniCompilerガイドブック
インストール⽅法
はじめに
依存関係のあるソフトウェア
はじめに
UNIXにおける⼀般的なインストール⼿順( ./configure;make;makeinstall)により,インストー
ル作業を⾏う.
./configureに何もオプションをつけない場合は,XcalableMPのみがインストールされる.
XcalableACCとOpenACCをインストールする場合は, ./configureにオプションをつける必要が
ある.本節と2.1.⼀般的な⼿順および2.2.各スーパーコンピュータの場合ではXcalableMPのイ
ンストール⼿順について説明し,2.3.オプショナルの⼿順ではXcalableACCとOpenACCのイン
ストール⼿順について説明する.
依存関係のあるソフトウェア
omnicompilerのインストールの前に,下記のソフトウェアをインストールする必要がある.
Yacc
Lex
CCompiler(supportsC99)
FortranCompiler(supportsFortran90)
C++Compiler
JavaCompiler
MPIImplementation(supportsMPI-2orover)
libxml2
make
以下に,主要Linuxディストリビューションにおけるインストール⼿順について⽰す.
DebianGNU/Linux8.3
#aptitudeinstallflexgccgfortrang++openjdk-7-jdklibopenmpi-devopenmpi-bin\
libxml2-devbyaccmakeperl
Ubuntu15.10
$sudoapt-getinstallflexgccgfortrang++openjdk-7-jdklibopenmpi-devopenmpi-bin\
libxml2-devbyaccmakeperl
CentOS7.2
インストール⽅法
4
OmniCompilerガイドブック
#yuminstallflexgccgfortrangcc-c++java-1.7.0-openjdk-developenmpi-devel\
libxml2-develbyaccmakeperl
インストール⽅法
5
OmniCompilerガイドブック
⼀般的な⼿順
⼀般的なUNIX環境におけるインストール⼿順について説明する.
ビルドとインストール
PATHの設定
ビルドとインストール
$./configure--prefix=(INSTALLPATH)
$make
$makeinstall
(INSTALLPATH)には,インストール先を指定する.
PATHの設定
bashやzshの場合
$exportPATH=(INSTALLPATH)/bin:$PATH
cshやtcshの場合
%setenvPATH(INSTALLPATH)/bin:$PATH
⼀般的な⼿順
6
OmniCompilerガイドブック
各スーパーコンピュータの場合
./configureに --target=(machinename)オプションでマシンを指定することにより,下記のスーパ
ーコンピュータに適したomnicompilerのビルドを⾏うことができる.
スーパーコンピュータ「京」
FujitsuFX100
FujitsuFX10
NECSX-ACE
NECSX9
HITACHISR16000
IBMBlueGene/Q
スーパーコンピュータ「京」
$./configure--target=Kcomputer-linux-gnu--prefix=(INSTALLPATH)
$make
$makeinstall
FujitsuFX100
$./configure--target=FX100-linux-gnu--prefix=(INSTALLPATH)
$make
$makeinstall
FujitsuFX10
$./configure--target=FX10-linux-gnu--prefix=(INSTALLPATH)
$make
$makeinstall
NECSX-ACE
ログインノードに"libxml2"がインストールされていない場合は,"libxml2"を公式サイトから⼊
⼿し,インストールする.
$tarxfzlibxml2-git-snapshot.tar.gz
$cdlibxml2-2.9.2
$./configure--without-python--prefix=(LIBXML2PATH)
$make
$makeinstall
各スーパーコンピュータの場合
7
OmniCompilerガイドブック
次に,omnicompilerのインストールを⾏う.
$./configure--target=sxace-nec-superux--with-libxml2=(LIBXML2PATH)--prefix=(INSTALLPATH)
$make
$makeinstall
NECSX9
$./configure--target=sx9-nec-superux--prefix=(INSTALLPATH)
$make
$makeinstall
HITACHISR16000
$bash
$exportPATH=/opt/freeware/bin/:$PATH
$exportPATH=/usr/java6/jre/bin/:$PATH
$bash./configure--target=powerpc-hitachi-aix--prefix=(INSTALLPATH)
$make
$makeinstall
IBMBlueGene/Q
ログインノードに"Java"がインストールされていない場合は,例えばOpenJDK
の"openjdk1.7.0-ppc-aix-port-linux-ppc64-b**.tar.bz2"のインストールを⾏った後に,omni
compilerのインストールを⾏う.
$./configure--target=powerpc-ibm-cnk--prefix=(INSTALLPATH)
$make
$makeinstall
各スーパーコンピュータの場合
8
OmniCompilerガイドブック
オプショナルな⼿順
OpenACCのインストール
XcalableACCのインストール
XcalableMPにおける他の⽚側通信ライブラリの利⽤
富⼠通MPI拡張RDMA
GASNet
MPIVersion3
⽚側通信ライブラリの確認⽅法
omnicompilerで利⽤するコンパイラの指定
ランタイムに対するBLASの利⽤
何も指定しない場合(デフォルト)
スーパーコンピュータ「京」の場合
FX100もしくはFX10の場合
IntelMKLを使う場合
ユーザが指定するBLASを利⽤する場合
OpenACCのインストール
--enable-openaccを ./configureに付加する.必要に応じてCUDAのインストールパスを --withcuda=(CUDAPATH)で設定する.
$./configure--enable-openacc--with-cuda=(CUDAPATH)
$make
$makeinstall
OpenACC⽤のランタイムを⽣成する際に利⽤する nvccコマンドにオプションを設定すること
により,より適したランタイムを⽣成できる可能性がある.その場合, ./configureに --withgpu-cflags="(NVCCCFLAGS)"を付加する.
$./configure--enable-openacc--with-cuda=(CUDAPATH)--with-gpu-cflags="-arch=sm_20-O3"
XcalableACCのインストール
--enable-openacc--enable-xaccを ./configureに付加する.他はOpenACCと同様である.
$./configure--enable-openacc--enable-xacc--with-cuda=(CUDAPATH)
$make
$makeinstall
XcalableMPにおける他の⽚側通信ライブラリの利⽤
オプショナルな⼿順
9
OmniCompilerガイドブック
XcalableMPにおいてMPIと他の⽚側通信ライブラリとを併⽤することにより,より⾼速なラン
タイムを⽣成することができる場合がある.omnicompilerは下記の⽚側通信ライブラリをサポ
ートしている.
富⼠通MPI拡張RDMA
GASNet
MPIVersion3
富⼠通MPI拡張RDMA
富⼠通MPI拡張RDMAは,スーパーコンピュータ「京」,FX100,FX10でのみ利⽤可能であ
る.2.2.各スーパーコンピュータの場合で説明した ./configure--target=(machinename)を実⾏する
ことにより,⾃動的にomnicompilerは富⼠通MPI拡張RDMAを利⽤する.
GASNet
GASNetは,U.C.Berkeleyが開発している⽚側通信ライブラリである.GASNetを利⽤する場
合, ./configureにGASNetのインストールパスとconduitを指定する.
$./configure--with-gasnet=(GASNETPATH)--with-gasnet-conduit=(GASNETCONDUIT)
--with-gasnet-conduit=(GASNETCONDUIT)を省略した場合,⾃動的にomnicompilerがconduitを選択す
る.
MPIVersion3
MPIVersion3は下記の条件が成⽴した場合,⾃動的に選択される.
利⽤しているMPIの実装がMPIVersion3に対応している場合
GASNetを指定しない場合
スーパーコンピュータ「京」,FX100,FX10以外のマシンの場合
⽚側通信ライブラリの確認⽅法
omni-compilerがどの⽚側通信ライブラリが利⽤するのかは, ./configureの最後に出⼒され
る"ConfigurationSummary"で確認することができる.
富⼠通MPI拡張RDMAの場合
Onesided:yes
CommunicationLibrary:FujitsuRDMA
GASNetの場合
Onesided:yes
CommunicationLibrary:GASNet
オプショナルな⼿順
10
OmniCompilerガイドブック
MPIVersion3の場合
Onesided:yes
CommunicationLibrary:MPI3
⽚側通信ライブラリを利⽤しない場合
Onesided:no
omnicompilerで利⽤するコンパイラの指定
omnicompilerが利⽤しているコンパイラは,そのバイナリの利⽤場所により2種類に分類でき
る.
ローカルコンパイラ:Pre-process・Frontend・Translator・Backendに利⽤する.ローカル
コンパイラが⽣成するバイナリは,omnicompilerのビルドを⾏うマシン上(例えばログイ
ンノード)で利⽤される.
ネイティブコンパイラ:実⾏ファイルの⽣成やomnicompilerのランタイムの⽣成に利⽤す
る.ネイティブコンパイラが⽣成するバイナリは,計算を⾏うマシン上で利⽤される.
./configureは上記のコンパイラを⾃動的に設定するが,ユーザが指定することも可能である.
そのための変数は下記の通りである.
ローカルコンパイラ
変数
意味
CC
Ccompiler
CFLAGS
Ccompilerflags
FC
Fortrancompiler
FCFLAGS
Fortrancompilerflags
JAVA
Javaapplicationlauncher
JAVAC
Javacompiler
JAR
JavaArchiveTool
オプショナルな⼿順
11
OmniCompilerガイドブック
ネイティブコンパイラ
変数
意味
MPI_CPP
Cpreprocessor
MPI_CPPFLAGS
Cpreprocessorflags
MPI_CC
Ccompiler
MPI_CFLAGS
Ccompilerflags
MPI_CLIBS
Ccompilerlinkerflags
MPI_FPP
Fortranpreprocessor
MPI_FPPFLAGS
Fortranpreprocessorflags
MPI_FC
Fortrancompiler
MPI_FCFLAGS
Fortrancompilerflags
MPI_FCLIBS
Fortrancompilerlinkerflags
例えば, CCに iccを使いたい場合は, ./configureCC=iccと実⾏する.
ランタイムに対するBLASの利⽤
omnicompilerのランタイムの⼀部には,BLASが利⽤可能である.例えば,組み込み関数の中の
1つである xmp_matmul()において,⾏列演算のBLASを利⽤すると⾼速に実⾏が可能になる.
何も指定しない場合(デフォルト)
ランタイムが⽤意している内部関数が利⽤される.
スーパーコンピュータ「京」の場合
./configure--target=Kcomputer-linux-gnuを実⾏することにより,ランタイム内で「京」が提供する
BLASが利⽤される.
FX100もしくはFX10の場合
./configure--enable-SSL2BLAMPを実⾏することにより,ランタイム内でFX100もしくはFX10が提
供するBLASが利⽤される.
IntelMKLを使う場合
./configure--enable-intelmklを実⾏することにより,ランタイム内でIntelMKLが利⽤される.
オプショナルな⼿順
12
OmniCompilerガイドブック
ユーザが指定するBLASを利⽤する場合
./configure--with-libblas=(BLASPATH)を実⾏することにより,指定されたBLASが利⽤される.
オプショナルな⼿順
13
OmniCompilerガイドブック
利⽤⽅法
本章では,omnicompilerを⽤いたXcalableMP,XcalableACC,OpenACCのコードのコンパイ
ルおよび実⾏⽅法について説明する.
利⽤⽅法
14
OmniCompilerガイドブック
コンパイル⽅法
コンパイルコマンドの例
XcalableMP/C
XcalableMP/Fortran
XcalableACC/C
OpenACC/C
コンパイルオプションについて
omnicompiler特有のオプション
オプションの分類
共通のオプション
固有のオプション
コンパイルコマンドの例
XcalableMP/C
$xmpcca.c
XcalableMP/Fortran
$xmpf90a.f90
XcalableACC/C
$xmpcc-xacca.c
OpenACC/C
$ompcc-acca.c
コンパイルオプションについて
1.omnicompilerとはで説明した通り,omnicompilerが⽣成したコードはネイティブコンパイラ
が最終的にコンパイルする.そのため,後述するomnicompiler特有のオプション以外は,すべ
てネイティブコンパイラに渡される.例えば,よく利⽤される最適化オプション -O2はそのま
まネイティブコンパイラに渡される.
コンパイル⽅法
15
OmniCompilerガイドブック
$xmpcc-O2a.c
omnicompiler特有のオプション
オプションの分類
omnicompiler特有のオプションは,共通のオプションと固有のオプションの2種類に分類でき
る.さらに,共通のオプションは,コンパイルドライバオプションとプロセスオプションの2種
類に分類できる.
共通のオプション:各⾔語に対して共通のオプション
コンパイルドライバオプション:コンパイルの⼀連のプロセスに適応するオプショ
ン.
プロセスオプション:コンパイルの各プロセス(例えば,プリプロセスやフロントエ
ンド)に対して個別に適応するオプション.
固有のオプション:各⾔語に対して固有のオプション
共通のオプション
コンパイルドライバオプション
コンパイル⽅法
16
OmniCompilerガイドブック
オプション
意味
-o<file>
出⼒ファイルを指定する
-I<dir>
インクルードヘッダのあるディレクトリを指定する
-c
コンパイルとアセンブルのみを⾏う
-E
プリプロセスのみを⾏う
-v,--verbose
各プロセスの状態を表⽰する
--version
omnicompilerのバージョンを表⽰する
-h,--help
ヘルプを表⽰する
--show-env
omnicompilerで利⽤している内部変数を表⽰する
--tmp
omnicompilerが変換したファイルを__omni_tmp__<file>に保存する
--dry
各プロセスの動作の表⽰のみを⾏う
--debug
各プロセスが⽣成するすべての中間ファイルを./__omni_tmp__/に保
存する
--stop-pp
プリプロセスの直後に動作を停⽌させる
--stopfrontend
フロントエンドの直後に動作を停⽌させる
--stoptranslator
トランスレータの直後に動作を停⽌させる
--stopbackend
バックエンドの直後に動作を停⽌させる
--stop-compile
コンパイルの直後に動作を停⽌させる
プロセスオプション
オプション
意味
--Wp[option]
プリプロセスにオプションを追加する
--Wf[option]
フロントエンドにオプションを追加する
--Wx[option]
トランスレータにオプションを追加する
--Wb[option]
バックエンドにオプションを追加する
--Wn[option]
コンパイルにオプションを追加する
--Wl[option]
リンカにオプションを追加する
コンパイル⽅法
17
OmniCompilerガイドブック
例えば,リンカのみに -Ltestというオプションを渡したい場合は,下記のようにする.
$xmpcc--Wl"-Ltest"a.c
固有のオプション
XcalableMP/C
オプション
意味
-omp,--openmp
OpenMP指⽰⽂を有効化する
--profilescalasca
すべての指⽰⽂をScalascaの測定範囲にする
--profiletlog
すべての指⽰⽂をtlogの測定範囲にする
--selective-profile
scalasca
"profile"という節をつけた指⽰⽂のみをScalascaの測定範囲
にする
--selective-profiletlog
"profile"という節をつけた指⽰⽂のみをtlogの測定範囲にする
XcalableMP/Fortran
オプション
意味
-omp,--openmp
OpenMP指⽰⽂を有効化する
-J<dir>
モジュールファイルのあるディレクトリを指定する
-cpp
プリプロセスを実⾏する
-max_assumed_shape=N
割付け仮配列の最⼤値を設定する.デフォルトは16
XcalableACC/C
オプション
意味
-xacc,--xcalableacc
XcalableACC指⽰⽂を有効化する
--no-ldg
読み取り専⽤のデータキャッシュを無効化する
--default-veclen=LENGTH
ベクタ⻑を指定する(デフォルトは256)
OpenACC/C
コンパイル⽅法
18
OmniCompilerガイドブック
オプション
意味
-acc,--openacc
OpenACC指⽰⽂を有効化する
--no-ldg
読み取り専⽤のデータキャッシュを無効化する
--default-veclen=LENGTH
ベクタ⻑を指定する(デフォルトは256)
コンパイル⽅法
19
OmniCompilerガイドブック
実⾏⽅法
XcalableMPとXcalableACC
OpenACC
XcalableMPとXcalableACC
XcalableMPとXcalableACCではランタイムにMPIを利⽤しているため,MPIの実⾏コマンドで
ある mpiexecや mpirunを⽤いて実⾏を⾏う.ただし,2.3.オプショナルな⼿順の「XcalableMP
における他の⽚側通信ライブラリの利⽤」の通りにランタイムにGASNetも⽤いている場合,
GASNetの実⾏コマンド( gasnetrun_XXX. XXXはconduit名)を⽤いる.
GASNetを⽤いない場合
$mpiexec-n2./a.out
GASNetを⽤いた場合(ibv-conduitの場合)
$gasnetrun_ibv-n2./a.out
OpenACC
⼀般的な実⾏⽅法で実⾏する.
$./a.out
実⾏⽅法
20
OmniCompilerガイドブック
環境変数
XcalableMPおよびXcalableACC
XMP_NODE_SIZEn
XMP_ONESIDED_HEAP_SIZE(GASNetおよびMPIVersion3利⽤時のみ)
XMP_ONESIDED_STRIDE_SIZE(GASNet利⽤時のみ)
XcalableMPおよびXcalableACC
XMP_NODE_SIZEn
XcalableMPの仕様におけるノード集合の定義では最終次元のみ *を利⽤できる.
C⾔語
#pragmaxmpnodesp(2,*)
Fortran
!$xmpnodesp(2,*)
omnicompilerはこの仕様を拡張し,最終次元以外においても *を利⽤可能にしている.
C⾔語
#pragmaxmpnodesp(*,*)
Fortran
!$xmpnodesp(*,*)
プログラム実⾏時に環境変数XMP_NODE_SIZEn(nは0から始まる整数)により各次元のノー
ド数を設定する.例えば,
$exportXMP_NODE_SIZE0=2
$exportXMP_NODE_SIZE1=4
$mpirun-np8./a.out
は下記と同じ意味である.
C⾔語
環境変数
21
OmniCompilerガイドブック
#pragmaxmpnodesp(2,4)
Fortran
!$xmpnodesp(2,4)
XMP_ONESIDED_HEAP_SIZE(GASNetおよびMPIVersion3利⽤時のみ)
環境変数 XMP_ONESIDED_HEAP_SIZEは,下記のようなプログラムの実⾏時エラーが発⽣した場合に変
更する必要がある.
[ERROR]Cannotallocatecoarray.Heapmemorysizeofcoarrayistoosmall.
Pleasesettheenvironmentalvariable"XMP_ONESIDED_HEAP_SIZE"
環境変数 XMP_ONESIDED_HEAP_SIZEは,omni-compilerのプログラム開始時に確保する⽚側通信の機
能に⽤いるメモリサイズを指定している.上記のエラーメッセージは,確保したメモリサイズ
では⾜りないことを意味している.デフォルトは16MByteである.変更する場合は,下記のよ
うに⾏う.
$exportXMP_ONESIDED_HEAP_SIZE=32M
XMP_ONESIDED_STRIDE_SIZE(GASNet利⽤時のみ)
環境変数 XMP_ONESIDED_STRIDE_SIZEは,下記のようなプログラムの実⾏時エラーが発⽣した場合に
変更する必要がある.
[ERROR]Memorysizeforcoarraystridetransferistoosmall.
Pleasesettheenvironmentalvariable"XMP_COARRAY_STRIDE_SIZE"
環境変数 XMP_ONESIDED_STRIDE_SIZEは,omni-compilerのプログラム開始時に確保するCoarrayのス
トライド通信(例えば, a(1:N:2)=b(1:N:2)[2])に⽤いるメモリサイズを指定している.上記
のエラーメッセージは,確保したメモリサイズでは⾜りないことを意味している.デフォルト
は1MByteである.変更する場合は,下記のように⾏う.
$exportXMP_ONESIDED_STRIDE_SIZE=2M
なおGASNet利⽤時は, XMP_ONESIDED_HEAP_SIZEと XMP_ONESIDED_STRIDE_SIZEを合計した値が,プログ
ラム開始時に確保される.
環境変数
22
OmniCompilerガイドブック
Tips
⼀部のコードをネイティブコンパイラでコンパイルする場合
C⾔語の場合
Fortranの場合
インストールが失敗する場合
MPIへのPATHの確認
automakeやautoconfのエラーが出る場合
mpi-conduit以外のGASNetを⽤いた場合の注意点
omnicompilerのテスト
プロファイリングツールとの連携
Scalascaを⽤いたプロファイリング
tlogを⽤いたプロファイリング
⼀部のコードをネイティブコンパイラでコンパイルする場合
ネイティブコンパイラで作成したオブジェクトファイルとomnicompilerで作成したオブジェク
トファイルとはリンクすることが可能である.ただし,下記の制限がある.
C⾔語の場合
例えば a.cと b.cという2つのコードがあり, a.cはネイティブコンパイラ(ここでは mpicc)
を⽤いて, b.cはomnicompiler(ここでは xmpcc)を⽤いてコンパイルしたい場合は,下記の
ように個別に⾏うことが可能である.ただし,リンクには必ずomnicompilerを利⽤する必要が
ある.
$mpicca.c-c
$xmpccb.c-c
$xmpcca.ob.o
Fortranの場合
基本的にはC⾔語と同様であるが,モジュールの利⽤についてのみ注意が必要になる.omni
compilerでは, .xmodファイルという特殊なファイルを使って,モジュールの利⽤を⾏ってい
る.そのため,例えばgfortranを使って通常の .modファイルを作成しても,その .modファイル
はomnicompilerからは利⽤することはできない.
そこで,omnicompilerは .modファイルを .xmodファイルに変換するコマンド T_Moduleを提供し
ている. T_Moduleはgfortran-4.4,4.7,4.9が作成した .modファイルの変換に対応している.
./configureに --enable-mod2xmodオプションをつけることで, T_Moduleがomnicompilerと同時に
ビルドされる.なお, T_Moduleのビルドには,mpfrとgmpが必要である.
Tips
23
OmniCompilerガイドブック
$./configure--enable-mod2xmod
例えば, test.modを test.xmodというomnicompiler⽤のモジュールファイルに変換する場合,下
記のように実⾏する.
$T_moduletest.mod
インストールが失敗する場合
MPIへのPATHの確認
whichコマンドを使って,MPIへの PATHが設定されているかを確認する.下記はDebian
GNU/Linux8.3においてOpenMPIを aptitudeコマンドでインストールした場合の例である.
%whichmpicc
/usr/bin/mpicc
もし,MPIへの PATHが設定されていなければ, whichコマンドは何も出⼒しない.
なお,CentOS7においてOpenMPIを yumでインストールした場合,OpenMPI
は /usr/lib64/openmpi/にインストールされる.そのため,⼿動で下記のように PATHを設定する必
要がある.
$exportPATH=/usr/lib64/openmpi/bin:$PATH
automakeやautoconfのエラーが出る場合
omnicompilerのトップディレクトリで autogen.shを実⾏し,ビルドに必要なファイルの再⽣成
を⾏う. autogen.shの実⾏にはautoconf,automake,libtoolが必要である.
$shautogen.sh
mpi-conduit以外のGASNetを⽤いた場合の注意点
mpi-conduit以外のGASNetを⽤いる場合,GASNetの制約(詳細はGASNetのREADMEの"MPI
Interoperability"を参照)のため,GASNetによる通信(Coarray,post/wait/lock/unlock指⽰⽂)
とMPIによる通信(post/wait/lock/unlock指⽰⽂以外の通信指⽰⽂.例えば,bcast指⽰⽂など)
がネットワーク上で同時に発⽣することは許していない.
そのため,GASNetとMPIの2種類の通信が同時に発⽣しないようにする必要がある.具体的に
は,GASNetによる通信の後に,XcalableMP/Cの場合は関数 xmp_sync_all(),
XcalableMP/Fortranの場合は syncall⽂を挿⼊する.同様にMPIによる通信の後は, barrier指
⽰⽂を挿⼊する.
Tips
24
OmniCompilerガイドブック
XcalableMP/C
(GASNetによる通信)
xmp_sync_all(&status)
(MPIによる通信)
#pragmaxmpbarrier
(GASNetによる通信)
XcalableMP/Fortran
(GASNetによる通信)
syncall
(MPIによる通信)
!$xmpbarrier
(GASNetによる通信)
omnicompilerのテスト
omnnicompilerでは,omnicompilerが正常に動作するかを確かめるためのテストプログラムを
⽤意している.テストプログラムのコンパイルと実⾏には,omnicompilerのインストールおよ
び PATHの設定後に下記のコマンドを実⾏する.
$maketests//テストプログラムのコンパイル
$makerun-tests//テストプログラムの実⾏
$makeclean-tests//テストプログラムのバイナリの削除
maketestsコマンドは, ./testディレクトリ以下にテストプログラムを⽣成する. makeruntestsコマンドによるテストプログラムの実⾏はローカルノードで⾏われるため,クロスコンパ
イラを⽤いている場合は makerun-testsコマンドによるテストプログラムの実⾏を⾏うことはで
きない.クロスコンパイラを⽤いている場合でテストの実⾏を⾏いたい場合は, ./testディレ
クトリ以下のテストプログラムに対してユーザが直接計算ノードで実⾏を⾏う必要がある.
プロファイリングツールとの連携
omnicompilerには,プロファイリングツールであるScalasca(version1.4.3で動作確認)およ
びtlogとの連携機能がある.本機能は,XcalableMPの下記指⽰⽂の実⾏に要する時間などを計
測することができる.本機能は現時点ではXcalableMP/Cのみの対応である.
loop
reduction
Tips
25
OmniCompilerガイドブック
gmove
bcast
reflect
barrier
task
Scalascaを⽤いたプロファイリング
まずScalascaをインストールし,Scalacaへの PATHを設定する.
コードに存在するすべての指⽰⽂についてプロファイリングをとりたい場合は, --profile
scalascaオプションをつけてコンパイルを⾏い,実⾏する.
$xmpcc--profilescalascaa.c
特定の指⽰⽂にのみプロファイルをとりたい場合は,その指⽰⽂に profileという節を追加
し, --selective-profilescalascaオプションをつけてコンパイルを⾏い,実⾏する.
#pragmaxmpbcast(a)profile
$xmpcc--selective-profilescalascaa.c
Scalascaを⽤いたプロファイリング⽅法の詳細はScalascaの公式サイトを参考のこと.
tlogを⽤いたプロファイリング
Tips
26
OmniCompilerガイドブック
tlogはomnicompilerのインストール時に⾃動的にインストールされる.
コードに存在するすべての指⽰⽂についてプロファイリングをとりたい場合は, --profile
tlogオプションをつけてコンパイルを⾏い,実⾏する.
$xmpcc--profiletloga.c
特定の指⽰⽂にのみプロファイルをとりたい場合は,その指⽰⽂に profileという節を追加
し, --selective-profiletlogオプションをつけてコンパイルを⾏い,実⾏する.
#pragmaxmpbcast(a)profile
$xmpcc--selective-profiletloga.c
プログラム実⾏後に, trace.logというプロファイル結果が保存されたファイルが⽣成される.
プロファイル結果を閲覧する場合は, tlogviewコマンドを⽤いる.
$tlogviewtrace.log
Tips
27
OmniCompilerガイドブック
制限事項
スーパーコンピュータ「京」・FX100・FX10上の制限事項
Fortranコードにおけるmoduleの制限事項
スーパーコンピュータ「京」・FX100・FX10上の制限事項
Coarrayの数は508個まで
利⽤できるプロセス数は82,944まで
post指⽰⽂において利⽤できるタグの値は0〜14
Fortranコードにおけるmoduleの制限事項
4.Tipsの「⼀部のコードをネイティブコンパイラでコンパイルする場合」にある通り,module
ファイルはomnicompilerが解析できる .xmodファイルである必要がある.
制限事項
28