Omni Compiler Project

TableofContents
Introduction
1.1
omnicompilerとは
1.2
インストール方法
1.3
一般的な手順
1.3.1
各スーパーコンピュータの場合
1.3.2
オプショナルな手順
1.3.3
利用方法
1.4
コンパイル方法
1.4.1
実行方法
1.4.2
環境変数
1.4.3
Tips
1.5
制限事項
1.6
1
Introduction
OmniCompilerガイドブック
本書ではomnicompilerのインストール方法,利用方法,Tipsなどを記載している.
omnicompilerにはStable版とNightlybuild版がある.Stable版とはいわゆる安定版のことであり,Nightlybuild版とは深夜0
時ころに公式サイトで公開される試用版のことである.本文章では基本的に最新のStable版(version1.0.3)についての情
報を記載している.
2
omnicompilerとは
omnicompilerとは
omnicompilerは,XcalableMP,XcalableACC,OpenACCといった指示文を含むコードを対象としたコンパイラである.
対応しているベース言語は,XcalableMPはC言語(C99)およびFortran2003,XcalableACCとOpenACCはC言語
(C99)である.
omnicompilerはトランスレータコンパイラの一種であり,ベース言語と各指示文で記述されたコードを,omnicompilerが
提供するランタイムの呼び出しを含むコードに変換する.omnicompilerの内部では,XcodeMLというXML表現の中間コー
ドを用いて,コードの解析などを行っている.下記に,omnicompilerの動作の流れを示す.
omnicompilerは,最終的にネイティブコンパイラ( mpiccや nvccコマンドなど)を用いて,ランタイムの呼び出しに変
換されたコードをコンパイルし,実行ファイルを生成する.omnicompilerが提供するランタイムは,XcalableMPでは
MPI,OpenACCではCUDA,XcalableACCではMPIとCUDAの両方を用いている.
XcalableMPにおいては,MPIと他の片側通信ライブラリとを併用することにより,より高速なランタイムを生成できる場
合がある.詳細は2.3.オプショナルな手順で説明する.
omnicompilerは下記の2つのグループが開発を行っている.
理化学研究所計算科学研究機構プログラミング環境研究チーム
筑波大学システム情報工学研究科HPCS研究室
3
インストール方法
インストール方法
はじめに
依存関係のあるソフトウェア
はじめに
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
#yuminstallflexgccgfortrangcc-c++java-1.7.0-openjdk-developenmpi-devel\
libxml2-develbyaccmakeperl
4
一般的な手順
一般的な手順
一般的なUNIX環境におけるインストール手順について説明する.
ビルドとインストール
PATHの設定
ビルドとインストール
$./configure--prefix=(INSTALLPATH)
$make
$makeinstall
(INSTALLPATH)には,インストール先を指定する.
PATHの設定
bashやzshの場合
$exportPATH=(INSTALLPATH)/bin:$PATH
cshやtcshの場合
%setenvPATH(INSTALLPATH)/bin:$PATH
5
各スーパーコンピュータの場合
各スーパーコンピュータの場合
./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
次に,omnicompilerのインストールを行う.
$./configure--target=sxace-nec-superux--with-libxml2=(LIBXML2PATH)--prefix=(INSTALLPATH)
$make
$makeinstall
6
各スーパーコンピュータの場合
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-ppc64b**.tar.bz2"のインストールを行った後に,omnicompilerのインストールを行う.
$./configure--target=powerpc-ibm-cnk--prefix=(INSTALLPATH)
$make
$makeinstall
7
オプショナルな手順
オプショナルな手順
OpenACCのインストール
XcalableACCのインストール
XcalableMPにおける他の片側通信ライブラリの利用
富士通MPI拡張RDMA
GASNet
MPIVersion3
片側通信ライブラリの確認方法
omnicompilerで利用するコンパイラの指定
ランタイムに対するBLASの利用
何も指定しない場合(デフォルト)
スーパーコンピュータ「京」の場合
FX100もしくはFX10の場合
IntelMKLを使う場合
ユーザが指定するBLASを利用する場合
OpenACCのインストール
--enable-openaccを ./configureに付加する.必要に応じてCUDAのインストールパスを --with-cuda=(CUDAPATH)で設定
する.
$./configure--enable-openacc--with-cuda=(CUDAPATH)
$make
$makeinstall
OpenACC用のランタイムを生成する際に利用する nvccコマンドにオプションを設定することにより,より適したランタ
イムを生成できる可能性がある.その場合, ./configureに --with-gpu-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における他の片側通信ライブラリの利用
XcalableMPにおいてMPIと他の片側通信ライブラリとを併用することにより,より高速なランタイムを生成することがで
きる場合がある.omnicompilerは下記の片側通信ライブラリをサポートしている.
富士通MPI拡張RDMA
GASNet
MPIVersion3
富士通MPI拡張RDMA
8
オプショナルな手順
富士通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
MPIVersion3の場合
Onesided:yes
CommunicationLibrary:MPI3
片側通信ライブラリを利用しない場合
Onesided:no
omnicompilerで利用するコンパイラの指定
omnicompilerが利用しているコンパイラは,そのバイナリの利用場所により2種類に分類できる.
ローカルコンパイラ:Pre-process・Frontend・Translator・Backendに利用する.ローカルコンパイラが生成するバ
イナリは,omnicompilerのビルドを行うマシン上(例えばログインノード)で利用される.
ネイティブコンパイラ:実行ファイルの生成やomnicompilerのランタイムの生成に利用する.ネイティブコンパイラ
が生成するバイナリは,計算を行うマシン上で利用される.
9
オプショナルな手順
./configureは上記のコンパイラを自動的に設定するが,ユーザが指定することも可能である.そのための変数は下記の
通りである.
ローカルコンパイラ
変数
意味
CC
Ccompiler
CFLAGS
Ccompilerflags
FC
Fortrancompiler
FCFLAGS
Fortrancompilerflags
JAVA
Javaapplicationlauncher
JAVAC
Javacompiler
JAR
JavaArchiveTool
ネイティブコンパイラ
変数
意味
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を利用すると高速に実行が可能になる.
何も指定しない場合(デフォルト)
ランタイムが用意している内部関数が利用される.
10
オプショナルな手順
スーパーコンピュータ「京」の場合
./configure--target=Kcomputer-linux-gnuを実行することにより,ランタイム内で「京」が提供するBLASが利用される.
FX100もしくはFX10の場合
./configure--enable-SSL2BLAMPを実行することにより,ランタイム内でFX100もしくはFX10が提供するBLASが利用され
る.
IntelMKLを使う場合
./configure--enable-intelmklを実行することにより,ランタイム内でIntelMKLが利用される.
ユーザが指定するBLASを利用する場合
./configure--with-libblas=(BLASPATH)を実行することにより,指定されたBLASが利用される.
11
利用方法
利用方法
本章では,omnicompilerを用いたXcalableMP,XcalableACC,OpenACCのコードのコンパイルおよび実行方法について
説明する.
12
コンパイル方法
コンパイル方法
コンパイルコマンドの例
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はそのままネイティブコンパイラに渡される.
$xmpcc-O2a.c
omnicompiler特有のオプション
オプションの分類
omnicompiler特有のオプションは,共通のオプションと固有のオプションの2種類に分類できる.さらに,共通のオプシ
ョンは,コンパイルドライバオプションとプロセスオプションの2種類に分類できる.
13
コンパイル方法
共通のオプション:各言語に対して共通のオプション
コンパイルドライバオプション:コンパイルの一連のプロセスに適応するオプション.
プロセスオプション:コンパイルの各プロセス(例えば,プリプロセスやフロントエンド)に対して個別に適応
するオプション.
固有のオプション:各言語に対して固有のオプション
共通のオプション
コンパイルドライバオプション
オプション
意味
-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
プリプロセスの直後に動作を停止させる
--stop-frontend
フロントエンドの直後に動作を停止させる
--stop-translator
トランスレータの直後に動作を停止させる
--stop-backend
バックエンドの直後に動作を停止させる
--stop-compile
コンパイルの直後に動作を停止させる
プロセスオプション
オプション
意味
--Wp[option]
プリプロセスにオプションを追加する
--Wf[option]
フロントエンドにオプションを追加する
--Wx[option]
トランスレータにオプションを追加する
--Wb[option]
バックエンドにオプションを追加する
--Wn[option]
コンパイルにオプションを追加する
--Wl[option]
リンカにオプションを追加する
14
コンパイル方法
例えば,リンカのみに -Ltestというオプションを渡したい場合は,下記のようにする.
$xmpcc--Wl"-Ltest"a.c
固有のオプション
XcalableMP/C
オプション
意味
-omp,--openmp
OpenMP指示文を有効化する
--profilescalasca
すべての指示文をScalascaの測定範囲にする
--profiletlog
すべての指示文をtlogの測定範囲にする
--selective-profilescalasca
"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
読み取り専用のデータキャッシュを無効化する
--defaultveclen=LENGTH
ベクタ長を指定する(デフォルトは256)
--platform=PLATFORM
プラットフォーム(CUDAもしくはOpenCL)を指定する(デフォルトはCUDA)
--device=DEVICE
デバイスのアーキテクチャ(FermiもしくはKepler)を指定する(デフォルトは
Fermi)
OpenACC/C
オプション
意味
-acc,--openacc
OpenACC指示文を有効化する
--no-ldg
読み取り専用のデータキャッシュを無効化する
--defaultveclen=LENGTH
ベクタ長を指定する(デフォルトは256)
--platform=PLATFORM
プラットフォーム(CUDAもしくはOpenCL)を指定する(デフォルトはCUDA)
--device=DEVICE
デバイスのアーキテクチャ(FermiもしくはKepler)を指定する(デフォルトは
Fermi)
15
コンパイル方法
16
実行方法
実行方法
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
17
環境変数
環境変数
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言語
#pragmaxmpnodesp(2,4)
Fortran
!$xmpnodesp(2,4)
XMP_ONESIDED_HEAP_SIZE(GASNetおよびMPIVersion3利用時のみ)
環境変数 XMP_ONESIDED_HEAP_SIZEは,下記のようなプログラムの実行時エラーが発生した場合に変更する必要がある.
18
環境変数
[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を合計した値が,プログラム開始時に確保さ
れる.
19
Tips
Tips
一部のコードをネイティブコンパイラでコンパイルする場合
C言語の場合
Fortranの場合
インストールが失敗する場合
MPIへのPATHの確認
mpi-conduit以外のGASNetを用いた場合の注意点
omnicompilerのテスト
プロファイリングツールとの連携
Scalascaを用いたプロファイリング
tlogを用いたプロファイリング
一部のコードをネイティブコンパイラでコンパイルする場合
ネイティブコンパイラで作成したオブジェクトファイルとomnicompilerで作成したオブジェクトファイルとはリンクする
ことが可能である.ただし,下記の制限がある.
C言語の場合
例えば a.cと b.cという2つのコードがあり, a.cはネイティブコンパイラ(ここでは mpicc)を用いて, b.cはomni
compiler(ここでは xmpcc)を用いてコンパイルしたい場合は,下記のように個別に行うことが可能である.ただし,リ
ンクには必ずomnicompilerを利用する必要がある.
$mpicca.c-c
$xmpccb.c-c
$xmpcca.ob.o
Fortranの場合
基本的にはC言語と同様であるが,モジュールの利用についてのみ注意が必要になる.omnicompilerでは, .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が必要である.
$./configure--enable-mod2xmod
例えば, test.modを test.xmodというomnicompiler用のモジュールファイルに変換する場合,下記のように実行する.
$T_moduletest.mod
インストールが失敗する場合
MPIへのPATHの確認
20
Tips
whichコマンドを使って,MPIへの PATHが設定されているかを確認する.下記はDebianGNU/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
mpi-conduit以外のGASNetを用いた場合の注意点
mpi-conduit以外のGASNetを用いる場合,GASNetの制約(詳細はGASNetのREADMEの"MPIInteroperability"を参照)の
ため,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指示文を挿入する.
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//テストプログラムのバイナリの削除
21
Tips
maketestsコマンドは, ./testディレクトリ以下にテストプログラムを生成する. makerun-testsコマンドによるテス
トプログラムの実行はローカルノードで行われるため,クロスコンパイラを用いている場合は makerun-testsコマンドに
よるテストプログラムの実行を行うことはできない.クロスコンパイラを用いている場合でテストの実行を行いたい場合
は, ./testディレクトリ以下のテストプログラムに対してユーザが直接計算ノードで実行を行う必要がある.
プロファイリングツールとの連携
omnicompilerには,プロファイリングツールであるScalasca(version1.4.3で動作確認)およびtlogとの連携機能があ
る.本機能は,XcalableMPの下記指示文の実行に要する時間などを計測することができる.本機能は現時点では
XcalableMP/Cのみの対応である.
loop
reduction
gmove
bcast
reflect
barrier
task
Scalascaを用いたプロファイリング
まずScalascaをインストールし,Scalacaへの PATHを設定する.
コードに存在するすべての指示文についてプロファイリングをとりたい場合は, --profilescalascaオプションをつけて
コンパイルを行い,実行する.
$xmpcc--profilescalascaa.c
特定の指示文にのみプロファイルをとりたい場合は,その指示文に profileという節を追加し, --selective-profile
scalascaオプションをつけてコンパイルを行い,実行する.
#pragmaxmpbcast(a)profile
$xmpcc--selective-profilescalascaa.c
Scalascaを用いたプロファイリング方法の詳細はScalascaの公式サイトを参考のこと.
22
Tips
tlogを用いたプロファイリング
tlogはomnicompilerのインストール時に自動的にインストールされる.
コードに存在するすべての指示文についてプロファイリングをとりたい場合は, --profiletlogオプションをつけてコン
パイルを行い,実行する.
$xmpcc--profiletloga.c
特定の指示文にのみプロファイルをとりたい場合は,その指示文に profileという節を追加し, --selective-profile
tlogオプションをつけてコンパイルを行い,実行する.
#pragmaxmpbcast(a)profile
$xmpcc--selective-profiletloga.c
プログラム実行後に, trace.logというプロファイル結果が保存されたファイルが生成される.プロファイル結果を閲覧
する場合は, tlogviewコマンドを用いる.
$tlogviewtrace.log
23
Tips
24
制限事項
制限事項
スーパーコンピュータ「京」・FX100・FX10上の制限事項
Fortranコードにおけるmoduleの制限事項
スーパーコンピュータ「京」・FX100・FX10上の制限事項
Coarrayの数は508個まで
利用できるプロセス数は82,944まで
post指示文において利用できるタグの値は0〜14
Fortranコードにおけるmoduleの制限事項
4.Tipsの「一部のコードをネイティブコンパイラでコンパイルする場合」にある通り,moduleファイルはomnicompilerが
解析できる .xmodファイルである必要がある.
25