Loops 从Haskell生成向量代码?

Loops 从Haskell生成向量代码?,loops,haskell,vector,parallel-processing,simd,Loops,Haskell,Vector,Parallel Processing,Simd,是否有可能让GHC为不同的SSE代生成SIMD代码 我有这样一个节目 import Data.Array.Vector main = print . sumU $ (enumFromToFracU 1 10000000 :: UArr Double) 我可以看到生成的代码(针对64位x86编译)在标量模式下使用SSE指令(C和asm后端)。所以是addsd而不是addpd。对于我工作的程序类型,向量指令的使用对性能很重要。对于像我这样的新手来说,有没有一种简单的方法让GHC使用SSE简化代码?

是否有可能让GHC为不同的SSE代生成SIMD代码

我有这样一个节目

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

我可以看到生成的代码(针对64位x86编译)在标量模式下使用SSE指令(C和asm后端)。所以是addsd而不是addpd。对于我工作的程序类型,向量指令的使用对性能很重要。对于像我这样的新手来说,有没有一种简单的方法让GHC使用SSE简化代码?

是的,通过C后端是可能的,但这是反复试验。 我使用的标志:

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

然后希望GCC发现GHC通过uvector代码生成的紧密循环,并意识到存在SIMD潜力。

感谢您的提示-无法让GHC和GCC在一些简单的uvector调用上进行合作。现在我知道了,我会继续试验。至少从表面上看,icc似乎不可用作C后端—它在ghc-6.10.4/lib/ghc-6.10.4/include/Regs.h上出现问题,因为“error:variable type”union“不适合寄存器”。