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

تتوفّر عدة طرق للتحقّق من ميزات وحدة المعالجة المركزية في الرمز البرمجي، ولكل طريقة مجموعة مختلفة من المزايا والعيوب.

ABI: استخدام وحدات الماكرو المحدَّدة مسبقًا في المعالج الأوّلي

عادةً ما يكون من الأنسب تحديد واجهة التطبيق الثنائية (ABI) في مدّة التصميم باستخدام #ifdef بالاقتران مع:

  • __arm__ لأجهزة ARM ذات 32 بت
  • __aarch64__ لأجهزة ARM التي تعمل بنظام 64 بت
  • __i386__ لنظام التشغيل X86 إصدار 32 بت
  • __x86_64__ لنظام التشغيل X86‏ 64 بت

يُرجى العِلم أنّ 32-bit X86 يُطلق عليه __i386__، وليس __x86__ كما قد تتوقّع.

عدد نوى وحدة المعالجة المركزية: استخدِم sysconf(3) في libc

تتيح لك الدالة sysconf(3) الاستعلام عن كل من _SC_NPROCESSORS_CONF (عدد نوى وحدة المعالجة المركزية في النظام) و_SC_NPROCESSORS_ONLN (عدد نوى وحدة المعالجة المركزية المتصلة بالإنترنت حاليًا).

الميزات: استخدام getauxval(3) في libc

في المستوى 18 من واجهة برمجة التطبيقات والإصدارات الأحدث، تتوفّر الدالة getauxval(3) في مكتبة C لنظام Android. تعرض الوسيطتان AT_HWCAP وAT_HWCAP2 أقنعة بتات تسرد الميزات الخاصة بوحدة المعالجة المركزية. اطّلِع على hwcap.h العناوين المختلفة في NDK للثوابت التي يمكن مقارنتها، مثل HWCAP_SHA512 لتعليمات SHA512 في arm64 أو HWCAP_IDIVT لتعليمات قسمة الأعداد الصحيحة في Thumb من arm.

مكتبة cpu_features من Google

إحدى المشاكل في AT_HWCAP هي أنّها قد تخطئ في بعض الأحيان في تحديد الأجهزة. تتضمّن بعض الأجهزة القديمة، على سبيل المثال، تعليمات حول القسمة الصحيحة، ولكنّها لا تنفّذها.

تعمل مكتبة cpu_features من Google على حلّ هذه المشاكل من خلال تطبيق معرفتها الخاصة بأنظمة SoC معيّنة (عن طريق تحليل /proc/cpuinfo لتحديد نظام SoC المعنيّ).

يتم الاحتفاظ بهذه المكتبة لاستخدامها من قِبل فِرق تطبيقات الطرف الأول في Google، وتتضمّن حلولاً بديلة لكل جهاز واجهوا فيه مشاكل.

مكتبة cpufeatures في حزمة تطوير البرامج الأصلية (NDK) (متوقّفة نهائيًا)

لا يزال NDK يوفّر مكتبة تم إيقافها نهائيًا باسم cpufeatures لتوفير توافق على مستوى المصدر مع التطبيقات التي تستخدمها حاليًا. وعلى عكس مكتبة cpu_features الأحدث والأكثر اكتمالاً، لا تتضمّن هذه المكتبة القديمة حلولاً بديلة للعديد من أنظمة SoC المحدّدة.