[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

JP2013242700A - コード最適化方法、プログラム及びシステム - Google Patents

コード最適化方法、プログラム及びシステム Download PDF

Info

Publication number
JP2013242700A
JP2013242700A JP2012115496A JP2012115496A JP2013242700A JP 2013242700 A JP2013242700 A JP 2013242700A JP 2012115496 A JP2012115496 A JP 2012115496A JP 2012115496 A JP2012115496 A JP 2012115496A JP 2013242700 A JP2013242700 A JP 2013242700A
Authority
JP
Japan
Prior art keywords
setting instruction
instruction
input
operand
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2012115496A
Other languages
English (en)
Inventor
Motohiro Kawahito
基弘 川人
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2012115496A priority Critical patent/JP2013242700A/ja
Priority to US13/893,810 priority patent/US9218171B2/en
Publication of JP2013242700A publication Critical patent/JP2013242700A/ja
Priority to US14/935,582 priority patent/US9996327B2/en
Priority to US15/955,778 priority patent/US10216499B2/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】 Packed Decimal型の符号を正しく設定する符号設定命令の使用を最適化する技法を提供すること。
【解決手段】 例えばZAP命令である、Packed Decimal型の符号を正しく設定する符号設定命令の入力・出力フィールドのサイズに着目し、それらが同一な場合、次のような方法により、最適化を行う。
(1) ZAP命令の入力値が常に-0とはならないとわかる場合、当該ZAP命令を除去・またはコピー命令に置き換える処理。入力値が、足し算・引き算の結果であり、当該演算の前の値よりも増加しているとわかる場合にこのような処理を行う。(例えば1を加える演算など)。
(2) 入力・出力のアドレスも同じ場合はZAPを除去。
(3) 入力・出力のアドレスが違い、オーバーラップしていないことがわかる場合は、ZAPを入力を出力へコピーする命令に置き換え。
【選択図】 図5

Description

この発明は、Packed Decimal型の変数を含む、COBOLなどのプログラムを最適化する技法に関するものである。
COBOLは、1959年に主として事務計算用に作成されたコンピュータ・プログラミング言語であり、過去のプログラミング資産の継承などの意味もあって、現在でも、メインフレーム・コンピュータ・システムなどで使用されている。そのようなメインフレーム・コンピュータ・システムとして、インターナショナル・ビジネス・マシーンズ・コーポレーション(登録商標)のSystem zなどがある。
COBOLでは、Int型は、演算に使われるすべての型をBinary型で明示的に指定しない場合、内部的にはPacked Decimalで計算が行われる。
Packed Decimalを使う演算で、符号が正しく設定されない場合がある。例えば、4桁の変数に対して次の演算を行うと、符号が正しくない結果となる。
-9999 - 1 => -0
-1 / 10 => -0
-5000 * 2 => -0
これらは、正しくは+0とならなくてはならない。すなわち、-0のままディスプレイに表示されると、オペレータに奇異な印象を与える。そのため、符号(正負)を正しく設定する命令が生成される。以下、このような命令をZAPと表現する。
アセンブラ・コードの具体例は次のとおりである。例えば、"01 idx pic s9(4)"と定義された変数idxについての、COBOLのcompute idx = idx - 1という式に対して、次のようなコードが生成される。
1. PACK 272(3,13),24(4,8) tmp = PACK(idx)
2. SP 272(3,13),52(1,10) tmp = tmp - 1
3. NI 272(13),X‘0F' 5桁目を0にセット
4. ZAP 272(3,13),272(3,13) tmp = ZAP(tmp)
5. UNPK 24(4,8),272(3,13) idx = UNPK(tmp)
このとき、idxの初期値が-9999であったと仮定する。すると、2の演算結果は-10000となるが、変数idxは4桁である。そのため、3によって-0000と丸められる。この値は、符号が間違っている。そこで、4のZAP命令でこれを+0000に変更する。
しかし、ZAPはコストが大きく速度低下につながるため、これを改善したいという要望がある。
COBOLなどのプログラムの最適化に適用可能と思われる従来技術として下記のものがある。
特願2008−102740号公報は、計算機システムのプロセッサで実行される言語処理系で、分岐処理のうち、まず2つの参照が同じか比較し、結果が真なら分岐し、さもなくば、個々の参照が指示するインスタンスの等価性を検証するメソッドを呼び出し、返戻値が真ならば分岐するものについて、参照間の比較結果が真になる確率が十分小さく、かつ、参照間の比較とその結果に応じた分岐を除去しても、プログラムの実行結果が変化しない場合について、参照間の比較とその結果に応じた分岐を除去することを開示する。
特開2009−134523号公報は、アセンブラソースプログラムをプロセッサ5で実行可能な機械語プログラムに変換するアセンブラ装置1では、アセンブラソースプログラムに含まれる拡張マクロ命令(Xld命令及びXjnz命令)を、基本命令(ld命令及びjnz命令)と拡張命令(ext命令)とに展開する。次いで、展開したext命令について、オペランドの数値データを判断して冗長な命令を省略するext命令の最適化を行い、このext命令の最適化によってラベルのアドレスが変更された場合、再度、ext命令の最適化を行うことを開示する。
特開2005−107816号公報は、最適化対象の対象プログラムにおいて、メモリからデータを読み出すロード命令を最適化する最適化コンパイラであって、メモリから変数にデータを読み出すロード命令に対して、変数がレジスタに割り当てられた場合にスピル処理を生じさせない部分冗長性の除去処理を行う部分冗長性除去手段と、ロード命令が読み出すデータを使用する命令から実行順序を遡ることによりロード命令に到達する実行経路において、何れの変数にも割り当てられていない空きレジスタを検出する後進方向レジスタ検出手段と、ロード命令がデータを読み出す読出先変数に、後進方向レジスタ検出手段により検出された空きレジスタを割り当てる空きレジスタ割当手段とを備える最適化コンパイラを開示する。
特開2000−81983号公報は、不要な配列レンジ・チェックを除去するために、ループに対するバージョニングにより不要な配列レンジ・チェックを除去する部分と、データ・フロー解析を実行順序とは逆順に行って配列レンジ・チェックを最適化する部分、及びデータ・フロー解析を実行順に行って配列レンジ・チェック済の情報を取得し、この情報から不要な配列レンジ・チェックを除去する部分を設けることを開示する。
CoBOL General discussion- Signed COMP-3 fields in COBOL http://www.tek-tips.com/viewthread.cfm?qid=1150690は、COBOLにおけるZAP機能を説明する。
IBM Extra ZAP following AP in COBOL Compiler gerenrated object cod.-United States http://www-01.ibm.com/support/docview.wss?uid=swg21001074は、COBOLにおいて、ZAPを使用して符号を-から+に変更することを説明する。
しかし、上記どの従来技術にも、ZAPのような、Packed Decimal型の符号を正しく設定する符号設定命令の使用を最適化する技法は開示も示唆もされない。
特願2008−102740号公報 特開2009−134523号公報 特開2005−107816号公報 特開2000−81983号公報
CoBOL General discussion- Signed COMP-3 fields in COBOL http://www.tek-tips.com/viewthread.cfm?qid=1150690 IBM Extra ZAP following AP in COBOL Compiler gerenrated object cod.-United States http://www-01.ibm.com/support/docview.wss?uid=swg21001074
この発明の目的は、Packed Decimal型の符号を正しく設定する符号設定命令の使用を最適化する技法を提供することにある。
この発明の他の目的は、コストが大きい、Packed Decimal型の符号を正しく設定する符号設定命令を効率的に除去することで、プログラムの動作速度を最適化する技法を提供することにある。
本発明は、上記課題を解決するためになされたものであって、例えばZAP命令である、Packed Decimal型の符号を正しく設定する符号設定命令の入力・出力フィールドのサイズに着目し、それらが同一な場合、次のような方法により、最適化を行うものである。
ZAP命令の除去処理:
(1-1) ZAP命令の入力値が常に-0とはならないとわかる場合、当該ZAP命令を除去・またはコピー命令に置き換える処理。入力値が、足し算・引き算の結果であり、当該演算の前の値よりも増加しているとわかる場合にこのような処理を行う(例えば1を加える演算など)。
(1-2) 入力・出力のアドレスも同じ場合はZAPを除去。
(1-3) 入力・出力のアドレスが違い、オーバーラップしていないことがわかる場合は、ZAPを入力を出力へコピーする命令に置き換え。
ZAP命令の軽減処理:
(2-1) ZAP命令の入力値に対して-0の可能性をビット表現でチェックする命令を生成し、-0の可能性がない場合にはZAP命令をスキップ・またはコピー命令を実行するようにコード生成する処理。-0の可能性を検出する際には、桁数に応じたマスク値を作り、符号部を9とANDをとることによって高速に検出する。
(2-2) 入力・出力のアドレスも同じ場合はZAPを実行しない。
(2-3) 入力・出力のアドレスが違い、オーバーラップしていないことがわかる場合は、ZAPではなく入力を出力へコピーする命令を実行。
上記(1-1)、(1-2)、(1-3)の処理からなる除去技法と、上記(2-1)、(2-2)、(2-3)の処理からなる軽減技法は、それぞれ単独に実施してもよいし、また共に適用してもよい。また、軽減技法を先に適用してから、次に除去技法を適用するようにしてもよい。
本発明の第1の態様では、コンパイルされたCOBOLのバイナリ実行ブログラムに対する変換ツールとして上記機能が実装される。
本発明の第2の態様では、COBOLコンパイラの最適化機能として上記機能が実装される。
この発明によれば、Packed Decimal型の符号を正しく設定する符号設定命令を用いるプログラムにおいて、動作に支障がない範囲でPacked Decimal型の符号を正しく設定する符号設定命令が除去され、あるいは生成が抑制されるので、結果のコードの動作速度が向上する。
本発明を実施するためのハードウェアの構成のブロック図である。 本発明の第1の実施例の機能構成のブロック図である。 本発明の第2の実施例の機能構成のブロック図である。 本発明の第3の実施例の機能構成のブロック図である。 最適化モジュールの機能構成のブロック図である。 処理ルーチンの処理のフローチャートを示す図である。 検出ルーチンの処理のフローチャートを示す図である。 解析ルーチンの処理のフローチャートを示す図である。 除去ルーチンの処理のフローチャートを示す図である。 軽減ルーチンの処理のフローチャートを示す図である。
以下、図面に従って、本発明の実施例を説明する。これらの実施例は、本発明の好適な態様を説明するためのものであり、発明の範囲をここで示すものに限定する意図はないことを理解されたい。また、以下の図を通して、特に断わらない限り、同一符号は、同一の対象を指すものとする。
図1を参照すると、本発明の一実施例に係るシステム構成及び処理を実現するためのコンピュータ・ハードウェアのブロック図が示されている。好適には、このコンピュータ・ハードウェアは、IBM(登録商標) System z(登録商標)アーキテクチャに従う構成である。
図1において、システム・パス102には、CPU104と、主記憶(RAM)106と、ハードディスク・ドライブ(HDD)108と、キーボード110と、マウス112と、ディスプレイ114が接続されている。CPU104は、好適には、z10(商標)プロセッサ・チップである。主記憶106は、好適には、16GB以上の容量をもつものである。ハードディスク・ドライブ108は、例えば、1TB以上の容量をもつものである。
ハードディスク・ドライブ108には、個々に図示しないが、オペレーティング・システムが、予め格納されている。オペレーティング・システムは、例えば、z/OSであるが、z/VM、z/VSEなど、使用するコンピュータ・ハードウェアに適合する、その他のオペレーティング・システムも使用可能である。
キーボード110及びマウス112は、オペレーティング・システムの機能によって、ハードディスク・ドライブ108から主記憶106にロードされ、ディスプレイ114に表示されたプログラム(図示しない)を操作したり、文字を打ち込んだりするために使用される。
ディスプレイ114は、好適には、液晶ディスプレイであり、例えば、XGA(1024×768の解像度)、またはUXGA(1600×1200の解像度)などの任意の解像度のものを使用することができる。ディスプレイ114は、図示しないが、COBOLのプログラムで計算された会計データなどの数値を表示するために使用される。
本発明の第1の実施例では、図2に示すように、ハードディスク・ドライブ108に、COBOLソースコード202と、本発明に係るZAP命令削減機能を実装したコンパイラ204が保存されている。この場合は、オペレータの操作に応答して、COBOLソースコード202から直接、コンパイラ204によって、ZAP命令が適宜削減された、最適化されたCOBOLバイナリ実行可能ファイル206が生成され、ハードディスク・ドライブ108に保存される。すなわち、コンパイラ204が、バイナリ・コードを生成する局面で、コンパイラ204が備える、本発明に係るコード最適化機能が呼び出される。第1の実施例は、COBOLソースコード202がきちんと存在している場合に有効である。
本発明の第2の実施例では、図3に示すように、ハードディスク・ドライブ108に、本発明の意味では最適化されていないCOBOLバイナリ実行可能ファイル302と、本発明に係る最適化モジュール304が保存されている。この場合は、オペレータの操作に応答して、COBOLバイナリ実行可能ファイル206が、本発明に係るZAP命令削減機能を実行する変換モジュール304によって、最適化されたCOBOLバイナリ実行可能ファイル306に変換される。第2の実施例は、レガシーなプログラムであるなどの理由で、ソースコードがなく、バイナリ実行可能ファイルしか存在しない場合に有効である。
本発明の第3の実施例では、図4に示すように、ハードディスク・ドライブ108に、COBOLソースコード202と、本発明に係る最適化機能は実装していないコンパイラ402と、図3と同一の最適化モジュール304が保存されている。この場合は、オペレータの操作に応答して、COBOLソースコード202が一旦、コンパイラ402によって、本発明の意味では最適化されていないCOBOLバイナリ実行可能ファイル404に変換され、COBOLバイナリ実行可能ファイル404は、変換モジュール304によって、最適化されたCOBOLバイナリ実行可能ファイル406に変換される。第3の実施例は、ソースコードと、既存のCOBOLコンパイラが揃っている場合に有効である。
次に、図5の機能ブロック図を参照して、最適化モジュール304の機能について説明する。なお、図2のコンパイラ204には、最適化モジュール304の同等の最適化機能が組み込まれているので、以下の最適化モジュール304の機能の説明は、コンパイラ204の、本発明に関するコード最適化機能の説明にもなっていることを理解されたい。
図5に示すように、最適化モジュール304は、処理ルーチン502、入力ルーチン504、検出ルーチン506、解析ルーチン508、除去ルーチン510、軽減ルーチン512、及び出力ルーチン514を具備している。処理ルーチン502は、最適化モジュール304の機能全体を統合するものであり、入力ルーチン504、検出ルーチン506、解析ルーチン508、除去ルーチン510、軽減ルーチン512、出力ルーチン514を適宜呼び出し、処理を行う。処理ルーチン502の機能は、図6のフローチャートを参照して、後で説明する。
入力ルーチン504は、ハードディスク・ドライブ108に保存されている、最適化されていないCOBOLバイナリ実行可能ファイル302を読み込む機能をもつ。
検出ルーチン506は、COBOLバイナリ実行可能ファイル302における、除去候補のZAPの位置を検出する機能をもつ。検出ルーチン506の機能は、図7のフローチャートを参照して、後で説明する。
解析ルーチン508は、検出ルーチン506中で呼び出され、ZAPの入力に対する定義に対する解析を行う。解析ルーチン508の機能は、図8のフローチャートを参照して、後で説明する。
除去ルーチン510は、検出ルーチン506中で呼び出され、ZAP命令を除去する機能を実行する。除去ルーチン510の機能は、図9のフローチャートを参照して、後で説明する。
軽減ルーチン512は、検出ルーチン506中で呼び出され、ZAPの演算強度軽減処理を実行する。軽減ルーチン512の機能は、図10のフローチャートを参照して、後で説明する。
出力ルーチン514は、処理ルーチン502の処理の結果を、最適化されたCOBOLバイナリ実行可能ファイル306としてハードディスク・ドライブ108に書き出す。
処理ルーチン502、入力ルーチン504、検出ルーチン506、解析ルーチン508、除去ルーチン510、軽減ルーチン512、出力ルーチン514などのプログラムは、PL/I、アセンブラ、REXXなどの、オペレーティング・システムに適合する任意のプログラミング言語で作成することができる。
次に、図6〜図10のフローチャートを参照して、最適化モジュール304の各ルーチンの処理について説明する。
図6は、Packed Decimal型の命令の符号を正しく設定する命令を最適化するための、処理ルーチン502の処理のフローチャートを示す図である。図6において、ステップ602からステップ606までは、最適化対象領域内の全ての、符号を正しく設定するZAPについての処理である。
当該ループ内のステップ604で、処理ルーチン502は、ZAPについて「1つの符号設定命令についての除去処理」を実行するために、後述する図7のフローチャートで示す検出ルーチン506を呼び出す。
こうして、すべてのZAPを調べたら、ステップ606を抜けて処理を終了する。図6には示さないが、処理ルーチン502は、変換結果の最適化されたコードを、出力ルーチン514により出力する。
図7は、1つの符号設定命令についての除去処理を実行するために、ステップ604で呼び出される検出ルーチン506の処理のフローチャートを示す図である。
図7において、ステップ702で検出ルーチン506は、ZAPの入力・出力サイズが同一かどうか判断し、もしそうでなければ、なにもしないで処理を終る。
ステップ702で検出ルーチン506が、ZAPの入力・出力サイズが同一であると判断すると、ステップ702で、ZAPの入力に対する各定義Iについて符号設定の必要性をチェックするために、AnalyzeDEF(I)、すなわち、解析ルーチン508を呼び出す。解析ルーチン508の処理の詳細については、図8のフローチャートを参照して、後で説明する。
解析ルーチン508は、必要か不必要かの解析結果を返すので、その結果を以って検出ルーチン506は、ステップ706で、全ての定義について不必要かどうかの判断を行う。
そして、ステップ706で、全ての定義について不必要と判断すると、解析ルーチン508は、ステップ708で、ZAPの除去処理を行う、除去ルーチン510を呼び出し、処理を終了する。除去ルーチン510の詳細については、図9のフローチャートを参照して、後で説明する。
一方、ステップ706で、全ての定義について不必要とは限らない判断すると、解析ルーチン508は、ステップ710で、ZAPの軽減処理を行う、軽減ルーチン512を呼び出し、処理を終了する。軽減ルーチン512の詳細については、図10のフローチャートを参照して、後で説明する。
図8は、解析ルーチン508、すなわちAnalyzeDEF(I)のフローチャートを示す図である。ここでIというのは、例えば、下記のような式のことで、ここではI1として示している。
001 COMPUTE INPUT = INPUT + 1 --- (I1)
002 ... = ZAP(INPUT)
もう少し複雑な例だと、下のZAPの入力INPUTに対する定義はI1とI2となる。
001 IF ... THEN
002 COMPUTE INPUT = INPUT + 1 --- (I1)
003 ELSE
004 COMPUTE INPUT = INPUT * 2 --- (I2)
005 END-IF.
006 ... = ZAP(INPUT)
解析ルーチン508は、ステップ802で、Iの符号はすでに正しいかどうか判断し、もしそうならステップ804で、不必要の判断を返す。
解析ルーチン508は、Iの符号がすでに正しいとは判断できない場合に、ステップ806で、Iは足し算命令かどうか判断する。もしそうなら、解析ルーチン508は、ステップ808で、Iを計算するためのどちらかのオペランドが0以上かどうか判断し、もしそうならステップ810で、不必要の判断を返し、そうでなければステップ812で、必要の判断を返す。
解析ルーチン508は、ステップ806で、Iが足し算命令でないと判断すると、ステップ814で、Iが引き算命令かどうか判断する。もしそうなら、解析ルーチン508は、ステップ816で、Iを計算するための第1オペランドが0以上、第2オペランドが0以下のどちらかの条件を満たすか判断し、もしそうならステップ818で、不必要の判断を返し、そうでなければステップ820で、必要の判断を返す。
解析ルーチン508は、ステップ814で、Iが引き算命令でないと判断すると、ステップ822で、Iの入力について符号設定不必要と判断された場合、出力についても不必要と判断できるかどうか判断する。これは、Iを計算するための式から判定できる。そしてもしそうでなければ、ステップ820で、必要の判断を返す。
解析ルーチン508は、ステップ822で、Iの入力について符号設定不必要と判断された場合、出力についても不必要と判断できると判断すると、ステップ824で、Iの入力に対する各定義Jについて符号設定の必要性のチェックを、AnalyzeDEF(J)を再帰的に呼び出すことによって行う。
そして、解析ルーチン508は、ステップ826で、全ての定義Jについて不必要と判断するとステップ830で不必要の判断を返し、そうでないなら、ステップ828で必要の判断を返す。
図9は、除去ルーチン510の処理のフローチャートを示す図である。図9において、ステップ902では、除去ルーチン510は、ZAPの入力・出力アドレスは完全に一致かどうか判断し、もしそうなら、ステップ904でZAPを除去して処理を終る。
ステップ902で、除去ルーチン510が、ZAPの入力・出力アドレスは完全に一致ではないと判断すると、除去ルーチン510はステップ906で、ZAPの入力・出力アドレスはオーバーラップする可能性があるかどうか判断する。そして、もしそうなら、単に処理を終了する。ここで、2つのメモリアクセスがあったとき、この2つがオーバーラップしているかどうかの判定技法は、従来技術で既知である。すなわち、メモリアクセスをベースアドレス、インデックス、オフセット、長さ、の組で表現したとすると、ベースアドレスとインデックスが入力・出力で同じであれば、オフセットと長さから判断することが出来る。ベースアドレスとインデックスが異なる場合は、多くの場合解析できないため、オーバーラップしていると仮定する必要があるが、エイリアス解析などで多少はオーバーラップしていないと判断できる場合もある。
ステップ906で、除去ルーチン510が、ZAPの入力・出力アドレスはオーバーラップする可能性がないと判定すると、ステップ908で、除去ルーチン510は、入力を出力にコピーする命令をZAPの代わりに生成して、処理を終る。
図10は、軽減ルーチン512の処理のフローチャートを示す図である。図9において、ステップ1002では、軽減ルーチン512は、ZAPの入力・出力アドレスは完全に同一かどうか判断し、もしそうなら、ステップ1004で、ZAPの入力が-0かどうかをチェックする命令を生成し、-0のときだけZAPを実行する命令を生成して処理を終る。なお、ここで、ZAPの入力が-0かどうかのチェックは、桁数に応じたマスク値を作り、符号部を9とANDをとる命令によって実現される。この処理の詳細は、後でPacked Decimalに関する補足説明中で述べる。
ステップ1002で、軽減ルーチン512が、ZAPの入力・出力アドレスは完全に同一ではないと判断すると、軽減ルーチン512はステップ1006で、ZAPの入力・出力アドレスはオーバーラップする可能性があるかどうか判断する。そして、もしそうなら、処理を終了する。ここで、2つのメモリアクセスがあったとき、この2つがオーバーラップしているかどうかの判定技法は、ステップ906と同様でよい。
ステップ1006で、軽減ルーチン512が、ZAPの入力・出力アドレスはオーバーラップする可能性がないと判定すると、ステップ1008で、軽減ルーチン512は、ZAPの入力が-0かどうかをチェックする命令を生成し、-0でない場合は入力を出力にコピーし、-0のときはZAPを実行する命令を生成して処理を終る。
Packed Decimalについて、説明を以下のとおり補足する。まず、Packed Decimalの符号部は値によって次のように定められている。
正の符号: 12(望ましい), 10, 14, 15
負の符号: 13(望ましい), 11
負の符号はビット表現で、1101と1011である。符号部がこの値ではないことを高速に見つけるために、ZAP命令に対して、次のような擬似コードで示されるコードを生成する。
tmpReg = 10進値のサイズに応じてF9, FFF9, FFFFF9, FFFFFFF9 (それぞれ、1,2,3バイト,4バイト以上、の場合)
tmpReg &= *(10進値の右端のアドレス - 3)
if (tmpReg == 9 &&
((10進値の右端のバイト値 & 6) != 2 and ((10進値の右端のバイト値 & 6) != 4) { // System zではTM命令を利用
<ZAPを行う>
}
System zの命令を使った場合、上の擬似コードに対応して、次のようなマシンコードが生成される。
IILF GPR0,0xFFFFF9
N GPR0,320(GPR2) // 変数とAND
CHI GPR0,9 // 結果は9か?
BRC BNERC(0x6), Label SKIP // 9でなければスキップ
TM 323(GPR2), 0x06 // ビット表現で10か01の場合、CCは1がセットされる。
BRC (0xb), Label SKIP // ビット表現で10か01ではない場合、スキップ
ZAP 321(3,GPR2), 321(3,GPR2)
Label SKIP:
この擬似コードで記述された技法の有利なところは、 tmpReg == 9 のチェックで -0ではない数字の大部分を除外できる点である。
これ以外の方法として、符号バイトとのマスクをF9ではなくFFとANDをとり13でも11でもないかを比較する方法も考えられる。ただし、-0ではない数字は最低でも2回比較が必要となる。
上の例は32ビット命令を使ったが、64ビット命令を使うことも考えられる。また、パフォーマンスには大きく影響は無いと思われるが、変形後のZAP命令をさらに変換する方法も考えられる。具体的にはOR命令を使って符号部を15をセットするようにビット演算で符号だけを変更する方法が考えられる。ただし、これは32ビット命令を使った場合、4バイト以内のPacked Decimalに限られる(64ビット命令なら8バイト以内)。
以上、本発明を、IBM(登録商標) System z(登録商標)アーキテクチャ上のz/OSでCOBOLのコードを実行させる場合について説明したが、これには限定されず、パーソナル・コンピュータなど、任意のアーキテクチャのコンピュータ上で実施可能である。
また、COBOLに限らず、Packed Decimal型の符号を正しく設定する符号設定命令を使用する任意のプログラミング言語に使用可能である。
104・・・CPU
106・・・主記憶
108・・・ハードディスク・ドライブ
202・・・COBOLソースコード
204・・・コンパイラ
302・・・COBOLバイナリ実行可能ファイル
304・・・最適化モジュール
306・・・最適化されたCOBOLバイナリ実行可能ファイル
502・・・処理ルーチン
506・・・検出ルーチン
508・・・解析ルーチン
510・・・除去ルーチン
512・・・軽減ルーチン

Claims (17)

  1. コンピュータの処理により、コンピュータ・プログラム中のPacked Decimal型の符号を正しく設定する符号設定命令を最適化するための最適化方法であって、
    (a) 前記コンピュータ・プログラムを読み出し、その入力オペランド及び出力オペランドのサイズが同一である符号設定命令を検出するステップと、
    (b) 前記ステップ(a)で検出した符号設定命令の入力オペランドを解析し、入力オペランドの値が、加算又は減算の結果であり、かつ、演算前の値より増加しているか否かを判断するステップと、
    (c) 前記ステップ(b)における肯定的な判断結果に応答して、符号設定命令の入力オペランド及び出力オペランドのアドレスが完全同一であることを条件に上記符号設定命令を除去し、及び、符号設定命令の入力オペランド及び出力オペランドのアドレスが完全同一でなくかつオーバーラップしないことを条件に上記符号設定命令を、該符号設定命令の入力オペランドの値を出力オペランドの値にコピーするコピー命令と置換するステップと、
    を含む最適化方法。
  2. 前記ステップ(b)は、符号設定命令の入力オペランドへの入力について符号設定が不要であると判断された場合にその出力についても符号設定が不要であると判断できることを条件に、入力オペランドについての前記ステップ(b)の処理を繰り返すステップを含む、請求項1に記載の方法。
  3. 前記ステップ(b)における否定的な判定結果に応答して、符号設定命令の入力オペランド及び出力オペランドのアドレスが完全同一であることを条件に、上記符号設定命令の入力オペランドの値が-0である可能性があるか否かをチェックし、-0の可能性がある場合にのみ上記符号設定命令を実行する命令を生成し挿入するステップを更に含む、請求項1に記載の方法。
  4. 前記ステップ(b)における否定的な判定結果に応答して、符号設定命令の入力オペランド及び出力オペランドのアドレスが完全同一でなくかつオーバーラップしないことを条件に、上記符号設定命令の入力オペランドの値が-0である可能性があるか否かをチェックし、-0である可能性がある場合のみ上記符号設定命令を実行し、-0である可能性がない場合は、上記コピー命令を生成し挿入するステップを更に含む、請求項1に記載の方法。
  5. 符号設定命令の入力オペランドの値が-0である可能性があるか否かのチェックは、桁数に応じたマスク値を作り、符号部を9とANDをとる命令によって実現される、請求項3または請求項4に記載の方法。
  6. 前記前記コンピュータ・プログラムは、バイナリ実行可能プログラムである、請求項1に記載の方法。
  7. 前記前記コンピュータ・プログラムは、COBOLバイナリ実行可能プログラムであり、Packed Decimal型の符号を正しく設定する符号設定命令はZAPである、請求項6に記載の方法。
  8. コンピュータの処理により、コンピュータ・プログラム中のPacked Decimal型の符号を正しく設定する符号設定命令を最適化するための最適化プログラムであって、
    前記コンピュータに、
    (a) 前記コンピュータ・プログラムを読み出し、その入力オペランド及び出力オペランドのサイズが同一である符号設定命令を検出するステップと、
    (b) 前記ステップ(a)で検出した符号設定命令の入力オペランドを解析し、入力オペランドの値が、加算又は減算の結果であり、かつ、演算前の値より増加しているか否かを判断するステップと、
    (c) 前記ステップ(b)における肯定的な判断結果に応答して、符号設定命令の入力オペランド及び出力オペランドのアドレスが完全同一であることを条件に上記符号設定命令を除去し、及び、符号設定命令の入力オペランド及び出力オペランドのアドレスが完全同一でなくかつオーバーラップしないことを条件に上記符号設定命令を、該符号設定命令の入力オペランドの値を出力オペランドの値にコピーするコピー命令と置換するステップを実行させる、
    最適化プログラム。
  9. 前記ステップ(b)は、符号設定命令の入力オペランドへの入力について符号設定が不要であると判断された場合にその出力についても符号設定が不要であると判断できることを条件に、入力オペランドについての前記ステップ(b)の処理を繰り返すステップを含む、請求項8に記載のプログラム。
  10. 前記ステップ(b)における否定的な判定結果に応答して、符号設定命令の入力オペランド及び出力オペランドのアドレスが完全同一であることを条件に、上記符号設定命令の入力オペランドの値が-0である可能性があるか否かをチェックし、-0の可能性がある場合にのみ上記符号設定命令を実行する命令を生成し挿入するステップを更に含む、請求項8に記載のプログラム。
  11. 前記ステップ(b)における否定的な判定結果に応答して、符号設定命令の入力オペランド及び出力オペランドのアドレスが完全同一でなくかつオーバーラップしないことを条件に、上記符号設定命令の入力オペランドの値が-0である可能性があるか否かをチェックし、-0である可能性がある場合のみ上記符号設定命令を実行し、-0である可能性がない場合は、上記コピー命令を生成し挿入するステップを更に含む、請求項8に記載のプログラム。
  12. 符号設定命令の入力オペランドの値が-0である可能性があるか否かのチェックは、桁数に応じたマスク値を作り、符号部を9とANDをとる命令によって実現される、請求項10または請求項11に記載のプログラム。
  13. 前記前記コンピュータ・プログラムは、バイナリ実行可能プログラムである、請求項8に記載のプログラム。
  14. 前記前記コンピュータ・プログラムは、COBOLバイナリ実行可能プログラムであり、Packed Decimal型の符号を正しく設定する符号設定命令はZAPである、請求項13に記載のプログラム。
  15. コンピュータの処理により、コンピュータ・プログラム中のPacked Decimal型の符号を正しく設定する符号設定命令を最適化するための最適化システムであって、
    前記コンピュータ・プログラムを読み出し、その入力オペランド及び出力オペランドのサイズが同一である符号設定命令を検出する手段と、
    前記検出する手段が検出した符号設定命令の入力オペランドを解析し、入力オペランドの値が、加算又は減算の結果であり、かつ、演算前の値より増加しているか否かを判断する手段と、
    前記判断する手段における肯定的な判断結果に応答して、符号設定命令の入力オペランド及び出力オペランドのアドレスが完全同一であることを条件に上記符号設定命令を除去し、及び、符号設定命令の入力オペランド及び出力オペランドのアドレスが完全同一でなくかつオーバーラップしないことを条件に上記符号設定命令を、該符号設定命令の入力オペランドの値を出力オペランドの値にコピーするコピー命令と置換する手段を有する、
    最適化システム。
  16. 前記前記コンピュータ・プログラムは、バイナリ実行可能プログラムである、請求項15に記載のシステム。
  17. 前記前記コンピュータ・プログラムは、COBOLバイナリ実行可能プログラムであり、Packed Decimal型の符号を正しく設定する符号設定命令はZAPである、請求項16に記載のシステム。
JP2012115496A 2012-05-21 2012-05-21 コード最適化方法、プログラム及びシステム Pending JP2013242700A (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2012115496A JP2013242700A (ja) 2012-05-21 2012-05-21 コード最適化方法、プログラム及びシステム
US13/893,810 US9218171B2 (en) 2012-05-21 2013-05-14 Method, program, and system for code optimization
US14/935,582 US9996327B2 (en) 2012-05-21 2015-11-09 Method, program, and system for code optimization
US15/955,778 US10216499B2 (en) 2012-05-21 2018-04-18 Method, program, and system for code optimization

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012115496A JP2013242700A (ja) 2012-05-21 2012-05-21 コード最適化方法、プログラム及びシステム

Publications (1)

Publication Number Publication Date
JP2013242700A true JP2013242700A (ja) 2013-12-05

Family

ID=49582390

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012115496A Pending JP2013242700A (ja) 2012-05-21 2012-05-21 コード最適化方法、プログラム及びシステム

Country Status (2)

Country Link
US (3) US9218171B2 (ja)
JP (1) JP2013242700A (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11099853B2 (en) 2019-02-15 2021-08-24 International Business Machines Corporation Digit validation check control in instruction execution
US11023205B2 (en) * 2019-02-15 2021-06-01 International Business Machines Corporation Negative zero control in instruction execution
US11907713B2 (en) * 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
CN113609923B (zh) * 2021-07-13 2022-05-13 中国矿业大学 基于注意力的连续手语语句识别方法

Family Cites Families (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4001570A (en) * 1975-06-17 1977-01-04 International Business Machines Corporation Arithmetic unit for a digital data processor
EP0185215B1 (en) * 1984-11-21 1993-09-22 Harris Corporation Forth-like language microprocessor
SE9002558D0 (sv) * 1990-08-02 1990-08-02 Carlstedt Elektronik Ab Processor
IL100990A (en) * 1991-02-27 1995-10-31 Digital Equipment Corp Multilingual optimization compiler that uses Gladi in the production of a multi-pass cipher
US5644748A (en) * 1992-01-30 1997-07-01 Fujitsu Limited Processor system including an index buffer circuit and a translation look-aside buffer control circuit for processor-to-processor interfacing
US6035123A (en) * 1995-11-08 2000-03-07 Digital Equipment Corporation Determining hardware complexity of software operations
US5835744A (en) * 1995-11-20 1998-11-10 Advanced Micro Devices, Inc. Microprocessor configured to swap operands in order to minimize dependency checking logic
US5815719A (en) * 1996-05-07 1998-09-29 Sun Microsystems, Inc. Method and apparatus for easy insertion of assembler code for optimization
US5758336A (en) * 1996-05-30 1998-05-26 Matridigm Corp. Date format and date conversion procedure using a packed binary format
GB2317464A (en) * 1996-09-23 1998-03-25 Advanced Risc Mach Ltd Register addressing in a data processing apparatus
US5966534A (en) * 1997-06-27 1999-10-12 Cooke; Laurence H. Method for compiling high level programming languages into an integrated processor with reconfigurable logic
US6334183B1 (en) * 1997-11-18 2001-12-25 Intrinsity, Inc. Method and apparatus for handling partial register accesses
US6170001B1 (en) * 1998-05-27 2001-01-02 Arm Limited System for transfering format data from format register to memory wherein format data indicating the distribution of single or double precision data type in the register bank
JP3280332B2 (ja) 1998-07-10 2002-05-13 インターナショナル・ビジネス・マシーンズ・コーポレーション ループに対するバージョニングを実行する方法及び装置、配列レンジ・チェックに関する情報をベーシック・ブロック内において収集する方法及び装置、配列レンジ・チェックに関する情報を変更する方法、配列レンジ・チェック最適化方法、配列レンジ・チェックのためのコードを生成する方法、不要配列レンジ・チェック除去方法及び装置、配列レンジ・チェックを選択する方法、配列レンジ・チェック変更方法、配列レンジ・チェック収集方法、及び配列レンジ・チェック取扱判断方法
US6718541B2 (en) * 1999-02-17 2004-04-06 Elbrus International Limited Register economy heuristic for a cycle driven multiple issue instruction scheduler
JP2001005675A (ja) * 1999-06-21 2001-01-12 Matsushita Electric Ind Co Ltd プログラム変換装置及びプロセッサ
US6848043B1 (en) * 2000-04-27 2005-01-25 Intel Corporation Optimal redundant arithmetic for microprocessors design
JP3763516B2 (ja) * 2001-03-30 2006-04-05 インターナショナル・ビジネス・マシーンズ・コーポレーション 変換プログラム、コンパイラ、コンピュータ装置およびプログラム変換方法
JPWO2003032157A1 (ja) * 2001-09-18 2005-01-27 旭化成株式会社 コンパイル装置
US7254698B2 (en) * 2003-05-12 2007-08-07 International Business Machines Corporation Multifunction hexadecimal instructions
JP4042972B2 (ja) 2003-09-30 2008-02-06 インターナショナル・ビジネス・マシーンズ・コーポレーション 最適化コンパイラ、コンパイラプログラム、及び記録媒体
US7496908B2 (en) * 2004-01-14 2009-02-24 International Business Machines Corporation Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information
US7343482B2 (en) * 2004-10-20 2008-03-11 Arm Limited Program subgraph identification
US7389499B2 (en) * 2004-10-21 2008-06-17 International Business Machines Corporation Method and apparatus for automatically converting numeric data to a processor efficient format for performing arithmetic operations
US9075630B1 (en) * 2005-11-14 2015-07-07 The Mathworks, Inc. Code evaluation of fixed-point math in the presence of customizable fixed-point typing rules
US8201159B2 (en) * 2006-08-04 2012-06-12 International Business Machines Corporation Method and apparatus for generating data parallel select operations in a pervasively data parallel system
JP5016288B2 (ja) 2006-10-19 2012-09-05 株式会社日立製作所 最適化処理方法、及びその言語処理系
US8190664B2 (en) * 2007-04-26 2012-05-29 International Business Machines Corporation Employing a mask field of an instruction to encode a sign of a result of the instruction
US8176361B2 (en) * 2007-08-17 2012-05-08 Nytell Software LLC Data processing with protection against soft errors
JP2009134523A (ja) 2007-11-30 2009-06-18 Seiko Epson Corp コンパイラ装置、コンパイラ方法及びプログラム
EP2290538A3 (en) * 2009-08-31 2011-06-22 Imec Method and device for reducing power consumption in application specific instruction set processors
JP2011090592A (ja) * 2009-10-26 2011-05-06 Sony Corp 情報処理装置とその命令デコーダ
US8856759B2 (en) * 2010-02-01 2014-10-07 Bull Hn Information Systems Inc. Method and apparatus providing COBOL decimal type arithmetic functions with improved performance
US8555035B1 (en) * 2010-07-07 2013-10-08 Nvidia Corporation Conflict-free register allocation using a multi-bank register file with input operand alignment
US9182962B2 (en) * 2010-12-09 2015-11-10 Todd Bradley KNEISEL Method for translating a cobol source program into readable and maintainable program code in an object oriented second programming language
US9098307B2 (en) * 2011-07-22 2015-08-04 National Instruments Corporation Rearrangement of algebraic expressions based on operand ranking schemes
JP5817324B2 (ja) * 2011-08-18 2015-11-18 富士通株式会社 補正装置、補正方法、および補正プログラム
US9335993B2 (en) * 2011-12-29 2016-05-10 International Business Machines Corporation Convert from zoned format to decimal floating point format
US10120682B2 (en) * 2014-02-28 2018-11-06 International Business Machines Corporation Virtualization in a bi-endian-mode processor architecture
JP6418696B2 (ja) * 2015-07-23 2018-11-07 国立大学法人東京工業大学 命令セットシミュレータおよびそのシミュレータ生成方法

Also Published As

Publication number Publication date
US10216499B2 (en) 2019-02-26
US20130311981A1 (en) 2013-11-21
US9218171B2 (en) 2015-12-22
US20160062752A1 (en) 2016-03-03
US9996327B2 (en) 2018-06-12
US20180239598A1 (en) 2018-08-23

Similar Documents

Publication Publication Date Title
JP5646737B2 (ja) 条件付き比較命令
US8359460B2 (en) Running-sum instructions for processing vectors using a base value from a key element of an input vector
US7284241B2 (en) Compiler, compiler apparatus and compilation method
US8417921B2 (en) Running-min and running-max instructions for processing vectors using a base value from a key element of an input vector
US8447956B2 (en) Running subtract and running divide instructions for processing vectors
EP1462933A2 (en) Processor with loop instruction, and compiler for the same
US10216499B2 (en) Method, program, and system for code optimization
CN115686633A (zh) 用于实现链式区块操作的系统和方法
US8484443B2 (en) Running multiply-accumulate instructions for processing vectors
Kusswurm Modern X86 Assembly Language Programming
US20120317560A1 (en) Method for optimizing binary codes in language having access to zoned decimal type variable, optimization apparatus and computer program for the same
JP5966509B2 (ja) プログラム、コード生成方法および情報処理装置
JP2015201119A (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
JP6251158B2 (ja) プログラム変換システム
US5774694A (en) Method and apparatus for emulating status flag
US11886839B2 (en) Non-transitory computer-readable recording medium, function generation method, and information processing device
JP2009258796A (ja) プログラム開発装置及びプログラム開発方法
KR101559651B1 (ko) 동적 분석 방법 및 장치
KR102122455B1 (ko) 프로세서의 디코더 검증을 위한 테스트 벤치 생성 방법 및 이를 위한 장치
CN114327497A (zh) 一种代码处理方法、装置及设备
JP3727039B2 (ja) コンパイラにおける乗算実施方法
JP2020052707A (ja) プログラム変換システム、変換プログラム実行システム、情報処理システム、プログラム変換方法、変換プログラム実行方法、及び情報処理方法
US20180196801A1 (en) Linker rewriting to eliminate toc pointer references
JP5910197B2 (ja) 組み込み用プログラム開発装置、コンパイル方法およびコンパイラプログラム
WO2020116025A1 (ja) コンパイル装置、コンパイル方法、及び非一時的なコンピュータ可読媒体