سؤال

لقد بدأت اللعب مع Android NDK. أحد الأشياء التي تعلمتها للتو هو إنشاء ملف application.mk لتحديد ARMV7 ABI.

أنا أقوم ببناء مثال San-Angeles مع المعلمات التالية.

APP_MODULES      := sanangeles
APP_PROJECT_PATH := $(call my-dir)/../
APP_OPTIM        := release
APP_ABI          := armeabi-v7a

ومع ذلك ، يبدو أن هذا يعمل بنفس السرعة تمامًا كما حدث من قبل (أي بشكل سيء). هل أنا فقط GL Limited وليس CPU Limited أم أن هناك شيئًا خاطئًا هنا؟

لقد لاحظت عندما أقوم بتجميع أنني أحصل على خيارات سطر الأوامر التالية المنبعثة:

-march=armv7-a -mfloat-abi=softfp -mfpu=vfp -mthumb 

الشيء الذي يقلقني هو "softfp". هناك ذكر ل V7 ABI ، و VFP FPU الاشياء وأخمن أن "الإبهام" يشير إلى تعليمات "Thumb-2" (على الرغم من أنني لا أعرف بالضبط هذه). ومع ذلك ، فإن "softfp" لا يهمني. ألا يجب أن يكون "Hardfp"؟

أي شخص حصل على أي أفكار حول هذه الأسئلة؟ أعتقد أنني على الأرجح على استعداد للبدء في تطبيق بعض كود GL ES 2.0 لرغبة HTC ، لكنني أود التأكد من أنني أتلقى أفضل سرعة ممكنة منه :)

هتاف مقدما!

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

المحلول

ستؤثر الخيارات التي تزودها بـ NDK فقط على طريقة تجميع الكود الخاص بك. لن يغير libs gl أو أي شيء آخر جزء من المنصة ، والتي يتم إنشاؤها دائمًا بطريقة مناسبة. إذا كنت مجرد رمي الهندسة على أجهزة GL ، فلن ترى فرقًا.

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

تحدد وسيطة -mfloat-abi = softp كيفية تمرير قيم النقطة العائمة بين الوظائف. SoftFP يعني أنها تنتقل دائمًا في سجلات عدد صحيح أو على المكدس. إذا لم يحدد Android SoiSFP ، فإن إصدار ARMV7-A من المكتبة يتوقع أن تظهر العوامات في سجلات الأجهزة ، وسيتم كسر أي رمز تم تصميمه لـ ARMV5TE.

يضيف "softfp" القليل من النفقات العامة إلى بعض الوظائف ، لكن تعليمات نقل القيم داخل وخارج سجلات FP رخيصة على الذراع ، وتوافق ABI المقدم يجعله يستحق العناء.

يتيح "-mthumb" توليد رمز الإبهام/الإبهام. يميل رمز الإبهام إلى أن يكون أبطأ قليلاً ولكنه أصغر قليلاً من الذراع المكافئة ؛ في بعض الأحيان ، تعني أصغر في بعض الأحيان أنك ستناسب بشكل أفضل في وحدة المعالجة المركزية IChich وسوف تعمل في الواقع بشكل أسرع. يعد الحجم دائمًا مصدر قلق لهذه الأجهزة ، لذلك يتم تمكين الإبهام افتراضيًا.

عندما تكون في شك ، "ARM-OEBI-OBJDUMP -D anhing.o" سوف يظهر لك تفكيك من الكود الخاص بك.

تحديث: NDK R9B وأضاف الدعم لـ -Mhard -float. يتيح لك ذلك بناء مكتبات NDK مع اتفاقيات API ذات الطبقات الصلبة لأهداف Armeabi-V7a.

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