ما هي الطريقة الصحيحة لاستخدام ARM SIMD على iPhone لعملية Vector/Matrix؟
سؤال
أقوم بعمل مكتبة متجه/مصفوفة للعبة تستخدم وحدة SIMD على iPhone (3GS أو لاحقًا). كيف يمكنني أن أفعل هذا؟ لقد بحثت عن هذا ، والآن أعرف عدة خيارات:
- إطار التسريع (Blas+Lapack+...) من Apple (iPhone OS 4)
- مكتبة تنفيذ OpenMax من ARM
- ميزة تلقائيات التلقائي في مجلس التعاون الخليجي
ما هي الطريقة الأنسب لمكتبة المتجهات/المصفوفة للعبة؟
المحلول
للقيام بذلك بشكل جيد ، ربما ستحتاج إلى كتابة روتين SIMD الخاص بك. استخدم الجوهارات النيون C في مجلس التعاون الخليجي بدلاً من التجميع لتخفيف ألم القيام بذلك.
نصائح أخرى
يجب أن تفترض أن GCC لن يقوم بتثبيت الكود الخاص بك ، لأنه يبدو أن هذا من غير المرجح أن يحدث!
كما قال بول ، للحصول على أكبر قدر من الأداء من جهاز iPhone الخاص بك ، يجب عليك كتابة رمز تجميع الذراع الخاص بك باستخدام تعليمات Neon Simd الخاصة به قدر الإمكان. لكن هذا يفترض أنك تفهم لغة تجميع الذراع وكذلك نيون ، وتأخير التوقيت ، وما إلى ذلك ، لذلك إذا كنت لا ترغب في تعلم لغة تجميع الذراع ، فإن إطار التسريع من Apple ومكتبات OpenMax في ARM لها العديد من الوظائف التي تمت كتابتها بالفعل في مجموعة الذراع اللغة مع تعليمات نيون سيم.
لذا ، يجب أن يكون التسريع أو OpenMax جيدًا جدًا إذا كنت تستطيع استخدامها. لم أقارن بين 2 لمعرفة أيهما أسرع بالفعل ، لكنني أفترض أن OpenMax من ARM أسرع قليلاً من تطبيق Apple لأن ARM صمم مواصفات النيون! لكن يجب أن يركض كلاهما بسرعة كبيرة.
مع مرور الوقت تأتي إجابات جديدة:
تم الآن تحسين محرك فيزياء الرصاصة لـ Neon Simd بواسطة Apple. http://bulletphysics.org/bullet/phpb3/viewtopic.php؟t=8490
لقد قمت بإنشاء اثنين من روتين MAT*MAT*MAT*MAT*VEC باستخدام ASM INLINE. إنهم جزء من محرك Oolong ، لكنهم يخضعون لترخيص MIT ، حتى تتمكن من استخدامه كما تريد:
أبل لديها الآن <simd/simd.h>
وهي مكتبة من روتين الرياضيات المحسّن للناقلات الصغيرة والمصفوفات والرباع كجزء من إطار التسريع الذي ذكرته. يبدو أن هذا ربما يكون أسهل طريقة اليوم.https://developer.apple.com/documentation/accelerate/simd؟language=OBJC