実行解析の質問に対する回答

プログラム相談の回答より

   ・afrt使用時のエラーについて回答致します。
        結論からいいますと、ソースファイルのライン数が制限値を
        越えていました。(アセンブラレベルで)回避策としては最初に
        VPPアナライザを採取してから1回でも実行しているルーチンは
        対象ファイルとしてまとめて1つのファイルとしました。
        まずVPPアナライザを実行します。VPPアナライザはfrtpxコマンド
        にて作成したa.out(ロードモジュール)を使用します。


       +-----VPPアナライザの実行シェル(samp.sh)--------------+
       |                                                     |
       |  #bin/sh                                            |
       |  cd test                                            |
       |  F7PARASAMP='file:samp.data,interval:20,type:rtime' |
       |  export F7PARASAMP                                  |
       |  a.out c60                                          |
       |  parasamp a.out c60                                 |
       +-----------------------------------------------------|
       
       このシェルをVPPのキューに投入します。

        qsub -q p08d -lPv 1 samp.sh

       
       終了するとsamp.sh.oXXXXXX(XXXXXXは数字)に以下の結果が出力され
       ます。
 
 Status                      : Serial
 Number of Processors        : 1
 
 Type                        : elapse
 Interval (msec)             : 20
 Synthesis Information
     Count|   Percent|    VL| Name
      3950|      27.9|   179|  diag_ 
      1286|       9.1|   120|  densit_ 
      1251|       8.8|     7|  rotate_ 
      1162|       8.2|     4|  kab_ 
      1085|       7.7|    23|  bintgs_ 
      1069|       7.6|     4|  jab_ 
       749|       5.3|    11|  repp_ 
       658|       4.7|     4|  diat_ 
       606|       4.3|     6|  dhc_ 
       575|       4.1|    16|  fock2_ 
       423|       3.0|     -|  aintgs_ 
       306|       2.2|    24|  diat2_ 
       212|       1.5|     4|  hcore_ 
       134|       0.9|     -|  set_ 
       124|       0.9|    26|  ddot_ 
        85|       0.6|    29|  daxpy_ 
        70|       0.5|    10|  h1elec_ 
        70|       0.5|    75|  coe_ 
        63|       0.4|     3|  dcart_ 
        62|       0.4|    20|  helect_ 
        49|       0.3|     2|  fock1_ 
        29|       0.2|     -|  einvit_ 
        29|       0.2|   133|  charmo_ 
        18|       0.1|     -|  _start 
        16|       0.1|     -|  geout_ 
        13|       0.1|    30|  elau_ 
        12|       0.1|     -|  dnrm2_ 
        11|       0.1|    73|  cnvg_ 
         7|       0.0|     -|  eqlrat_ 
         6|       0.0|     -|  etrbk3_ 
         4|       0.0|    42|  dscal_ 
         4|       0.0|     -|  gmetry_ 
         2|       0.0|     -|  chrge_ 
         2|       0.0|     -|  iter_ 
         2|       0.0|     -|  writmo_ 
         1|       0.0|     -|  getgeo_ 
         1|       0.0|     -|  myword_ 
         1|       0.0|     -|  calpar_ 
         1|       0.0|     -|  freda_ 
         1|       0.0|     -|  chi_ 
         1|       0.0|     -|  symoir_ 
 
     14150|          |    74|  TOTAL 
        
    
     この結果を元に1回でも実行しているルーチン群と実行していない
     ルーチン群に分別します。出力結果のCOUNTを参考にします。
     この時必ずメインプログラムは忘れずにします。VPPアナライザのサ
     ンプリング間隔によってはメインが1回も実行していない様に見え
     る場合もあるからです。上記例ではメインが出ていません。

        mopac-s.f  --+----->t2.f(1回も実行していないルーチン群)
                     |
                     +----->t1.f(1回でも実行しているルーチン群

     そして下記シェルでアナライザを実行します。

    +- アナライザ実行シェル ana.sh-------------------------+
    | #                                                    |
    | #@$-q ban3                                           |
    | #@$-o test.list                                      |
    | #@$-eo                                               |
    | #                                                    |
    | cd test                                              |
    | frt -c -Wv,-px220 -Zcom.lis t1.f                     |
    | afrt -px220 -e -f mopac-anal.list  t1.o t2.f         |
    +------------------------------------------------------+

    qsub ana.sh

    以上でアナライザの採取が可能です。因みに既存アプリケーション
    プログラムのアナライザをとる場合は、ソースコードが大きい場合
    がよく見受けられますのでこの方法が有効だと思います。
    
    ただ今回のプログラムの場合、実行時のパラメタをプログラム内に
    読み込んでいる構造になっているため、afrtの採取が困難となって
    います。afrtは実行時のパラメタをプログラムに渡すことは現状
    仕様外ですので、プログラムの書き換えが必要となります。
    現在システム担当のSEにパラメタを渡す方法を確認中ですので、
    パラメタについてはしばらくお待ち下さい。
    プログラムのルーチン単位のコスト分布が知りたいだけであれば、
    上記で御紹介したVPPアナライザも有効だと思います。


naka@tube.ee.uec.ac.jp