3

GHC にさまざまな SSE 世代の SIMD コードを生成させることは可能ですか?

例えば。このようなプログラムを取得しました

import Data.Array.Vector
main = print . sumU $ (enumFromToFracU 1 10000000 :: UArr Double)

生成されたコード (64 ビット x86 用にコンパイル) がスカラー モード (C および asm バックエンドの両方) で SSE 命令を使用していることがわかります。したがって、addpd ではなく、addsd です。私が取り組んでいるプログラムの種類では、ベクトル命令の使用はパフォーマンスにとって重要です。私のような初心者が GHC に SSE を使ってコードを SIMDize させる簡単な方法はありますか?

4

1 に答える 1

8

はい、C バックエンド経由で可能ですが、試行錯誤が必要です。私が使用するフラグ:

 gcc -O2 -funbox-strict-fields -fvia-C -optc-O3 -march=native -optc-msse4

次に、GCC が uvector コードを介して GHC が生成するタイト ループを検出し、SIMD の可能性があることに気付くことを願っています。

于 2009-09-20T23:41:16.260 に答える