Question

Est-il possible d'obtenir GHC pour produire du code SIMD pour les différentes générations SSE?

Par exemple. a obtenu un programme comme celui-ci

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

Je peux voir le code généré (compilé pour 64 bits x 86) en utilisant les instructions SSE en mode scalaire (les deux backends C et EAM). Alors addsd plutôt que addpd. Pour les types de programmes que je travaille sur l'utilisation des instructions vectorielles est important pour la performance. Est-il un moyen facile pour un débutant comme moi pour obtenir GHC à SIMDize le code en utilisant SSE?

Était-ce utile?

La solution

Oui, il est possible, via le back-end C, mais il est tâtonnement. Les drapeaux que j'utilise:

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

Alors espérons que la boucle GCC voit serré GHC génère via le code uvector, et se rend compte qu'il est possible SIMD.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top