Вопрос

Можно ли заставить 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top