4.8. ループ外への不変式の移動

4.8.1. チューニング対象

本節で対象とした calc_function_2 関数は、「システム方程式マトリクス計算」の計測区間に含まれ、チューニング実施前のアプリケーション全体の約1.9%のコストを占めている関数です。本関数は「システム方程式マトリクス計算」に含まれる関数の中では、2番目にコストが高い関数です。

4.8.2. 分析

calc_function_2 関数を分析した結果、下記のループに着目しました。このループの特徴は以下の通りです。

  • ソースコード抜粋の①ループは、コンパイラによりループ展開されます。

  • ソースコード抜粋の②の除算結果は、ループにかかわらず一定であるため、①ループの外に移動することが可能です。

[チューニング実施前の calc_function_2 関数のソースコード抜粋]

image21

4.8.3. 実施

分析結果を踏まえて、以下のチューニングを実施しました。

  • ①ループに対して不変な除算処理をループの外に移動します。

[チューニング実施後の calc_function_2 関数のソースコード抜粋]

image22

4.8.4. 効果の検証

実施したチューニングを評価するために、詳細プロファイラで出力した、「システム方程式マトリクス計算」計測区間の Cycle Accounting(プログラムの実行時間の内訳)を、チューニング実施前後で比較しました。

image23

上記グラフのうち、チューニング実施前の中で最も実行時間が長いプロセス(Process 388)と、チューニング実施後の中で最も実行時間が長いプロセス(Process 392)を比較すると、チューニング実施後では約0.4%実行時間が改善しました。これは、本チューニングによる効果が表れていると考えられます。