PGI 6 - ソフテック

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