هناك عدة طرق للتحقق من ميزات وحدة المعالجة المركزية (CPU) في التعليمات البرمجية، ولكل منها مجموعة مختلفة من المُقايضات.
واجهة التطبيق الثنائية (ABI): استخدام وحدات الماكرو المحدّدة مسبقًا للمعالج المسبق
عادةً ما يكون من الأنسب تحديد واجهة التطبيق الثنائية (ABI) في وقت الإصدار باستخدام #ifdef
إلى جانب ما يلي:
__arm__
لـ ARM 32 بت__aarch64__
لـ ARM 64 بت__i386__
لـ X86 32 بت__x86_64__
لـ X86 64 بت
يُرجى ملاحظة أنّ الإصدار 32 بت X86 يُسمّى __i386__
، وليس __x86__
كما قد تتوقع.
أعداد وحدة المعالجة المركزية (CPU): استخدام sysconf(3) في libc
يتيح لك sysconf(3) الاستعلام عن كل من
_SC_NPROCESSORS_CONF
(عدد نوى وحدة المعالجة المركزية (CPU) في النظام)
و_SC_NPROCESSORS_ONLN
(عدد نوى وحدة المعالجة المركزية (CPU) المتصلة حاليًا).
الميزات: استخدام getauxval(3) في libc
في المستوى 18 من واجهة برمجة التطبيقات والإصدارات الأحدث، يتوفّر getauxval(3) في مكتبة C على Android. تعرض الوسيطات AT_HWCAP
وAT_HWCAP2
أقنعة بت تسرد الميزات الخاصة بوحدة المعالجة المركزية (CPU). انظر إلى رؤوس hwcap.h
المختلفة في NDK لتحديد الثوابت للمقارنة بها، مثل HWCAP_SHA512
لتعليمات SHA512 لـ Arm64 أو HWCAP_IDIVT
للحصول على تعليمات قسمة العدد الصحيح للإبهام في الشكل.
مكتبة cpu_features من Google
إنّ المشكلة في AT_HWCAP
هي أنّ الأجهزة أحيانًا ما تكون خاطئة. على سبيل المثال، تدّعي بعض الأجهزة
القديمة أن لديها تعليمات قسمة الأعداد الصحيحة ولكنها لا تحتوي عليها.
تعالج مكتبة cpu_features من Google هذه المشاكل من خلال تطبيق معرفتها الخاصة بشرائح المنظومة على الرقاقة (SoC) المحددة (من خلال تحليل /proc/cpuinfo
لمعرفة المنظومة على الرقاقة (SoC) المحددة المعنية).
وتتوفر هذه المكتبة لتستخدمها فِرق تطبيقات الطرف الأول في Google، وتحتوي على حلول بديلة لكل جهاز واجه المشكلة أثناء الاستخدام.
مكتبة NDK cpufeatures (متوقّفة نهائيًا)
لا يزال NDK يوفّر مكتبة متوقّفة نهائيًا باسم cpufeatures
لضمان توافق المصدر مع التطبيقات التي تستخدمها حاليًا. على عكس مكتبة cpu_features الأحدث والأكثر اكتمالاً، لا تحتوي هذه المكتبة السابقة على حلول بديلة لعدد كبير من عمليات المنظومة على الرقاقة (SoC) المحددة.