バージョン 4.2.5
 —  Natural Optimizer Compiler  —

Optimizer の使用例

以下の例では、どのような場合に Natural Optimizer Compiler が最も効果的に使用され、その機能が示されるかを説明します。

このドキュメントでは、次のトピックについて説明します。


例 1 - 向上なし

以下のプログラムの場合、Natural Optimizer Compiler の使用によって得られるものはありません。

DEFINE DATA LOCAL
  1 EMPLOYEES VIEW OF EMPLOYEES
    2 JOB-TITLE
    2 BIRTH
    2 NAME
  END-DEFINE
  FIND EMPLOYEES WITH JOB-TITLE = 'PROGRAMMER' OR = 'ANALYST'
                             OR = 'PROGRAMMER/ANALYST'
                             OR = 'SYSTEM ANALYST'
    DISPLAY JOB-TITLE BIRTH NAME
  END-FIND
  END

Top of page

例 2 - 大幅な向上

以下のプログラムを Natural Optimizer Compiler でコンパイルすると、パフォーマンスは約 30 %向上します。つまり、CPU 負荷が 30 %減少します。 このプログラムでは、IT 従業員の年齢の統計分析が実行されます。 最適化されたステートメントは、太字で示されています。

この例では、NOC による 952 バイトの追加マシンコードによって、オブジェクトサイズは 20.5 %増加しています。

 プロファイルパラメータの設定 バッファプールのサイズ NOC によって生成された
マシンコードのサイズ
OPT=NODBG 5768 952
OPT=OFF 4784 0
  DEFINE DATA                     
  LOCAL                           
  1 EMPLOY VIEW OF EMPLOYEES      
    2 JOB-TITLE     (A25)         
    2 BIRTH         (D)           
  1 I               (I1)  INIT <1>
  1 CDATE           (D)           
  1 NUMB            (N4)          
  1 SUMM            (P7.2)        
  1 SQUARE          (F8)          
  1 DEVI            (F8)          
  1 DEVIATION       (N3.4)        
  1 MEAN            (P2.3)        
  1 AGEDIS          (F8/1:70)     
  1 AGEMAX          (F8)          
  1 AGEH            (P3)          
  1 AGE             (P3)          
  1 AGEDAYS         (P15)         
  1 LINE            (A71/1:20)
  1 REDEFINE LINE                                                  
    2 POINTS        (A1/1:20,0:70)                                 
  END-DEFINE                                                       
  *                                                                
  MOVE *DATX TO CDATE
  *                                                                
  FIND EMPLOY WITH JOB-TITLE = 'PROGRAMMER' OR = 'ANALYST'         
    OR = 'PROGRAMMER/ANALYST' OR = 'SYSTEM ANALYST'                
 AGEDAYS:= CDATE - BIRTH                                        
    AGE:=AGEDAYS / 365                                             
    ADD 1 TO AGEDIS(AGE)                  /* DISTRIBUTION          
    ADD 1 TO NUMB                                                  
    ADD AGE TO SUMM                                                
    COMPUTE SQUARE = SQUARE + AGE * AGE
  END-FIND                                                         
  *                                                                
  *****************************************************************
  * COMPUTE ESTIMATES                                              
  *****************************************************************
  *                                                                
  COMPUTE DEVI = NUMB * SQUARE / (SUMM * SUMM) - 1                 
  COMPUTE DEVIATION = SQRT(DEVI)                                   
  COMPUTE MEAN = SUMM / NUMB
  *                                                                
  *****************************************************************
  * GRAPHIC DISPLAY                                                
  *****************************************************************
  *                                                                
  FOR I 1 70                                                       
    IF AGEDIS(I) > AGEMAX MOVE AGEDIS(I) TO AGEMAX                 
    END-IF                                                         
  END-FOR                                                          
  FOR I 1 70                                                       
    COMPUTE AGEDIS(I) = AGEDIS(I) * 20 / AGEMAX                    
  END-FOR                                                          
  FOR I 1 70                                                       
    COMPUTE AGEH = 21 - AGEDIS(I)                                  
    IF AGEH < 21 MOVE '*' TO POINTS(AGEH:20,I)
    END-IF                                                         
  END-FOR
  *                                                                      
  *****************************************************************      
  * COMPLETE GRAPHIC DISPLAY                                             
  *****************************************************************      
  *                                                                      
  MOVE '!' TO POINTS(*,0)
  WRITE TITLE LEFT                                                       
   AGEMAX(EM=999)  20X  'DISTRIBUTION OF IT-EMPLOYEES BY AGE'           
  WRITE NOTITLE NOHDR                                                    
  LINE(*) /                                                              
  '0--------10--------20--------30--------40--------50--------60--------'
  /  'MEAN='

Top of page

例 3 および 4 - CPU の使用

以下のプログラムは、プログラムをコンパイルするときに選択するオプションに応じて、CPU の使用の違いを示しています。 以下の表は、CPU の使用率を秒およびパーセントで示しています。 表内の数値は、IBM z/OS 環境でのテスト実行中に測定されました。 値は適用されるハードウェアによって異なるため、一般的な参考値としてのみご利用ください。

   DEFINE DATA LOCAL
   1 #I1         (I4) INIT <1>
   1 #I2         (I4) INIT <2>
   1 #J1         (I4) INIT <3>
   1 #J2         (I4) INIT <4>
   1 #F          (I4)
   1 #ARR1       (N7/10,5)
   1 #ARR2       (N5/10,5)
   END-DEFINE
   *
   FOR #F = 1 TO 1000000
     MOVE #ARR1(#I1,#I2) TO #ARR2(#J1,#J2)
   END-FOR
   *
   END
オプション CPU 秒 CPU パーセント
OFF 8.78 100
ON 0.63 7.18
INDX 0.85 9.68
OVFLW 1.71 19.48
INDX,OVFLW 2.00 22.78
INDX,OVFLW,NODBG 1.61 18.34
INDX,OVFLW,NODBG,NOSGNTR 1.61 18.34
NODBG 0.44 5.01
NOSGNTR 0.63 7.18
NODBG,NOSGNTR 0.44 5.01
   DEFINE DATA LOCAL
   1 #I1         (P7) INIT <1>
   1 #I2         (P7) INIT <2>
   1 #J1         (N7) INIT <3>
   1 #J2         (N7) INIT <4>
   1 #K1         (I4) INIT <5>
   1 #K2         (I4) INIT <6>
   1 #F          (I4)
   1 #FIELD1     (P5)
   1 #FIELD2     (N5)
   1 #FIELD3     (I2)
   END-DEFINE
   *
   FOR #F = 1 TO 500000
   *
     #FIELD1:= #I1 - #I2 + (13 * 10 / 5)
     #FIELD2:= #J1 - #J2 + (13 * 10 / 5)
     #FIELD3:= #K1 - #K2 + (13 * 10 / 5)
   *
   END-FOR
   *
   END
オプション CPU 秒 CPU パーセント
OFF 18.61 100.00
ON 4.95 26.60
INDX 4.95 26.60
OVFLW 5.38 28.91
INDX,OVFLW 5.38 28.91
INDX,OVFLW,NODBG 5.26 28.26
INDX,OVFLW,NODBG,NOSGNTR 5.09 27.35
NODBG 4.79 25.74
NOSGNTR 4.81 25.85
NODBG,NOSGNTR 4.63 24.88
NODBG,NOSGNTR,ZD=OFF 4.51 24.23
NODBG,NOSGNTR,ZD=OFF,SIGNCHCK=OFF 4.41 23.70

Top of page