PGIコンパイラの使い方


佐野正樹


2001.11.25

原稿執筆時のバージョン

環境変数の設定 (bash)

.profile などに書いておく

export PGI=/home/local/pgi
export PATH=$PATH:/home/local/pgi/linux86/bin
export MANPATH=$MANPATH:/home/local/pgi/man

コンパイルの仕方

  1. C の場合
    $ pgcc hello.c -o hello
  2. C++の場合
    $ pgCC hello.cpp -o hello

コンパイル時の注意点

ヘッダについて

PGIでは,C のヘッダ(stdio.h, stdlib.h など)から派生したC++ヘッダ(cstdio, cstdlib など)は用意されていない.
解決策としては,以下のものが挙げられる.
  1. G++ がインストールされている場合には,G++ のヘッダが格納されているディレクトリを,-Iオプションなどを使用してインクルードパスに加える.このとき,iostream などのヘッダはPGIのものを用いるようにする必要がある.
  2. 該当するヘッダを,プログラムのあるディレクトリにコピーする.
  3. 該当するヘッダを使用しない.例えば,cstdio は,ネームスペースを無視すれば,stdio.hで代用できる.

ライセンスについて

現在のGregorでは,マスターノード以外(pc3など)でコンパイルしようとすると,以下のエラーが出る.(pgccの場合)

pgcc-linux86: LICENSE MANAGER PROBLEM: Invalid host (-9,57)

MPICH の使用法

他のコンパイラでコンパイルされた MPICH を使用する場合

例えば,GCCでコンパイルされたMPICHが /usr/local/mpich-gcc にインストールされているとする.PGIからこれを使用するには,
$ pgcc -c hello.c -I/usr/local/mpich-gcc/include     # mpi.h などのため
$ pgcc -o hello hello.o -L/usr/local/mpich-gcc/lib -lmpich -lm     # MPICH のライブラリをリンク
とする

MPICH を,PGIを用いてコンパイルする場合

  1. ソースとパッチのダウンロード と展開
    ソース : ftp://ftp.mcs.anl.gov/pub/mpi/mpich.tar.gz
    パッチ : ftp://ftp.mcs.anl.gov/pub/mpi/patch/1.2.2/patch.all

    適当なディレクトリに展開
    $ tar xvfz mpich.tar.gz
    $ mv patch.all mpich-1.2.2.3
    $ cd mpich-1.2.2.3
    パッチを当てる.
    $ patch -p0 < patch.all
  2. configure
    ./configure -cc=${PGI}/linux86/bin/pgcc -c++=${PGI}/linux86/bin/pgCC -fc=${PGI}/linux86/bin/pgf77 -cflags="-Msignextend -tp px -DUSE_U_INT_FOR_XDR -DHAVE_RPC_RPC_H=1" -opt=-fast -fflags="-tp px" -c++flags="-tp px" -f90flags="-tp px" -f90=${PGI}/linux86/bin/pgf90 -prefix=/home/msano/mpich-pgi --with-comm=shared 2>&1 | tee configure.log
    ※ 備考 Old style arguments to configure were found: というワーニングが出る.
  3. make
    $ make 2>&1 | tee make.log
    $ pushd examples/test
    $ make testing 2>&1 | tee make_testing.log
    $ popd
    ※ 備考 make testing は,[Interrupted] と言われて途中で止まる.止まる場所は不定.原因不明.
    $ make install 2>&1 | tee make_install.log
  4. 必要に応じて,${PREFIX}/share/machines.LINUX を編集
  5. 動作確認
    ディレクトリ ${PREFIX}/examples/ において,以下のコマンドでサンプルプログラムを実行する.
    $ make clean
    $ make
    $ ../bin/mpirun -np 4 cpi

参考