Pregunta

¿Es posible llegar a producir código GHC SIMD para las distintas generaciones de ESS?

Ej. tiene un programa como este

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

I puede ver el código generado (compilado para x86 64 bit) utilizar instrucciones SSE en modo escalar (ambos C y ASM backends). Así que en lugar de addsd addpd. Para los tipos de programas que trabajo en el uso de instrucciones vectoriales que es importante para el rendimiento. ¿Hay una manera fácil para un novato como yo para conseguir GHC a SIMDize el código usando SSE?

¿Fue útil?

Solución

Sí, es posible, a través del backend C, pero es prueba y error. Las banderas que utilizan:

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

A continuación, espero GCC ve el bucle estrecho GHC genera a través del código uvector, y se da cuenta que hay potencial SIMD.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top