トップページ > プログラム > 2020年03月25日 > JuA9otrT

書き込み順位&時間帯一覧

16 位/132 ID中時間01234567891011121314151617181920212223Total
書き込み数1000000000000001000000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
426
【C++】高速化手法【SSE】2 [転載禁止]©2ch.net

書き込みレス一覧

【C++】高速化手法【SSE】2 [転載禁止]©2ch.net
426 :デフォルトの名無しさん[sage]:2020/03/25(水) 00:15:18.17 ID:JuA9otrT
ICC 19.1って32bitで最適化してビルドすると、コード生成の拡張命令でSSE2やAVX未満を指定してもAVXのコード吐き出す事がある謎の仕様があって困る。というかたぶんバグ。
できあがったコードに正常でない無効なオペランドが含まれたり要はぶっ壊れてる。
これを回避するには、最適化 /Od 無効で任意の拡張命令を指定するとAVXが含まれずに正常なコードになるが、最適化はたぶんされていないだろうな・・・。
古い環境作ってレガシー用のビルド環境まだ要るんかなあ。
【C++】高速化手法【SSE】2 [転載禁止]©2ch.net
429 :426[sage]:2020/03/25(水) 15:55:42.99 ID:JuA9otrT
謎のAVX出力は_mulx_u32が原因だった。
てっきりただの乗算と思いきや、これBMI2つまりAVX2の命令セット世代なんですね。
おそらくベクトル化を試みるかをした時、コンパイラ内部の命令セットのフラグがAVX2に上書きされて処理がおかしくなっていると予想。

今回の問題が無かったにせよ、非AVX2環境では動かないコードになっていたので自分のバグでもあるが、普通に動く場合もあるので注意がいる。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。