سؤال

هل من الممكن الحصول على 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top