ميزات وحدة المعالجة المركزية (CPU)

هناك عدة طرق للتحقق من ميزات وحدة المعالجة المركزية (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) المحددة.