سؤال

سلسلة v4 من gcc يمكن للمترجم توجيه الحلقات تلقائيًا باستخدام ملف SIMD المعالج على بعض وحدات المعالجة المركزية الحديثة، مثل رقائق AMD Athlon أو Intel Pentium/Core.كيف يتم ذلك؟

هل كانت مفيدة؟

المحلول

تقدم الصفحة الأصلية تفاصيل حول الحصول على دول مجلس التعاون الخليجي لتجاوز الحلقات تلقائيًا ، بما في ذلك بعض الأمثلة:

http://gcc.gnu.org/projects/tree-ssa/vectorization.html

على الرغم من أن الأمثلة رائعة، إلا أنه يبدو أن صياغة استدعاء هذه الخيارات بأحدث دول مجلس التعاون الخليجي قد تغيرت قليلاً، انظر الآن:

باختصار ، ستعمل الخيارات التالية مع رقائق X86 مع SSE2 ، مع إعطاء سجل من الحلقات التي تم تجهيزها:

gcc -O2 -ftree-vectorize -msse2 -ftree-vectorizer-verbose=5

لاحظ أن -MSSE هو أيضًا احتمال ، لكنه سيؤدي فقط إلى تفسير الحلقات باستخدام العوامات ، وليس الزوجي أو ints.

نصائح أخرى

يوجد تصريح gimple (التمثيل المتوسط ​​لدول مجلس التعاون الخليجي). pass_vectorize.سيعمل هذا التمرير على تمكين التوجيه التلقائي على مستوى gimple.

لتمكين التوجيه التلقائي (GCC V4.4.0)، نحتاج إلى اتباع الخطوات التالية:

  1. اذكر عدد الكلمات في المتجه حسب البنية المستهدفة.يمكن القيام بذلك عن طريق تحديد الماكرو UNITS_PER_SIMD_WORD.
  2. يجب عادةً تحديد أوضاع المتجهات الممكنة في ملف منفصل <target>-modes.def.يجب أن يتواجد هذا الملف في الدليل حيث توجد الملفات الأخرى التي تحتوي على أوصاف الجهاز.(حسب البرنامج النصي للتكوين.إذا كان بإمكانك تغيير البرنامج النصي، فيمكنك وضع الملف في أي دليل تريده).
  3. الأوضاع التي يجب أخذها في الاعتبار عند التوجيه وفقًا للبنية المستهدفة.على سبيل المثال، ستشكل 4 كلمات متجهًا أو ستشكل ثماني كلمات نصف متجهًا أو ستشكل كلمتان مزدوجتان متجهًا.ولا بد من ذكر تفاصيل ذلك في <target>-modes.def ملف.على سبيل المثال:

    VECTOR_MODES (INT, 8);     /*       V8QI V4HI V2SI /
    VECTOR_MODES (INT، 16)؛/
    V16QI V8HI V4SI V2DI /
    VECTOR_MODES (عائم، 8)؛/
               V4HF V2SF */

  4. بناء الميناء.يمكن تمكين التوجيه باستخدام خيارات سطر الأوامر -O2 -ftree-vectorize.

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