Frage

Ist es möglich, GHC dazu zu bringen, SIMD -Code für die verschiedenen SSE -Generationen zu erstellen?

Z.B. Ich habe ein Programm wie dieses

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

Ich kann sehen, dass der generierte Code (kompiliert für 64 Bit x86) SSE -Anweisungen im Skalarmodus (sowohl C- als auch ASM -Backends) verwendet. So fügt es eher als addpd hinzu. Für die Arten von Programmen, die ich an der Verwendung von Vektoranweisungen arbeite, ist für die Leistung wichtig. Gibt es eine einfache Möglichkeit für einen Neuling wie mich, GHC dazu zu bringen, den Code mit SSE zu simdieren?

War es hilfreich?

Lösung

Ja, es ist über das C -Backend möglich, aber es ist Versuch und Irrtum. Die Flaggen, die ich benutze:

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

Dann hofft GCC, dass die enge Schleife GHC über den UVector -Code generiert und feststellt, dass ein SIMD -Potenzial besteht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top