マニュアルでアンローリングしたコードを逆アセンブルしてみると、SIMD化していないことに気づきました。
モダンなC++では、下記のような書き方が出来るようですが、私のコードはそこまで洗練されていません。
https://proc-cpuinfo.fixstars.com/2022/12/loop-unroll-in-modern-cpp/
AVX2だと、単精度で8演算が同時に可能なので、8WEEKSに取り掛かる前にさらにSIMDによる高速化を検討します。具体的には、以下のような処理をします。
SIMD 演算で if 文の並列化 - その1 - - kawa0810 のブログ (hateblo.jp)
データフェッチが不揃いなので、ネックは、データフェッチ自体にあります。なので、どれだけ効果があるのかは、現時点では不明です。
また、4Weeksに関しては、現時点でも0.3ms位なので、これ以上何かしても、全く寄与しないことは明らかです。が、これから8weeks、さらに巨大なインスタンスに立ち向かうときは、この計算がネックなので、出来る限りのことをやっておいても無駄にはなりません。
0 件のコメント:
コメントを投稿