Создать векторный код из Haskell?
-
12-09-2019 - |
Вопрос
Можно ли заставить GHC создавать код SIMD для различных поколений SSE?
Например.есть такая программа
import Data.Array.Vector
main = print . sumU $ (enumFromToFracU 1 10000000 :: UArr Double)
Я вижу, что сгенерированный код (скомпилированный для 64-битной версии x86) использует инструкции SSE в скалярном режиме (как на C, так и на asm).Так что addsd, а не addpd.Для тех типов программ, над которыми я работаю, использование векторных инструкций важно для производительности.Есть ли простой способ для такого новичка, как я, заставить GHC SIMDize код с помощью SSE?
Решение
Да, это возможно через серверную часть C, но это метод проб и ошибок.Флаги, которые я использую:
gcc -O2 -funbox-strict-fields -fvia-C -optc-O3 -march=native -optc-msse4
Тогда будем надеяться, что GCC обнаружит тесный цикл, который GHC генерирует через увекторный код, и поймет, что существует потенциал SIMD.
Не связан с StackOverflow