4.7. 除算処理をループの外側に移動しSIMD化¶
4.7.1. チューニング対象¶
本節で対象とした make_function_7 関数は、「システム方程式マトリクス構築」の計測区間に含まれ、チューニング実施前のアプリケーション全体の約1.2%のコストを占めている関数です。
4.7.2. 分析¶
make_function_7 関数を分析した結果、下記のループに着目しました。このループの特徴は以下の通りです。
下記ソースコード抜粋の①ループには関数呼び出しなど多くの処理を含み、①ループ全てを SIMD 化することはできません。
下記ソースコード抜粋の②の除算処理は、①ループに関わらず一定の値です。
[チューニング実施前の make_function_7 関数のソースコード抜粋]
4.7.3. 実施¶
分析結果を踏まえて、以下のチューニングを実施しました。
除算処理部分(上記ソースコード中の②)を①ループの外側に移動します。移動したループは SIMD 化することができます。
[チューニング実施後の make_function_7 関数のソースコード抜粋]
このチューニングでは、除算処理の SIMD 化を目的としましたが、上記ソースコード中の①のループから除算処理がなくなることで①のループの演算量を削減できるという効果もありました。
4.7.4. 効果の検証¶
実施したチューニングの効果を、チューニング実施前後の基本プロファイラを用いて評価しました。下表はコストの計測結果です。本節のチューニングによりアプリケーション全体でコストが0.7%減少しました。
コスト |
性能改善率 ((A-B)/A) |
||
---|---|---|---|
本節のチューニング実施前 (A) |
本節のチューニング実施後 (B) |
||
アプリケーション全体 |
1496964 |
1487018 |
0.7% |
make_function_7 |
135824 |
443 |
96.7% |
※ 上表は768MPI並列実行での計測