سؤال

في معالج Arm Cortex-A8 ، أفهم ماهية النيون ، إنه معالج مشارك SIMD.

ولكن هل تعمل وحدة VFP (النقطة العائمة المتجهات) ، وهي أيضًا معالج مشارك ، كمعالج SIMD؟ إذا كان الأمر كذلك ، فما هو الأفضل لاستخدامه؟

قرأت بعض الروابط مثل -

  1. Link1

  2. Link2.

لكن ليس من الواضح حقًا ما يعنيه. يقولون أن VFP لم يكن المقصود استخدامه في SIMD ولكن على ويكي قرأت ما يلي - "تدعم بنية VFP أيضًا تنفيذ تعليمات المتجهات القصيرة ولكن تعمل على كل عنصر متجه بالتتابع وبالتالي لا تقدم أداء التوازي الحقيقي لـ SIMD (تعليمات متعددة)."

ليس من الواضح ما الذي يصدقه ، هل يمكن لأي شخص توضيح المزيد حول هذا الموضوع؟

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

المحلول

هناك بعض الاختلاف بين الاثنين. NEON هو معالج تسريع SIMD (تعليمات متعددة) SIMD كجزء من قلب الذراع. وهذا يعني أنه أثناء تنفيذ تعليمات واحدة ، ستحدث نفس العملية على ما يصل إلى 16 مجموعة بيانات بالتوازي. نظرًا لوجود التوازي داخل النيون ، يمكنك الحصول على المزيد من MIPs أو التقليب من النيون أكثر مما يمكنك معالج SISD قياسي يعمل في نفس معدل الساعة.

أكبر فائدة من النيون هي إذا كنت ترغب في تنفيذ العملية مع المتجهات ، أي ترميز الفيديو/فك التشفير. كما أنه يمكن أن يقوم بعمليات نقطة عائمة واحدة (تعويم) بالتوازي.

VFP هو مسرع للأجهزة النقطة العائمة الكلاسيكية. انها ليست بنية موازية مثل النيون. في الأساس ، يؤدي عملية واحدة على مجموعة واحدة من المدخلات وإرجاع مخرج واحد. الغرض من ذلك هو تسريع حسابات النقطة العائمة. وهو يدعم نقطة عائمة واحدة ومزدوجة الدقة.

لديك 3 إمكانيات لاستخدام النيون:

  • استخدام وظائف الجهاز الداخلية #include "ARM_NEON.H"
  • مضمّن رمز التجميع
  • دع GCC للقيام بالتحسينات لك من خلال توفير -mfpu=neon كحجة (GCC 4.5 جيدة في هذا)

نصائح أخرى

من الناحية المعمارية ، فإن VFP (لم يكن يطلق عليه نقطة عائمة المتجه مقابل لا شيء) لديه بالفعل حكم للعمل على متجه نقطة عائمة في تعليمات واحدة. لا أعتقد أنه يقوم بالفعل بتنفيذ عمليات المضاعفات في وقت واحد (مثل SIMD الحقيقي) ، ولكنه قد يوفر بعض حجم الرمز. ومع ذلك ، إذا قرأت دليل مرجع هندسة ARM في مساعدة سمك القرش (كما أصف في مقدمة نيون ، الرابط 1 في السؤال) ، سترى في القسم A2.6 أن ميزة المتجه VFP تم إهمالها في ARMV7 (وهو ما تنفذه Cortex A8) ، ويجب على البرنامج استخدام SIMD المتقدمة لعمليات متجه النقطة العائمة.

والأسوأ من ذلك ، في تطبيق Cortex A8 ، يتم تنفيذ VFP باستخدام وحدة تنفيذ VFP Lite (اقرأ Lite على أنها تحتل سطحًا أصغر من السيليكون ، وليس على أنه يحتوي على ميزات أقل) ، مما يعني أنه أبطأ بالفعل من ARM11 ، على سبيل المثال! لحسن الحظ ، يتم تنفيذ معظم تعليمات VFP ذات الدقة الواحدة بواسطة وحدة النيون ، لكنني لست متأكدًا من عمليات VECTOR VFP ؛ وحتى لو فعلوا ذلك ، فإنهم بالتأكيد ينفذون أبطأ من تعليمات النيون.

أتمنى أن يزيل الأمر!

لـ ARMV7 ISA (والمتغيرات)

NEON عبارة عن وحدة معالجة البيانات SIMD وموازية للبيانات العائمة وبيانات النقطة العائمة و VFP هي وحدة عائمة متوافقة مع IEEE-754. على وجه الخصوص على A8 ، تكون وحدة النيون أسرع بكثير بالنسبة لكل شيء تقريبًا ، حتى لو لم يكن لديك بيانات متوازية للغاية ، نظرًا لأن VFP غير محدد.

فلماذا تستخدم VFP؟!

الاختلاف الرئيسي هو أن VFP يوفر نقطة عائمة دقة مزدوجة.

ثانياً ، هناك بعض التعليمات المتخصصة التي تقدمها VFP أنه لا توجد تطبيقات مكافئة في وحدة النيون. SQRT يتبادر إلى الذهن ، ربما بعض التحويلات نوع.

لكن الاختلاف الأكثر أهمية في إجابة Cosmin هو أن خط أنابيب النقطة العائمة النيون ليس متوافقًا تمامًا مع IEEE-754. أفضل وصف للاختلافات في وصف سجل FPSCR.

نظرًا لأنه ليس متوافقًا مع IEEE-754 ، لا يمكن للمترجم إنشاء هذه التعليمات إلا إذا أخبرت المترجم أنك غير مهتم بالامتثال الكامل. ويمكن القيام بذلك بعدة طرق.

  1. باستخدام وظيفة جوهرية لإجبار استخدام النيون ، على سبيل المثال ، انظر قائمة الوظائف الجوهرية Neon Neon.
  2. اسأل المترجم ، بشكل جيد للغاية. حتى إصدارات دول مجلس التعاون الخليجي الأحدث مع -mfpu=neon لن يولد تعليمات النيون النقطة العائمة إلا إذا حددت أيضًا -funsafe-math-optimizations.

لـ ARMV8+ ISA (ومتغيرات) تحديث

أصبح Neon الآن متوافقًا تمامًا مع IEE-754 ، ومن وجهة نظر مبرمج (ومبرمج) ، لا يوجد بالفعل فرق كبير. وقد تم نقل الدقة المزدوجة. من وجهة نظر الهندسة المعمارية الدقيقة ، أشك نوعًا ما في أنها وحدات أجهزة مختلفة. يقوم ARM بإعدادات DONCTIVE REACR و UVECTRESS بشكل منفصل ولكن كلاهما جزء من "SIMD المتقدم".

IIRC ، VFP هو معالج النقطة العائمة الذي يعمل بالتتابع.

هذا يعني أنه يمكنك استخدام التعليمات على متجه من العوامات للسلوك الشبيه بـ SIMD ، ولكن داخليًا ، يتم تنفيذ التعليمات على كل عنصر من عناصر المتجه في تسلسل.

بينما يتم تقليل الوقت الكلي المطلوب للتعليم بسبب تعليمات التحميل المفردة ، لا يزال VFP يحتاج إلى وقت لمعالجة جميع عناصر المتجه.

سيحصل True SIMD على المزيد من الأداء العائم الصافي ، ولكن استخدام VFP مع المتجهات لا يزال أسرع ثم استخدامه متسلسل بحت.

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