生成コードの最適化の検討 >>
2006/10/13 MT
2006/10/20 MT
■最適化で何を行うか?
1.不要な処理を出力しない。
2.不要な変数を保持しない。※20061020リリースでは保留とする。
■最適化の方針
1.コード生成時に mapping definition を一通り見て、不要な処理を出力しない。
2.カレントノードの祖先を見て、不要な処理を出力しない。
3.コード生成時にオプションをつけ、不要な処理を出力しない。
※20061020リリースでは保留とする。
■最適化の実作業
- デバッグライトはデバッグオプションがある時だけ出力する。
- 全体を見て、不要な処理を出力しない。
-> グローバルチェック。
-> データの初期化削除などに用いる。
- bit / byte / data / value において、不要な処理を出力しない。
-> ローカルチェック。
-> コンテナ処理の削除などに用いる。
-> list、loop、interleave を含むスキーマであったとしても、それらが祖先にな
ければ、それに関する処理は行わないようにする。)
- ライブラリ関数
-> 必要な処理のみを出力する。
※ここまでは手は回らない。
※必要か不要かをどのように判定するか?
1.チェック処理をもうけ、フラグをシェルの実行オプションとして付与する。
-> コマンドのインタフェース変わってしまう。
2.動的にチェックし、その都度出力するかどうか判定しながら実行する。
-> 処理が煩雑になる。
-> 20061020リリースではこの判定方式で行う。
※この時、処理を減らす前の状態でも、正しく動くことを確認する必要があるか?
-> 「昔通り全て出力するオプション」を付与する。
■改修方法
- チェック方法
-> 子孫にそのデータを含むかどうかのフラグを変数に格納する。
- 変数宣言や初期化の削除
変数宣言;
初期化;
- その他の処理の削除
処理;
※以下のケースの厳密な最適化まで今回は行わなくてもよい。
この時、byte の pushContainer()、popContainer() は不要。
■改修箇所
- src/java/jp/jaxa/isas/ums/codeGenerator/GeneratorMain.java
- src/java/jp/jaxa/isas/ums/codeGenerator/Generator.java
- src/txtclng.tmp
- src/txtjava.tmp
実行オプションの解析処理を追加する。
- txt2clng.xsl
- txt2java.xsl
- defineMapping.xsl
ums__list_t *ums__list;
ums__loop_t *ums__loop;
ums__interleave_t *ums__interleave;
ums__thread_mng_interleave_t ums__thread_mng_interleave;
ums__thread_mng_interleave_t *ums__thread_mng_interleavep = &ums__thread_mng_interleave;
ums__list = &(list);
ums__loop = &(loop);
ums__interleave = &(il);
ums__loop = &( loop );
ums__list = &( list );
ums__interleave = &( il );
if ( ) {
thread_new = ums__thread_mngp, ums__debug;
}
- tool_java.xsl
- tool_clng.xsl
※list と interleave をはずすときは、祖先をチェックする。
- bit
if ( ums__thread_mngp, ums__interleave, +, ums__debug ) break;
case +:
ums__thread_mngp, ums__interleave, -, ums__debug ;
case -:
- byte
if ( ums__thread_mngp, ums__interleave, +, ums__debug ) break;
case +:
ums__thread_mngp, ums__interleave, -, ums__debug ;
case -:
- list
if ( ums__thread_mngp, ums__interleave, +, ums__debug ) break;
case +:
ums__thread_mngp, ums__interleave, -, ums__debug ;
case -:
- value
- data
以上