توليد كود متجه من Haskell؟
-
12-09-2019 - |
سؤال
هل من الممكن الحصول على GHC لإنتاج رمز SIMD لأجيال SSE المختلفة؟
على سبيل المثال حصلت على برنامج مثل هذا
import Data.Array.Vector
main = print . sumU $ (enumFromToFracU 1 10000000 :: UArr Double)
أستطيع أن أرى التعليمات البرمجية التي تم إنشاؤها (مترجمة ل 64 بت x86) استخدم تعليمات SSE في وضع العدد الأساسي (كلا C و ASM Backends). لذلك addsd بدلا من addpd. لأنواع البرامج التي أعملها على استخدام تعليمات متجه أمر مهم للأداء. هل هناك طريقة سهلة لبناء مبتدئ مثل نفسي للحصول على GHC لتحسين الرمز باستخدام SSE؟
المحلول
نعم، من الممكن، عبر Backend C، لكنه محاكمة وخطأ. الأعلام التي أستخدمها:
gcc -O2 -funbox-strict-fields -fvia-C -optc-O3 -march=native -optc-msse4
ثم نأمل أن تنتج البقع الخليجية الحلقة الضيقة GHC عبر رمز uvector، وتحقق هناك إمكانات SIMD.
لا تنتمي إلى StackOverflow