<< 生成コードの最適化の検討 >> 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 以上