本ページは、PGIコンパイラに付属する並列デバッガ(pgdbg)、並列プロファイラ(pgprof) に関する FAQ のページです。
© 株式会社ソフテック
デバッガ(pgdbg) とプロファイラ(pgprof) の質問への回答
1. Linux 上の PGI 11.0 以降で、pgdbg コマンドや pgprof コマンドでデバッグあるいはプロファイラのユーティリティを起動する際、JAVA のエラーが出力され起動できません。
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.
2. Windows 上の PGI コマンドプロンプトから pgdbg を起動する方法とWindowsのスタート・メニューから pgdbg を起動する方法のどちらが良いでしょうか?
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 のデバッガ・ユーティリティが開く。
3. MPIプログラムをデバッグしたいのですが、pgdbg の起動する方法を教えて下さい?
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)
4. MPIプログラムのプロファイリングを行いたいのですが、pgprof を使用する方法を教えて下さい?
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)
5. PGI Visual Fortran(PVF)環境における pgprof(プロファイラ)を使用する方法を教えて下さい?
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ベースで行う。なお、関数名をダブルクリックすると、ソースが表示される。