Crayコンパイラ

バージョン システムA システムB システムC 備考
9.1.3 + + + 2020年3月導入。C,C++コンパイラはClang 9ベース
9.1.3 classic + + + 2020年3月導入
9.0.2 + + + 2019年10月導入。C,C++コンパイラはClang 9ベース
9.0.2 classic + + + 2019年10月導入
8.7.9 + (default) + (default) + (default) 2019年3月導入
8.7.6 + + + 2018年12月導入
8.6.5 + + + 2018年3月導入
8.6.3 + 2017年12月導入
8.6.1 + 2017年8月導入
8.5.8 + 2017年3月導入
8.5.5 + + + 2016年12月導入
8.5.2 + 2016年10月導入

+ : 利用可能
― : 利用不可

バージョン moduleファイル名
9.1.3 cce/9.1.3
9.1.3 classic cce/9.1.3-classic
9.0.2 cce/9.0.2
9.0.2 classic cce/9.0.2-classic
8.7.9 cce/8.7.9
8.7.6 cce/8.7.6
8.6.5 cce/8.6.5
8.6.3 cce/8.6.3
8.6.1 cce/8.6.1
8.5.8 cce/8.5.8
8.5.5 cce/8.5.5
8.5.2 cce/8.5.2

システムAでは,ログインした時点で,Crayコンパイラがデフォルトで設定されています.

$ module list
Currently Loaded Modulefiles:
x)  cce/8.3.0   x) PrgEnv-cray/5.2.14

システムB,Cにログインした時点では,Intelコンパイラがデフォルトで設定されています.以下のようにmoduleコマンドを実行し,コンパイラを切り替えてください.

$ module switch PrgEnv-intel PrgEnv-cray

コンパイラのバージョンは,上表に記載のデフォルトのバージョンが設定されています. Crayコンパイラのバージョンを切り替えたい場合は,PrgEnv-cray がロードされている状態で,以下のようにmoduleコマンドまたはPrgEnvコマンドを実行してください.

$ module switch cce/8.0.4 cce/8.0.6
$ PrgEnv cce 8.0.6

ログイン時に自動で環境設定を行いたい場合は,ログインシェルの起動ファイルに必要なmoduleコマンドを記述してください.詳細は 環境設定 をご覧ください. moduleコマンドの詳細は Modules をご覧ください.

Cray C Compiler および Cray C++ Compiler は, バージョン9より,これまでの独自設計から Clang ベースの設計へ移行しました.Clang版はこれまでとオプション体系が大幅に異なります.主なオプション体系はオプションの項目をご覧ください.なお, Cray Fortran Compiler は Flang ではなく引き続き独自設計版のみ提供となりますので,これまでとオプション体系に変更はありません.

なお,バージョン9時点では,これまでの独自設計ベースの Cray Compiler も,classic版として用意されています.classic版のオプション体系は以前のものと変わりません.classic版のモジュール名は, cce/(バージョン名)_classic です.

module switch コマンドや Prgenv コマンドでクレイコンパイラのバージョン9に切り替えた直後は,Clang版がロードされておりますので,classic版を使われる場合はcceモジュールのclassic版への切り替えをお願いします.

下記の資料で紹介しておりますので,ご参照ください.

CDT 19.09

クレイコンパイラ8.6.1は,cceのモジュールをcce/8.6.1モジュールへスイッチするだけでは利用できません. craypeとcray-mpich(システムBではcray-impi),およびcray-libsciも,下記のようにそれぞれバージョン2.5.12および7.6.0にスイッチして下さい.

$ module switch craype/2.5.12
$ module switch cray-mpich/7.6.0
$ module switch cray-libsci/17.06.1

あるいは,PrgEnvコマンドを使うと,上記のモジュールを一度で切り替えることができます.

$ PrgEnv cce 8.6.1

8.6.1同様,craypeとcray-mpich(システムBではcray-impi),およびcray-libsciを対応するバージョンへスイッチする必要があります. システムAでは,PrgEnvコマンドの利用をお勧めいたします. システムBCでは,お手数ですが手動でmodule switchください.

言語 コマンド 実行形式
Fortran ftn ftn [オプションの並び] ファイル名の並び
C cc cc [オプションの並び] ファイル名の並び
C++ CC CC [オプションの並び] ファイル名の並び

オプション名 説明
-o FILENAME オブジェクトファイルの名前を指定します.
-h omp OpenMP指示子を有効にしてコンパイルします(デフォルトで付与されます).
-h noomp OpenMP指示子を無効にしてコンパイルします.
-h autothread 自動並列化を行います.
-O0/-O1/-O2/-O3 最適化のレベルを指定します(デフォルトは -O2).
-h msgs 実施した最適化についての情報を表示します.
-h negmsgs 実施しなかった最適化についての情報を表示します.
-h add_paren 演算子+,-,*による演算が連続する場合,左から順に計算を行います.
-h pic 2Gbyteを超えるメモリをサポートします.(下記の-dynamicを併用してください)
-dynamic ライブラリを動的リンクします
-g デバッグ情報を生成します.

オプション名 説明
-ra コンパイル時レポートを作成します.
-m2 すべての警告メッセージを表示します.
-eI 型宣言されていない変数の使用をエラーと判定します.
-Rb 配列の領域外参照をエラーと判定します.
-en Fortran標準外機能に関する情報を表示します.
-e0 初期化されていないスタック変数を,数値は0,文字列はNULに初期化します.
-ez allocate文でメモリを動的に割り付けた際に,値を0で初期化します.
-f fixed プログラムが固定形式で記述されていることを指示します.
-f free プログラムが自由形式で記述されていることを指示します.
-em モジュール機能を有効にします.
-h byteswapio ビッグエンディアン形式のファイルをサポートします.
-ev サブルーチン中のローカル変数の総容量が2Gbyteを超える場合をサポートします.
-G1/-G2/-Gfast 最適化を有効にした状態で,デバッグ情報を生成します.

オプション名 説明
-h list=a コンパイル時レポートを作成します.
-h zero 初期化されていないスタック変数を,0に初期化します.

下記オプションはClang準拠のため,classic版と挙動が完全には一致しない場合があります

オプション名 説明
-o FILENAME オブジェクトファイルの名前を指定します.
-fopenmp OpenMP指示子を有効にしてコンパイルします.(デフォルト無効)
-O0/-O1/-O2/-O3 最適化のレベルを指定します(デフォルトは -O0).-O3 -ffast-math がclassic版の -O3 相当となります
-ffast-math 浮動小数点演算の誤差を一定許容することで,より踏み込んだ最適化を行います.
-fsave-optimization-record 実施した最適化についての情報を生成し,ファイルに保存します.
-mcmodel=medium 2Gbyteを超えるメモリをサポートします.(下記の-dynamicを併用してください)
-dynamic ライブラリを動的リンクします(デフォルト有効)
-static ライブラリを静的リンクします
-g デバッグ情報を生成します.
-Wall 警告メッセージを有効にします

Clang版クレイコンパイラの Fortran は,Flang ではなく引き続き独自設計版となります. オプションは"オプション (classic版)"を参照して下さい.

$ ftn test.f90           # Fortranの例
$ cc test.c              # C言語の例
$ CC test.cpp            # C++の例
$ tssrun ./a.out         # 実行

$ ftn -h autothread -h noomp test.f90
$ tssrun -A p=1:t=4:c=4 ./a.out # 並列数4を指定して実行

OpenMPは,プログラムの並列化のためのオープン規格です. ソースコードに#pragma ompで始まる指示を書き込み,所定のオプションをつけてコンパイルするだけで,コンパイラに自動で並列化を行わせることができます.

OpenMPへの指示を書き込んだソースコードをコンパイルするには,-h ompオプションをつけます.

  • classic版

    $ cc -h omp test.c
  • Clang版

    $ cc -fopenmp test.c

コンパイルしたプログラムを実行する時,-Aオプションでtとcに並列数を指定すると,その並列数でプログラムが実行されます.

$ tssrun -A p=1:t=8:c=8 ./a.out # 並列数8を指定して実行

Cray Fortran コンパイラは,プログラムの誤りや通知すべき情報があるときに,以下に示す形式でメッセージを出力します.

ftn-XXX crayftn: YYY MAIN, File = ファイル名, Line = 行番号, Colum = 桁位置
メッセージ本文
  • XXX : メッセージの通し番号
  • YYY : メッセージ種別(ERROR/WARNING/CAUTION/NOTE/COMMENT/ANSI)

出力例

ftn-1197 crayftn: ERROR MAIN, File = test.f90, Line = 27, Column = 28
The array subscript for dimension 2 does not fall within the defined range.

Cray C/C++ コンパイラは,プログラムの誤りや通知すべき情報があるときに,以下に示す形式でメッセージを出力します.

CC-XXX craycc: YYY File = ファイル名, Line = 行番号
メッセージ本文
  • XXX : メッセージの通し番号
  • YYY : メッセージ種別(ERROR/WARNING/CAUTION/NOTE/COMMENT)

出力例

CC-175 craycc: WARNING File = test.c, Line = 27
The indicated subscript is out of range.

コンパイル時メッセージの詳細を確認するために,explain コマンドを利用できます.

$ explain ftn-XXX   (Fortran)
$ explain CC-XXX   (C/C++)

**実行例**
$ explain ftn-1197
Error : The array subscript for dimension %d does not fall within the defined range.
An array reference was encountered where a subscript was out of bounds for the array. (略)

  • (Q-1) コンパイル時に,次のようなエラーが発生します.
sample.f90:32: relocation truncated to fit: R_X86_64_32S against `.bss'
sample.f90:33: additional relocation overflows omitted from the output
  • (A-1) プログラム中で使用するメモリ量が2GBを越えていると考えられます.コンパイル時に,-h pic -dynamic オプションを指定してください.

  • (Q-2) コンパイル時に,次のようなエラーが発生します.

sample.s:837: Error: 0x9ab5c0f0 out range of signed 32bit displacement
  • (A-2) Fortranプログラムのサブルーチン中のローカル変数で使用するメモリ量が2GBを越えていると考えられます.コンパイル時に,-ev オプションを指定してください.

  • (Q-3) FortranプログラムのOPEN文でCONVERT指定子を記述すると,コンパイル時に,次のようなエラーが発生します.

ftn-73 crayftn: ERROR MAIN, File = sample.f90, Line = 6, Column = 30
This control item specifier is not allowed for this I/O statement.
  • (A-3) OPEN文中でのCONVERT指定子はFortran標準規格には存在せず,Crayコンパイラでは対応していません.そのため,Cray Fortranコンパイラではビッグエンディアン形式とリトルエンディアン形式の両方のファイルを同一プログラムで読み込むことはできません.

  • (Q-4) 実行時に,次のようなエラーが発生します.

lib-4211 : UNRECOVERABLE library error
  A WRITE operation tried to write a record that was too long.

Encountered during a sequential formatted WRITE to unit 11
Fortran unit 11 is connected to a sequential formatted text file: "fort.11"
 Current format:  1000 FORMAT(1000(f7.5,1x))
  • (A-4) Cray Fortranコンパイラではデフォルトで1行当たり1024文字しか出力できないという制限が存在するために発生するものです.OPEN文中でRECL指定子を用いて,recl=2048のように1行当たりの文字数を指定してください.

  • (Q-5) MPIプログラムでMPI_LONG_DOUBLE型を使用すると,実行時に,次のようなエラーが発生します.

MPI_Irecv(110): Null Datatype pointer
  • (A-5) Crayコンパイラでは,MPI_LONG_DOUBLE型をサポートしていませんので,MPI_DOUBLE型をご利用ください.なお,システムAでMPIを使用される場合,Intelコンパイラ(PrgEnv-intel),およびGNUコンパイラ(PrgEnv-gnu)がMPI_LONG_DOUBLE型に対応しています.

それぞれのシステムで下記のMPIライブラリが利用できます.

Library System A System B,C
Cray MPIライブラリ +
Cray IntelMPI(クレイ環境からIntel MPIを利用するラッパー) +

各システムでCrayコンパイラを利用する場合,以下の数値計算ライブラリを利用できます.各ライブラリの利用方法については,個別のページをご覧ください.

Library System A System B,C
Cray LibSci Library + +
IMSL Library AU

+ : すべてのユーザが利用可能
AU : 学術研究機関限定で利用可能
― : 利用不可

クレイのコンパイラとライブラリは、併用可能なバージョンの組み合わせに制約があります。 クレイコンパイラ(cce)とクレイMPI(cray-mpich)、および、クレイコンパイラ(cce)とクレイLibSci(cray-libsci)は、それぞれ下記の表に示す組み合わせのモジュールが同時にロード可能です。

  • cceとcray-mpichの関係
mpi\cce 8.4.6 8.5.2 8.5.5 8.5.8 8.6.1 8.6.3 8.6.5 8.7.6 8.7.9
7.3.3 x x x x x x x x
7.4.2 x x x x x x
7.5.0 x x x x x x
7.5.3 x x x x x x
7.6.0 x x x x
7.6.3 x x x x
7.7.0 x x x x
7.7.3 x x x x
7.7.6 x x x x
  • cceとcray-libsciの関係
libsci\cce 8.4.6 8.5.2 8.5.5 8.5.8 8.6.1 8.6.3 8.6.5 8.7.6 8.7.9
16.03.1
16.07.1 x
16.11.1 x
16.11.1 x
17.06.1 x x x x
17.09.1 x x x x
18.03.1 x x x x
18.07.1 x x x x
19.02.1 x x x x

上記以外のモジュールの組み合わせをロードした場合、コンパイル時に以下の形式のエラーメッセージが表示され、コンパイルできません。

Error:
cray-mpich 7.7.6 is not compatible with cce 8.5.8.
Either switch to cce/8.6.0 or later, or switch to cray-mpich earlier than 7.6.0.

CCE 8.6以降のリリースノートは,ドキュメント形式では提供されなくなりましたので, $ module help cce/<version> で見られる情報をご参照ください.


Copyright © Academic Center for Computing and Media Studies, Kyoto University, All Rights Reserved.