パスワードを忘れた? アカウント作成
13989879 journal
日記

route127の日記: 定数畳み込み 3

日記 by route127

発見器眺めてたらgccではループ回数が5以上だとループ内について定数畳み込みが効かなくなるみたいな話があった。
別記事でもgccにおいて定数配列で表現したベクトルの内積計算で同様にループ5回までコンパイルで即値に展開される結果を得ている人も居た。
というかこの記事書いてるのはこの間タレこまれていた***********printfの人だな。

gccだと定数検出に__builtin_constant_p関数が使われるとあるけれどループ等条件によっては使われなくなったり、機能を発揮しなくなったりするのだろうか。
他にも定数畳み込みについてはvolatile修飾悪影響を及ぼしたり(元ネタ論文スライド)とか関数を別ファイルにした時の定数伝播とデッドコード削除がリンク時最適化(-FLTO)の有無で変わってきたりなどという挙動を見せたりもするらしい。

飲み会で偶然ゲームのデバッグ要員と隣合う話がなんか面白かった。
升界隈とかだと折井でシコシコこういうのやってる印象ある。

  • by Anonymous Coward on 2019年08月27日 11時57分 (#3675891)

    たとえば大抵の人はAVX2対応CPUで-march=nativeをつけるか明示的に-mavx2をつけるとAVXレジスタを利用したバイナリ吐いてくれると錯覚している。
    だが実際には上記オプションを指定した上で、最低でも-O3か明示的に-ftree-vectorizeをつけないとAVXレジスタが使われることはない。
    同様に「定数の畳み込み」をループを越えて行おうとするならば同時に-funroll-*系のオプションが必須。
    さらにいうと、そのコンパイルするgccが--with-graphite, --with-islつきでビルドされていないと、そもそもunloop系最適化自体が不可能。

    gccオプションは呪文。
    素人はその理解を深めずにしったかでデマを飛ばすから始末に負えない。

    ここに返信
    • by Anonymous Coward

      これは見事なストローマンw

  • by Anonymous Coward on 2019年08月28日 0時40分 (#3676383)
    ここに返信
typodupeerror

私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson

読み込み中...