2014 年 2 月 株式会社ソフテック PGI 2014 の新コンパイラ・オプションと従来との変更部分 以下のオプションは、PGI 2014 から追加あるいは、修正されたものです。 -Mscalapack コンパイルオプションの追加 (Linux 版、OS X 版) -tp に新しいターゲットプロセッサ引数の追加 haswell は、Intel hasweli プロセッサベースのコード生成を行う ivybridge は、Intel Ivybridge プロセッサベースのコード生成を行う ■ Required サブオプション OpenACC コンパイラのデフォルトの挙動が PGI 14.1 以降変更されました。OpenACC コンパイラは、 もし、アクセラレータコードの生成が出来なかった場合、コンパイル時にエラーとなり停止します。但 し、 このデフォルトの挙動に関して required サブオプションを指定することで変更することができます。 norequired サブオプションを指定すると、こうした状況でエラーとはなりませんが、現状ではお勧めし ません。 以前のバージョンではこうした状況に対して、コンパイラは警告メッセージを出すだけでした。その 場合、GPU コードを生成できない compute kernel の部分に対してホスト上の CPU 側のコードを生成し ていました。このような以前のバージョンにおける振る舞い方は、誤った結果を生む場合があります。 例えば、compute kernels が data 領域の中にある場合、ホストとデバイスメモリの値に不一致が起こり うる場合があります。 現在のコンパイラ実装は、以下の-acc、-tano の各オプションにおいて、required がデフォルトとなっ ております。 -acc=required、あるいは -ta=tesla:required、あるいは -ta=radeon:required ■ Accelerator オプション (注意) 以前のバージョンで使用できた-ta=nvidia オプションは PGI 2014 で廃止されました。 今まで、 -ta=nvidia オプションを Makefile 等の中で使用していたものは、-ta=tesla に書き換えてください。 -acc オプションは、OpenACC ディレクティブを解釈させるためのオプションです。明示的に-ta オプ ションを指定しないコマンドラインでは、-acc オプションを指定すると-ta=tesla,host を暗に指定され たものとして扱います。詳細につきましては、以下をご覧ください。 http://www.softek.co.jp/SPG/Pgi/TIPS/opt_accel.html ■ -ta オプション -ta オプションは、ターゲット・アクセラレータと生成するコードの種類を定義するものです。この オプションは、サポートしているプラットフォーム上の Fortran、C、C++で有効です。 Syntax -ta=tesla(:tesla_suboptions,), radeon(:radeon_suboptions),host 上記のように三つのサブオプションがあります。PGI 2014 より radeon が追加されました。 1 © SofTek Systems, Inc. 2013 tesla(:tesla_suboptions,) radeon(:radeon_suboptions) host :NVIDIA GPU をターゲットとして指定します。 :AMD GPU/APU をターゲットとして指定します。 :ホスト(CPU)コードも作成します。 default デフォルトは、-ta=tesla,host Tesla Accelerator Targetwを選択する Tesla(NVIDIA)アクセラレータをターゲットとして選択する場合は、tesla(:tesla_suboptions)を指 定します。また、このオプションには生成するコードのタイプ(アーキテクチャ)も指定できます。 -ta=tesla は、以下のサブオプションを有しています。次に示す例は、tesla がアクセラレータ・ター ゲットであり、compute capability 3.0 のコードを生成する場合のコマンドの指定方法です。 $ pgfortran –ta=tesla:cc30 以下の下線部は、PGI 2014 以降のサブオプションです。 cc10 cc11 cc12 cc13 cc1x cc1+ compute capability 1.0 のコード生成 compute capability 1.1 のコード生成 compute capability 1.2 のコード生成 compute capability 1.3 のコード生成 compute capability 1.x のコード生成 compute capability 1.x, 2.x, 3.x のコードを生成 (PGI 14.1 以降) cc20 cc2x cc2+ cc30 cc35 cc3x compute capability 2.0 のコード生成. compute capability 2.x のコード生成. compute capability 2.x, 3.x のコード生成 (PGI 14.1 以降) compute capability 3.0 のコード生成. compute capability 3.5 のコード生成.. compute capability 3.x のコード生成. cc3+ [no]debug fastmath fermi fermi+ [no]flushz compute capability 3.x のコード生成 (PGI 14.1 以降) デバイスコード内にデバッグ情報を生成する[しない] (PGI 14.1 以降) fast math ライブラリを使用 cc2x と同じ cc2+と同じ GPU 上の浮動小数点演算の flush-to-zero モードを制御。デフォルトは noflushz keep ernel バイナリファイル(.bin)、 kernel ソースファイル(.gpu)、 portable assembly(.ptx) ファイルを保持し、各々ファイルとして出力する (PGI 13.10 以降) kepler cc3x と同じ kepler+ cc3+と同じ llvm llvm ベースのバックエンドを使用してコードを生成する maxregcount:n GPU 上で使用するレジスタの最大数を指定。 nofma fused-multiply-add 命令を生成しない noL1 グローバル変数をキャッシュするためのハードウェア L1 データキャッシュの使 用を抑止する pin デフォルトを pin ホストメモリ(割付)としてセットする (PGI 14.1 以降) [no]rdc 異なるファイルに配置されたデバイスルーチンをそれぞれ分割コンパイルし、リン クが出来るようにする。cc2x 以降、CUDA 5.0 以降の機能を使用する 2 © SofTek Systems, Inc. 2013 [no]required アクセラレータコードを生成出来なかった場合、コンパイルエラーとする[しない] Radeon Accelerator Target を選択する(PGI 14.1 以降) radeon(AMD)アクセラレータをターゲットとして選択する場合は、radeon(:redeon_suboptions) を指定します。また、このオプションには生成するコードのタイプ(アーキテクチャ)も指定できま す。次に示す例は、radeon がアクセラレータ・ターゲットであり、Cape Verde アーキテクチャのコー ドを生成する場合のコマンドの指定方法です。 $ pgfortran –ta=radeon:capeverde buffercount:n compute capability 1.0 のコード生成 capeverde Radeon Cap Verde のコード生成 keep ernel バイナリファイル(.bin)、 kernel ソースファイル(.gpu)、 portable assembly(.ptx) ファイルを保持し、各々ファイルとして出力する llvm llvm ベースのバックエンドを使用してコードを生成する [no]required アクセラレータコードを生成出来なかった場合、コンパイルエラーとする[しない] spectre Radeon Spectre のコード生成 tahiti Radeon tahiti のコード生成 Host オプション host オプションは、OpenACC 領域をホスト上で実行するためのコードを生成します。 -ta=host フラグにはサブオプションはありません。 複数のターゲット -ta=tesla,radeon と指定すると複数のターゲット用のコードを生成出来ます。host は複数のターゲ ットの一つとして扱われ、-ta=tesla,host は、ホストコードと NVIDIA コードの二つが含まれた Unified Binary を生成します。このバイナリは、NVIDIA の GPU 上で実行出来るコードでもあるし、アクセラ レータが付いていないシステムでも CPU 上で実行できるコードとなります。 Relocatable デバイスコード rdc オプションは、-ta あるいは-Mcuda フラグにおいて有効なオプションです。これはリローケー タブルなデバイスコードを生成するように指示するものです。PGI 14.1 以降は、このオプションは NVIDIA ターゲットデバイスに対して、OpenACC と CUDA Fortran 用にリンク&コード生成においてデ フォルトとなりました。 但し、ユーザレベルで、このリロケータブル・コード生成を抑止出来ます。これは、-ta=tesla:nordc、 -Mcuda=nordc を指定することにより行います。なお、compute capabirilty 1.x と GPU と AMD radeon ターゲットを指定する場合は、デフォルトで抑止されます(そもそも、機能がありません)。 LLVM/SPIR とネイティブ GPU コード生成 アクセラレータコード生成において、PGI 14.x は、以下の二つのオプションを持っています。 レガシーモードで、PGI は低レベル CUDA C あるいは Open CL コードを生成します(これはデ フォルトです) PGI 14.1 以降、PGI は、LLVM (or SPIR)ベースの中間(言語)表現を生成できます。これを使 用するには、NVIDIA ターゲット用には、-ta=tesla:llbm、AMD Radeon ターゲット用には、 -ta=radeon:llvm を指定します。-ta=tesla:llbm を指定する場合、CUDA 5.5 以上の機能が必要 3 © SofTek Systems, Inc. 2013 です。 DWRARF デバッグ・フォーマット PGI 14.1 は GPU コードにおける dwarf 情報の生成を行った最初のリリースとなります。dwarf 生成 を有効化するためには、-g オプションを指定する必要があります。 Dwarf 生成には、LLVM コード生成機能の使用が必要となります。今後、NVIDIA 用として、host、 デバイス、そして両方の上でデバッグすることが出来るように dwarf 情報を生成することがか可能と なります。もし、両方のターゲットに-g を適用したくない場合、PGI は、以下の例のように nodebug サブオプションをサポートしています。 -acc –g の指定では、-ta=tesla,host –O0 を含んでいます。また、ホスト上における–g 、cuda 5.5 を使用しているデバイス上では-g llvm サブオプションを含んでいます。 -acc –ta=tesla:debug は、デバイス上のデバッグであるため、これには llvm と CUDA 5.5 サブオプ ションを含んでいます。 -acc –g –ta=tesla:nodebug は、ホスト上のデバッグ情報を含み、デバイス用にはデバッグ情報を生 成しないと言う意味となります。 -tp の指定方法の変更 -tp スイッチオプションは、真のターゲットプロセッサを指定する方式に変更されました。以前のリ リースでは、ターゲットの指定だけでなく、32 ビット用か 64 ビット用のバイナリ生成を行うを指定 することが出来ました。例えば、-ta shanggai-32 フラグは、-ta shanghai と-m32 の二つのフラグを指 定したものと等価です。 -m32 と-m64 を伴った-tp フラグの指定方法は、当該ターゲットの 32 ビット用か 64 ビット用のバ イナリ生成を選択するためのオプションです。例えば、-tp shanghai –m32 は、AMD shanghai プロセ ッサ用に最適化された 32 ビットバイナリを生成することを意味します。同様に-tp shanghai –m64 は 64 ビットバイナリを作成するためのオプションです。 -m32 あるいは-m64 を指定せずに、 -tp shanghai だけを指定した場合、 環境変数の PATH 指定で 32bit コンパイラ環境を使用するようにしていれば、32 ビットバイナリを生成し、64bit コンパイラ環境で あれば、64 ビットバイナリを生成します。 MPI の使用 PGI コンパイラは、いくつかの MPI ライブラリ用に MPI プログラムをビルド出来るように、-Mmpi オプションを提供しています。このオプションを付加することにより、当該インクルードファイルと 当該 MPI ライブラリのリンクを行って実行バイナリを作成できます。以下の表は、PGI が提供する MPI distributions を 選 択 す る た め の -Mmpi の サ ブ オ プ シ ョ ン を 示 し ま し た 。 な お 、 PGI Workstation/Server 製品は、-Mmpi=mpich のみ使用できます。その他の MPI ライブラリは、PGI CDK 製品で使用可能です。詳細につきましては、以下の URL をご覧ください。 http://www.softek.co.jp/SPG/Pgi/TIPS/opt_mpi.html MPI ライブラリ種類 コンパイル時に必要なオプション MPICH1 -Mmpi=mpich1(PGI 14.1以降廃止) MPICH2 -Mmpi=mpich2(PGI 14.1 以降廃止) 4 © SofTek Systems, Inc. 2013 MPICH v3 -Mmpi=mpich MS-MPI -Mmpi=msmpi MVAPICH1 -Mmpi=mvapich1(PGI 14.1 以降廃止) MVAPICH2 MVAPICH2 のラッパーコマンド mpif90,mpicc 等を使用する Open MPI Open MPI のラッパーコマンド mpif90,mpicc 等を使用する SGI MPI -Mmpi=sgimpi 以 上 5 © SofTek Systems, Inc. 2013
© Copyright 2024 Paperzz