Pergunta

É possível fazer com que o GHC produza o código SIMD para as várias gerações SSE?

Por exemplo. Tenho um programa como este

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

Eu posso ver o código gerado (compilado para 64 bits x86) usar instruções SSE no modo escalar (backends C e ASM). Portanto, addsd em vez de addpd. Para os tipos de programas, trabalho no uso de instruções vetoriais é importante para o desempenho. Existe uma maneira fácil de um novato como eu fazer com que o GHC simdize o código usando o SSE?

Foi útil?

Solução

Sim, é possível, através do back -end C, mas é tentativa e erro. As bandeiras que eu uso:

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

Espero que o GCC spot o loop apertado GHC gera através do código UVECTOR e perceba que há potencial SIMD.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top