PGIデバッガ、プロファイラに関するFAQ

 本ページは、PGIコンパイラに付属する並列デバッガ(pgdbg)、並列プロファイラ(pgprof) に関する FAQ のページです。
© 株式会社ソフテック

PGI デバッガ(pgdbg) とプロファイラ(pgprof) に関する FAQ

 

 デバッガ(pgdbg) とプロファイラ(pgprof) の質問への回答

Question  1. Linux 上の PGI 11.0 以降で、pgdbg コマンドや pgprof コマンドでデバッグあるいはプロファイラのユーティリティを起動する際、JAVA のエラーが出力され起動できません。

Answer

 PGIのデバッガ、プロファイラのプロファイラは、JAVA ベースのアプリケーションです。pgdbgやpgprof のコマンドを起動する際に、JAVAのエラーにより起動できないことが多々あります。これは、Linux プラットフォーム上のデフォルトで使用する JAVA のバージョンと、PGIの pgdbg / pgprof が要求する JAVA のバージョンが合わないために生じます。PGI 11.0 以降では、32bit Linux あるいは、64bit Linux 用の JAVA の jre1.6.0_21 を PGI のソフトウェア実装場所にインストールしています。以下の方法で、この中の JRE ソフトウェアを明示的に指定することで、こうしたエラーなしで、使用できるようになります。以下のように、PGI_JAVA 環境変数を設定します。

以下は PGI 2011 の場合です。jre1.6.0_21が実装されている場合です。このバージョンは、
変更される場合がありますので、実際に以下の directory でそのJREバージョン名を確かめて下さい。

【Linux の場合】

(64ビット)
$ export PGI_JAVA=$PGI/linux86-64/2011/java/jre1.6.0_21/bin/java
(32ビット)
$ export PGI_JAVA=$PGI/linux86/2011/java/jre1.6.0_21/bin/java

デフォルトの JAVA の在処とそのバージョンを調べる方法

$ which java
usr/bin/java
$ java -version
java version "1.4.2"
gij (GNU libgcj) version 4.1.2 20080704 (Red Hat 4.1.2-48)
Copyright (C) 2006 Free Software Foundation, Inc.

Question  2. Windows 上の PGI コマンドプロンプトから pgdbg を起動する方法とWindowsのスタート・メニューから pgdbg を起動する方法のどちらが良いでしょうか?

Answer

 PGI Workstation for Windows では、一般に、PGI コマンドプロンプト(cygwin のシェル環境)でコンパイラのコマンド(pgfortran 等)を使用して操作します。pgdbg や pgprof 等もこの流れで、コマンドを使用して起動する方が、その後の使用上の問題が少なく使用できます。もちろん、「スタートメニュー」の中から PGI debgugger を開く方法もできますが、実行モジュールの場所やソースファイルのパス等を明示的にしてしなければいけないため、面倒です。従って、以下のように、pgdbg コマンドを起動して使用することを推奨します。ソースファイルと実行モジュールが同じ directory(foloder) に存在していた方が、ソースファイルが見つからないと言った余計な問題を排除できます。
 なお、PGI Visual Fortran ソフトウェアは、Visual Studio 上でデバッグが可能ですので、こうしたことは必要ありません。

$ pgfortran -g -O0 test.f90 (デバッグオプション -g を付けてコンパイル)
$ pgdbg test.exe  (デバッガを起動、引数は実行モジュール名)

この後、Windows 上に PGDBG のデバッガ・ユーティリティが開く。

Question  3. MPIプログラムをデバッグしたいのですが、pgdbg の起動する方法を教えて下さい?

Answer

 PGI Workstation/Server 製品の PGDBG デバッガは、1台のシステム内のマルチコアを利用してMPIプログラムを動作させる環境での MPI プロセスのデバッギング機能を有します。一方、PGI CDK for Linux 製品の場合は、ローカルノードだけでなくリモートノードを動作環境とした MPI プロセスのデバッギング機能を有します。昔と違って、マルチコア CPU 環境が普通になりましたので、MPI のデバッグに関しては、ほとんどの場合、ローカルな1台のマシン上で行う方が便利です。ここでは、1台のシステム上で MPI プロセス用のデバッガを起動する方法を説明します。これに関しては、「技術コラム」の中で紹介していますので、下記のページをご参照下さい。各製品ライセンスのMPI並列ツール(デバッガ、プロファイラ)機能の制限数については、こちらをご覧下さい

【Linux 環境で MPICH1 を使用する場合】
   PGIコンパイラによる MPICH1 の使い方(Linux)
   
【Linux 環境で MPICH2 を使用する場合(PGI CDK製品のみ)】
   PGIコンパイラによる MPICH2 の使い方(Linux)
   
【Windows 環境で MS-MPI を使用する場合】
   PGIコンパイラによる MS-MPI の使い方(Windows)

【Windows 環境で MS-MPI を使用する場合(PGI Visual Fortran製品)】
   PGIコンパイラによる MS-MPI の使い方(Windows)

Question  4. MPIプログラムのプロファイリングを行いたいのですが、pgprof を使用する方法を教えて下さい?

Answer

 PGI Workstation/Server 製品の PGPROF プロファイラは、1台のシステム内のマルチコアを利用してMPIプログラムを動作させる環境での MPI プロセスのプロファイリング機能を有します。一方、PGI CDK for Linux 製品の場合は、ローカルノードだけでなくリモートノードを動作環境とした MPI プロセスのデバッギング機能を有します。ここでは、1台のシステム上で MPI プロセス用のプロファイルを行う方法を説明しますが、これに関しては、「技術コラム」の中で紹介していますので、下記のページをご参照下さい。各製品ライセンスのMPI並列ツール(デバッガ、プロファイラ)機能の制限数については、こちらをご覧下さい

【Linux 環境で MPICH1 を使用する場合】
   PGIコンパイラによる MPICH1 の使い方(Linux)
   
【Linux 環境で MPICH2 を使用する場合(PGI CDK製品のみ)】
   PGIコンパイラによる MPICH2 の使い方(Linux)
   
【Windows 環境で MS-MPI を使用する場合(PGI Workstation製品)】
   PGIコンパイラによる MS-MPI の使い方(Windows)


Question  5. PGI Visual Fortran(PVF)環境における pgprof(プロファイラ)を使用する方法を教えて下さい?

Answer

 pgprof utility は、PVF製品とは別系統で開発されてきた経緯があり、本来はコマンドベースで pgprof を使用する環境を想定しております。Windows 上のコマンドプロンプトで、ソースファイルと 実行バイナリのファイルが同じ場所(フォルダ)に存在している環境で、pgprofを起動すると起動時に係わる問題は起きません。pgprof を使う場合は、できればコマンドベースで実施していただく方が問題なく使用できます。
 PVFを使用して実行バイナリを作成する場合、マイクロソフトの Visual Studio の「プロジェクト」のフォルダ階層のルールに従って、実行バイナリの置き場所が決まります。これが、デフォルトでは、ソースファイルの場所と異なる所にあるため、これが、pgprof の起動において問題を生じさせる原因となっています。こうしたことに関しては、この記事においても若干説明しております。
 それでは、コマンドベースでの pgprof 使用方法を説明します。ソースファイルが存在する場所(フォルダ)と実行のためのデータを同じ場所に用意して下さい。プログラム内でデータを生成して動作する場合は、データは必要ありません。 。

Windows のスタートメニューの中の「PGI VIsual Fortran」の中の「Command shells」から
「PVF 2008 cmd」を起動して下さい。コマンドプロンプトが開きます。

(1) 当該ソースファイルが存在するWindows 上のフォルダへ移動する
    以下の例では、C:\PGI\Himeno と言うフォルダまで移動する

(一例)
PGI Visual Fortran 2008
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\kato>cd c:\      Cドライブのトップへ移動

私の場合は、C:\PGIと言うフォルダ配下に、ソースプログラム群を
配置しているので、PGI と言う所まで移動する。さらに Himeno と言う
フォルダまで移動する。

C:\>cd PGI
C:\>cd Himeno
C:\PGI\Himeno>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 6895-CF34 です

 C:\PGI\Himeno のディレクトリ

2002/02/20  16:26             7,845 himenoBMTxp.f90
               1 個のファイル               7,845 バイト
               2 個のディレクトリ  16,648,011,776 バイトの空き領域

以下の例では3種類のプロファイリングの方法を説明します。

(1) ソースラインレベル(-Mprof=lines)
(2) function レベル  (-Mprof=func)
(3) pgcollect utilityを使用してラインレベルのプロファイル
  (特別なプロファイル用のコンパイルオプションは必要なし)
  (参考)http://www.softek.co.jp/SPG/Pgi/TIPS/public/accel/gpu-accel1.html

---------------------------------------------------------------------
(1)ソースラインレベルでのプロファイルの場合、-Mprof=lines を入れてコンパイルを行う

●コンパイル(デバッグモードではなく、最適化モードでプロファイルを行います)
 複数のソースファイルがある場合は、pgfortran ....  *.f で行う

C:\PGI\Himeno>pgfortran -Minfo=ccff -fastsse -Minfo -Mprof=lines himenoBMTxp.f90

initmt:
    235, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    236, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    237, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    238, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    239, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    240, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    241, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    243, Loop not vectorized/parallelized: too deeply nested
         Generated 3 alternate versions of the loop
         Generated vector sse code for the loop
    244, Generated 5 alternate versions of the loop
         Generated vector sse code for the loop
    245, Loop not vectorized/parallelized: too deeply nested
         Generated 3 alternate versions of the loop
         Generated vector sse code for the loop
    248, Generated 3 alternate versions of the loop
         Generated vector sse code for the loop
jacobi:
    291, Loop not vectorized/parallelized: too deeply nested
    295, Generated 4 alternate versions of the loop
         Generated vector sse code for the loop
    315, Generated 4 alternate versions of the loop
         Generated vector sse code for the loop

●実行する
C:\PGI\Himeno>himenoBMTxp.exe
 Select Grid-size:
 Grid-size=
            XS (64x32x32)
            S  (128x64x64)
            M  (256x128x128)
            L  (512x256x256)
            XL (1024x512x512)
m
  mimax=          257  mjmax=          129  mkmax=          129
  imax=          256  jmax=          128  kmax=          128
  Time measurement accuracy : .10000E-05
  Start rehearsal measurement process.
  Measure the performance in 3 times.
   MFLOPS:    877.0051       time(s):   0.4690000000000000        1.6945378E-03
 Now, start the actual measurement process.
 The loop will be excuted in          383  times.
 This will take about one minute.
 Wait for a while.
  Loop executed for           383  times
  Gosa :   1.0751059E-03
  MFLOPS:    847.1609       time(s):    61.98500000000000
  Score based on Pentium III 600MHz :    10.22647

●プロファイルのデータ(pgprof.out)が生成されているか、確認
C:\PGI\Himeno>dir pgprof.out
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 6895-CF34 です

 C:\PGI\Himeno のディレクトリ

2011/08/02  10:43             2,718 pgprof.out    <=== 存在する
               1 個のファイル               2,718 バイト
               0 個のディレクトリ  16,644,636,672 バイトの空き領域

● pgprof ツールを起動する
C:\PGI\Himeno>pgprof pgprof.out
この後、GUIが表示されてプロファイル結果が出る。なお、関数名をダブルクリックすると、
各ルーチンのソースプログラムが表示され、プロファイル結果が見えるようになる。

------------------------------------------------------------------------
(2)function レベルでのプロファイルの場合、-Mprof=func を入れてコンパイルを行う

●コンパイル
C:\PGI\Himeno>pgfortran  -Minfo=ccff -fastsse -Minfo -Mprof=func himenoBMTxp.f90
initmt:
    235, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    236, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    237, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    238, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    239, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    240, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    241, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    243, Loop not vectorized/parallelized: too deeply nested
         Generated 3 alternate versions of the loop
         Generated vector sse code for the loop
    244, Generated 5 alternate versions of the loop
         Generated vector sse code for the loop
    245, Loop not vectorized/parallelized: too deeply nested
         Generated 3 alternate versions of the loop
         Generated vector sse code for the loop
    248, Generated 3 alternate versions of the loop
         Generated vector sse code for the loop
jacobi:
    291, Loop not vectorized/parallelized: too deeply nested
    295, Generated 4 alternate versions of the loop
         Generated vector sse code for the loop
    315, Generated 4 alternate versions of the loop
         Generated vector sse code for the loop
●実行
C:\PGI\Himeno>himenoBMTxp.exe
 Select Grid-size:
 Grid-size=
            XS (64x32x32)
            S  (128x64x64)
            M  (256x128x128)
            L  (512x256x256)
            XL (1024x512x512)
m
  mimax=          257  mjmax=          129  mkmax=          129
  imax=          256  jmax=          128  kmax=          128
  Time measurement accuracy : .10000E-05
  Start rehearsal measurement process.
  Measure the performance in 3 times.
   MFLOPS:    1463.761       time(s):   0.2809990000000000        1.6945378E-03
 Now, start the actual measurement process.
 The loop will be excuted in          640  times.
 This will take about one minute.
 Wait for a while.
  Loop executed for           640  times
  Gosa :   9.1511058E-04
  MFLOPS:    1418.138       time(s):    61.87500100000000
  Score based on Pentium III 600MHz :    17.11900

●プロファイルのデータ(pgprof.out)が生成されているか、確認
C:\PGI\Himeno>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 6895-CF34 です

 C:\PGI\Himeno のディレクトリ

2011/08/02  10:31             3,866 bound.mod
2011/08/02  10:31            62,464 himenoBMTxp.dwf
2011/08/02  10:31           795,648 himenoBMTxp.exe
2002/02/20  16:26             7,845 himenoBMTxp.f90
2011/08/02  10:31         1,805,312 himenoBMTxp.pdb
2011/08/02  10:31             9,365 mtrx.mod
2011/08/02  10:31             1,163 others.mod
2011/08/02  10:37               665 pgprof.out     <============
2011/08/02  10:31             3,853 pres.mod
2011/08/02  10:31             5,837 work.mod
              10 個のファイル           2,696,018 バイト
               2 個のディレクトリ  16,644,734,976 バイトの空き領域

●pgprof ツールを起動する
C:\PGI\Himeno>pgprof pgprof.out
この後、GUIが表示されてプロファイル結果が出る。

-------------------------------------------------------------------

(3) pgcollect utilityを使用する

●コンパイル(一般的な最適化オプションでよい)
C:\PGI\Himeno>pgf90 -fastsse -Minfo=ccff -Minfo himenoBMTxp.f90
initmt:
    235, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    236, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    237, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    238, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    239, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    240, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    241, Memory zero idiom, array assignment replaced by call to pgf90_mzero4
    243, Loop not vectorized/parallelized: too deeply nested
         Generated 3 alternate versions of the loop
         Generated vector sse code for the loop
    244, Generated 5 alternate versions of the loop
         Generated vector sse code for the loop
    245, Loop not vectorized/parallelized: too deeply nested
         Generated 3 alternate versions of the loop
         Generated vector sse code for the loop
    248, Generated 3 alternate versions of the loop
         Generated vector sse code for the loop
jacobi:
    291, Loop not vectorized/parallelized: too deeply nested
    295, Generated 4 alternate versions of the loop
         Generated vector sse code for the loop
    315, Generated 4 alternate versions of the loop
         Generated vector sse code for the loop

●pgcollect utility配下で実行

C:\PGI\Himeno>pgcollect -time himenoBMTxp.exe
 Select Grid-size:
 Grid-size=
            XS (64x32x32)
            S  (128x64x64)
            M  (256x128x128)
            L  (512x256x256)
            XL (1024x512x512)
m
  mimax=          257  mjmax=          129  mkmax=          129
  imax=          256  jmax=          128  kmax=          128
  Time measurement accuracy : .10000E-05
  Start rehearsal measurement process.
  Measure the performance in 3 times.
   MFLOPS:    1318.319       time(s):   0.3120000000000000        1.6945378E-03
 Now, start the actual measurement process.
 The loop will be excuted in          576  times.
 This will take about one minute.
 Wait for a while.
  Loop executed for           576  times
  Gosa :   9.4995473E-04
  MFLOPS:    1361.596       time(s):    58.00000000000000
  Score based on Pentium III 600MHz :    16.43645

target process has terminated, writing profile data

●pgprof を起動(pgprof.out ファイルを読み込む)

C:\PGI\Himeno>pgprof -exe himenoBMTxp.exe

ここから GUIベースで行う。なお、関数名をダブルクリックすると、ソースが表示される。