תכונות המעבד (CPU)

יש כמה דרכים לבדוק את התכונות של המעבד בקוד, ולכל אחת מהן יש יתרונות וחסרונות.

‫ABI: שימוש בפקודות מאקרו שהוגדרו מראש על ידי מעבד מקדים

בדרך כלל הכי נוח לקבוע את ה-ABI בזמן הבנייה באמצעות #ifdef בצירוף:

  • __arm__ ל-ARM ב-32 ביט
  • __aarch64__ ל-ARM‏ 64 ביט
  • __i386__ ל-32 ביט X86
  • __x86_64__ ל-X86 ב-64 ביט

שימו לב ש-32-bit X86 נקרא __i386__ ולא __x86__, כפי שאולי ציפיתם.

מספר ליבות ה-CPU: משתמשים ב-sysconf(3) של libc

sysconf(3) מאפשרת לכם לשאול גם על _SC_NPROCESSORS_CONF (מספר ליבות המעבד במערכת) וגם על _SC_NPROCESSORS_ONLN (מספר ליבות המעבד שמחוברות כרגע).

תכונות: שימוש ב-getauxval(3) של libc

ב-API ברמה 18 ומעלה, הפונקציה getauxval(3) זמינה בספריית C של Android. הארגומנטים AT_HWCAP ו-AT_HWCAP2 מחזירים מסכות ביטים שמפרטות תכונות ספציפיות למעבד. אפשר לעיין בכותרות השונות ב-NDK כדי לראות את הקבועים להשוואה, כמו HWCAP_SHA512 להוראות SHA512 של arm64, או HWCAP_IDIVT להוראות חלוקת מספרים של Thumb של arm.hwcap.h

הספרייה cpu_features של Google

בעיה אחת ב-AT_HWCAP היא שלפעמים יש טעות בזיהוי המכשירים. לדוגמה, חלק מהמכשירים הישנים טוענים שיש להם הוראות חלוקה של מספרים שלמים, אבל בפועל אין להם.

הספרייה cpu_features של Google פותרת בעיות כאלה על ידי שימוש בידע שלה לגבי מערכות SoC ספציפיות (על ידי ניתוח של /proc/cpuinfo כדי לזהות את מערכת ה-SoC הספציפית הרלוונטית).

הספרייה הזו מתוחזקת לשימוש של צוותי האפליקציות מאינטראקציה ישירה של Google, ויש בה פתרונות לכל מכשיר בעייתי שהם נתקלו בו.

הספרייה cpufeatures של NDK (הוצאה משימוש)

ה-NDK עדיין מספק ספרייה שהוצאה משימוש בשם cpufeatures לצורך תאימות למקור עם אפליקציות שכבר משתמשות בה. בניגוד לספרייה החדשה והמלאה יותר cpu_features, בספרייה ההיסטורית הזו אין פתרונות עקיפים למספר רב של מערכות SoC ספציפיות.