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
© Copyright 2024 Paperzz