سؤال

لقد كنت أقرأ عن ملحقات مجموعة تعليمات x86، ويبدو أنها مفيدة فقط في بعض الظروف المحددة تمامًا (على سبيل المثال HADDPD - (أفقي-إضافة-معبأ-مزدوج) في SSE3).تتطلب هذه تخطيطًا معينًا للسجل يحتاج إما إلى إعداده عمدًا، أو يحدث من سلسلة التعليمات التي تسبقه.كم مرة يستخدم المترجمون للأغراض العامة مثل gcc هذه التعليمات (أو مجموعة فرعية منها)، أم أنها تستخدم بشكل أساسي في المجمع المشفر يدويًا؟كيف يكتشف المترجم المكان المناسب لاستخدام تعليمات SIMD؟

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

المحلول

بشكل عام، عدد قليل من المترجمين يستخدمونها.لا يتمكن كل من دول مجلس التعاون الخليجي وVisual Studio عادةً من استخدام تعليمات SIMD.إذا قمت بتمكين SSE كعلامة مترجم، فسوف تستخدم تعليمات SSE العددية لعمليات الفاصلة العائمة العادية، ولكن بشكل عام، لا تتوقع استخدام تلك الموجهة تلقائيًا.قد تكون الإصدارات الحديثة من دول مجلس التعاون الخليجي قادرة على استخدامها في بعض الحالات، ولكنها لم تعمل آخر مرة حاولت فيها.إن برنامج التحويل البرمجي C++ من Intel هو المترجم الكبير الوحيد الذي أعرف أنه قادر على توجيه بعض الحلقات تلقائيًا.

بشكل عام، سيكون عليك استخدامها بنفسك.إما في المجمع الخام، أو باستخدام جوهر المترجم.بشكل عام، أود أن أقول إن الجوهرية هي النهج الأفضل، لأنها تسمح للمترجم بشكل أفضل بفهم الكود، وبالتالي الجدولة والتحسين، ولكن من الناحية العملية، أعلم أن MSVC على الأقل لا يولد دائمًا تعليمات برمجية فعالة جدًا من الجوهريات، لذلك قد يكون asm العادي هو الحل الأفضل هناك.التجربة، انظر ما الذي يعمل.لكن لا تتوقع أن يستخدم المترجم هذه التعليمات نيابةً عنك، إلا إذا كنت 1) تستخدم المترجم الصحيح، و2) تكتب حلقات بسيطة إلى حد ما يمكن توجيهها بشكل تافه.

تحديث 2012
حسنًا، لقد مرت ثلاث سنوات منذ أن كتبت هذه الإجابة.تمكنت دول مجلس التعاون الخليجي من تحويل التعليمات البرمجية (البسيطة) تلقائيًا لبضع سنوات حتى الآن، وفي VS2012، MSVC أخيراً يكتسب نفس القدرة.وبطبيعة الحال، لا يزال الجزء الرئيسي من إجابتي ينطبق:لا يزال بإمكان المترجمين فقط توجيه التعليمات البرمجية التافهة إلى حد ما.بالنسبة لأي شيء أكثر تعقيدًا، فأنت عالق في العبث بالجوهر أو asm المضمّن.

نصائح أخرى

ومونو يمكن استخدام ملحقات SIMD طالما كنت تستخدم فئاته لناقلات. يمكنك أن تقرأ عنها هنا: http://tirania.org/blog/archive/ 2008 / نوفمبر-03.html

ودول مجلس التعاون الخليجي يجب القيام ببعض vectorisation التلقائي طالما كنت تستخدم -O3 أو علم معين. لديهم صفحة من المعلومات هنا: http://gcc.gnu.org/projects/ شجرة أفريقيا جنوب الصحراء الكبرى / vectorization.html

مسألة كيفية استغلال SSE ووحدات المتجهات الصغيرة الأخرى تلقائيا (بدون توجيه من المبرمج في شكل بنيات لغوية خاصة أو "جوهريات" المترجم المبارك بشكل خاص) كان موضوعًا لأبحاث المترجم لبعض الوقت.يبدو أن معظم النتائج متخصصة في مجال مشكلة معين، مثل معالجة الإشاراة الرقمية.لم أتابع الأدبيات حول هذا الموضوع، ولكن ما يملك تشير القراءة إلى أن استغلال وحدة المتجهات (SSE) لا يزال موضوعًا للبحث، وأنه ينبغي للمرء أن يكون لديه توقعات منخفضة من المترجمين للأغراض العامة الذين يشيع استخدامهم في هذا المجال.

مصطلح البحث المقترح: المترجم المتجهات

إذا كنت تستخدم مترجم ناقلات باسكال ستحصل على كود SIMD كفاءة لأنواع التي SIMD يعطي ميزة. أساسا هذا هو شيء من طول أقل من 64 بت. (64 ريال قليلا فمن أبطأ فعلا القيام SIMD). وأحدث الإصدارات من المترجم أيضا parallelise النوى تزوجنا تلقائيا

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