ハスケルからベクトルコードを生成しますか?
-
12-09-2019 - |
質問
これは、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するために取得するなど、初心者のための簡単な方法はありますか?
解決
はい、それはCのバックエンドを介して、可能であるが、それは試行錯誤です。 フラグは、私が使用します:
gcc -O2 -funbox-strict-fields -fvia-C -optc-O3 -march=native -optc-msse4
そして、GCCは、GHCはユニフォームベクタコードを経由して発生タイトなループをスポットし、SIMD可能性があります実現を願っています。
所属していません StackOverflow