• 検索結果がありません。

setjmp 法向け最適化の評価

ドキュメント内 言語への変換による (ページ 94-97)

第 6 章 例外処理の実現

6.3 評価

6.3.1 setjmp 法向け最適化の評価

setjmp法向け最適化が実行速度に与える影響を評価した結果を図6.6に示す.評価は全

ての最適化を適用した場合の実行速度を基準として,個々の最適化を適用しなかった場合

‹‹



ˆˆ‡‡

‰‰

IIBB Ðи¸KK¨¨¡¡{{MM””‡‡|€|€



u1¨Ê{-

K¨¡{-‡‡

”®|™

”®|™··jÄáá

¶‰¶‰‡‡ˆ¶ˆ¶ººÆÆÄÄÇÇɼɼÊÊÊÊ

¶‰¶‰‡‡‰¶‰¶ÁÁ¼Ê¼ÊÊÊ

¶‰¶‰‡‡¶¶»¹»¹

¶‰¶‰ˆˆŠ¶Š¶ÁÁ¸¸Í¸Í¸ºº

¶‰¶‰‰‰‰¶‰¶ÄǼÄǼ¾¾¸Ì»¸Ì»ÀÀÆÆ

¶‰¶‰‰‰Ž¶Ž¶ÄËÉËÄËÉË

¶‰¶‰‰‰¶¶ÁÁ¸¸ººÂ ç ç$$ l3- 1°ð-l3-

£Ç|1µ1°ð-8öª

ˆˆ‹‹

ˆˆ

ˆˆ‰‰

ˆˆ

„„‰‰

図 6.6: setjmp法向け最適化が実行速度に与える影響

にどれだけ実行速度が低下するか測定することでおこなった.低下率が大きいほど 有効な 最適化であるといえる.図6.6の縦軸は最適化を適用しなかった場合の実行速度の低下率 を表し,横軸はベンチマーク項目名を表す.個々の最適化の効果について考察する.

volatile宣言の最小化

図6.6から,volatile宣言の最小化が実行速度に相乗平均で1.2%,項目別では 209 db

213 javac228 jackにそれぞれ4.1%2.5%2.4%の影響を与えることが判る.こ の値は単一の最適化から得られる値として決して小さくなく,したがってvolatile宣言の 最小化は実現する価値のある最適化であるといえる.なお,volatile宣言の最小化によっ てvolatile宣言する自動変数の数に与える影響を評価した結果を表6.2に示す.表6.2

図6.6において,最適化なしとはtryブロックをもつメソッド 内の全自動変数をvolatile 宣言する場合を表す.表6.2から,最適化によってvolatile宣言する自動変数の数が最 適化なし の場合と比較して 1

10

以下に減少することが判る.

表6.2: volatile宣言の最小化によるvolatile宣言数の変化

try volatile宣言数 ベンチマーク 自動変数

ブロック 最適化 項目名 宣言総数

総数 なし あり 201 compress 5,532 97 1,012 70

202 jess 10,100 121 1,276 86

209 db 6,095 106 1,193 84

213 javac 13,873 180 2,094 150

222 mpegaudio 9,088 97 1,155 86

227 mtrt 6,524 105 1,235 74

228 jack 9,347 168 1,817 96

表6.3: enterTry()の実行回数と最適化の影響

enterTry() ベンチマーク 実行

実行箇所 平均 throw

項目名 時間

tryブロック入口 例外処理方式変換部 実行 回数

(sec) 最適化なし 最適化あり( 削減率) 最適化なし 最適化あり( 削減率) 頻度

201 compress 253.8 1,959 1,882( 3.93%) 1,644 882(46.35%) 11 0

202 jess 401.2 1,240,894 30,599(97.53%) 707,879 705,674( 0.31%) 1,835 0

209 db 737.0 61,438,533 32,154(99.95%) 28,5355 283,097( 0.79%) 428 0

213 javac 315.7 1,609,073 952,535(40.80%) 2,628,947 2,192,371(16.61%) 9,960 21,373

222 mpegaudio 280.6 2,146 2,136( 0.47%) 18,532 17,794( 3.98%) 71 0

227 mtrt 403.0 4,909 4,772( 2.79%) 349,625 189,835(45.70%) 483 0

228 jack 312.6 7,385,349 4,371,780(40.80%) 634,660 499,353(21.32%) 15,581 241,876

※削減率は,最適化によって減少したenterTry()の実行回数の比率を表す.

※実行時間は,例外処理をsetjmp法で実施(全setjmp法向け最適化を適用)した場合のベンチマークの実行時間を表す.

※平均実行頻度は最適化時のenterTry() マクロの秒間あたりの実行回数で、総実行回数を実行時間で除して求めた値である.

冗長なenterTry()

,

exitTry()の除去

図6.6から,冗長なenterTry(),exitTry()の除去が 209 dbに特に有効な最適化であり,

最適化を適用しないと実行速度が8.4%遅くなってしまうことが判る.最適化がenterTry() の実行回数に与える影響を評価した結果を表6.3に示す.表6.3から, 209 dbについて,

最適化によってenterTry()の実行回数を99.95%削減していることが 判り,実行速度の 改善が偶然によるものではないと判断できる.

冗長な例外処理方式の変換の除去

図6.6から,冗長な例外処理方式の変換を除去する最適化に実行速度を改善する効果は余 りないといえる.最適化が例外処理方式の変換をどれだけ除去するか評価した結果を表6.3

に示す.表6.3から,最適化によって例外処理方式の変換回数,すなわち例外処理方式変 換部におけるenterTry()の実行回数が0.31%46.35%減少することが 判る.46.35%

いう数字は小さくないが,それにもかかわらず実行速度に影響がでないのは,そもそもイ

ンタプ リタから静的コンパイル済みコード を呼び出す回数( 表6.3の,例外処理変換部で

最適化なし の場合にenterTry()を実行する回数)自体が少ないためだと考える.

setjmp()の利用

図6.6から, setjmp()longjmp()の代わりにsetjmp()longjmp()を使うと相乗

平均で0.70%実行速度が低下することが判る.特に 213 javac228 jackの2項目につ

いては,それぞれ1.5%2.6%と大きな影響が出ているが,表6.3から,これらのベンチ

マーク項目ではtryEnter()マクロ,すなわちsetjmp()の実行頻度が高いことが 判り,

測定結果が偶然ではないといえる.相乗平均で0.70%という数値は単一の最適化から生じ る影響としては必ずしも小さくなく,OS setjmp()に相当する機能を提供する場合に は,setjmp()に替えて setjmp()を利用することが望ましいと考える.

6.3.2 2

返戻値法向け最適化の評価

ここでは本論文で提案した2返戻値法向け最適化である,下方移動による例外発生検査 の除去あるいは集約が実行速度に与える影響を評価する.2返戻値法向け最適化には,他 に インライン展開と手続間解析による冗長な例外発生検査の除去があるが,これらは評価 対象から除外する.前者を除外する理由は,インライン展開そのものが 実行速度にあたえ る影響から例外発生検査の除去のみが実行速度に与える影響を単離することが困難である ためである.後者を除外する理由は,効果がなかったからである.

下方移動による例外発生検査の除去あるいは集約

例外発生検査の下方移動による除去あるいは集約が実行速度に与える影響を評価した結 果を図6.7に示す.評価は最適化を実施した場合を基準とし て最適化を適用しなかった場 合に実行速度がどれだけ低下するか測定することでおこなった.図6.7の縦軸は実行速度

の低下率を表し ,横軸は測定対象のベンチマーク項目名を表す.図6.7から,最適化を適

用しないと実行速度が相乗平均で0.96%低下することが 判り,下方移動による最適化があ る程度有用であるといえる.

ドキュメント内 言語への変換による (ページ 94-97)