haskell-jp / random #104 at 2023-11-01 13:21:40 +0900

AtCoder での最近の Haskell (GHC 9.4.5) update from (8.8.3) によって実行速度が低下している模様 例: 競プロ典型 90 問 9 日目 - Three Point Angle
https://atcoder.jp/contests/typical90/submissions/47126051
あー,これ公知するの忘れてました. VAI.sortVAI.sortBy compare で置き換えると改善します:

https://atcoder.jp/contests/typical90/submissions/47136959

VAI.sort{-# INLINABLE sort #-} になっています. vector-algorithms における7年前のコミット https://github.com/erikd/vector-algorithms/commit/298333ee4a26bdd25a08a852d3123c9aab24c364 で,「`INLINABLE` ではなく {-# INLINE sort #-} としないとパフォーマンスが悪化するということだがそれが再現しない」,ということを理由に INLINABLE に差し戻された状態です.GHC 8.8.3 ではきちんとインライン化されていたところ,多分 GHC 9.4.5 のバグか仕様かで sort がインライン化されなくて時間がかかっているようなんですよね.
バグ情報を改善法まで含めて教えて下さり ありがとうございました やっと典型 90 問 9 日目 AC が出ました :pray:
それはよかったです.あ,一応ですが, VAI.sortVAI.sortBy compare に置き換える以外にも,

{-# RULES "Force inline VAI.sort" VAI.sort = VAI.sortBy compare #-}

を追加することによってもACできることを確認しました:
https://atcoder.jp/contests/typical90/submissions/47295075
import を大量に書いたtemplateを用意して書くタイプではなさそうなコードなので,あんまりお役に立つかはわからないですけど.