4.7. 除算処理をループの外側に移動しSIMD化

4.7.1. チューニング対象

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

4.7.2. 分析

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

  • 下記ソースコード抜粋の①ループには関数呼び出しなど多くの処理を含み、①ループ全てを SIMD 化することはできません。

  • 下記ソースコード抜粋の②の除算処理は、①ループに関わらず一定の値です。

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

image19

4.7.3. 実施

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

  • 除算処理部分(上記ソースコード中の②)を①ループの外側に移動します。移動したループは SIMD 化することができます。

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

image20

このチューニングでは、除算処理の SIMD 化を目的としましたが、上記ソースコード中の①のループから除算処理がなくなることで①のループの演算量を削減できるという効果もありました。

4.7.4. 効果の検証

実施したチューニングの効果を、チューニング実施前後の基本プロファイラを用いて評価しました。下表はコストの計測結果です。本節のチューニングによりアプリケーション全体でコストが0.7%減少しました。

コスト

性能改善率 ((A-B)/A)

本節のチューニング実施前 (A)

本節のチューニング実施後 (B)

アプリケーション全体

1496964

1487018

0.7%

make_function_7

135824

443

96.7%

※ 上表は768MPI並列実行での計測