Comments
Transcript
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