सीपीयू की सुविधाएं

आपके कोड में सीपीयू की सुविधाओं की जांच करने के कई तरीके हैं. हर तरीके के अपने फ़ायदे और नुकसान हैं.

ABI: प्रीप्रोसेसर के पहले से तय किए गए मैक्रो का इस्तेमाल करें

आम तौर पर, #ifdef के साथ इन फ़ंक्शन का इस्तेमाल करके, बिल्ड प्रोसेस में लगने वाले समय पर एबीआई का पता लगाना सबसे आसान होता है:

  • __arm__ 32-बिट ARM के लिए
  • __aarch64__ 64-बिट ARM के लिए
  • __i386__ for 32-bit X86
  • __x86_64__ 64-बिट X86 के लिए

ध्यान दें कि 32-बिट X86 को __i386__ कहा जाता है, न कि __x86__ जैसा कि आपको लग सकता है!

सीपीयू कोर की संख्या: libc के sysconf(3) का इस्तेमाल करें

sysconf(3) की मदद से, _SC_NPROCESSORS_CONF (सिस्टम में सीपीयू कोर की संख्या) और _SC_NPROCESSORS_ONLN (फ़िलहाल ऑनलाइन सीपीयू कोर की संख्या), दोनों के बारे में क्वेरी की जा सकती है.

सुविधाएँ: libc के getauxval(3) का इस्तेमाल करें

एपीआई लेवल 18 और इसके बाद के वर्शन में, Android की C लाइब्रेरी में getauxval(3) उपलब्ध है. AT_HWCAP और AT_HWCAP2 आर्ग्युमेंट, सीपीयू की खास सुविधाओं की सूची वाले बिटमास्क दिखाते हैं. तुलना करने के लिए, NDK में मौजूद अलग-अलग hwcap.h हेडर देखें. जैसे, arm64 के SHA512 निर्देशों के लिए HWCAP_SHA512 या arm के Thumb पूर्णांक विभाजन निर्देशों के लिए HWCAP_IDIVT.

Google की cpu_features लाइब्रेरी

AT_HWCAP की एक समस्या यह है कि कभी-कभी डिवाइसों की पहचान गलत हो जाती है. कुछ पुराने डिवाइस, जैसे कि पूर्णांक भाग के निर्देशों का पालन करने का दावा करते हैं, लेकिन ऐसा नहीं करते.

Google की cpu_features लाइब्रेरी, इस तरह की समस्याओं को हल करने के लिए काम करती है. इसके लिए, यह लाइब्रेरी कुछ खास SoCs के बारे में अपनी जानकारी का इस्तेमाल करती है. यह जानकारी, /proc/cpuinfo को पार्स करके हासिल की जाती है, ताकि यह पता लगाया जा सके कि कौनसे SoC में समस्या है.

इस लाइब्रेरी को Google की पहले पक्ष की ऐप्लिकेशन टीमें इस्तेमाल करती हैं. साथ ही, इसमें उन सभी डिवाइसों के लिए वर्कअराउंड मौजूद हैं जिनमें उन्हें समस्याएं आई हैं.

NDK cpufeatures लाइब्रेरी (अब काम नहीं करती)

एनडीके अब भी cpufeatures नाम की एक ऐसी लाइब्रेरी उपलब्ध कराता है जिसे अब इस्तेमाल नहीं किया जाता. इससे उन ऐप्लिकेशन के साथ सोर्स कोड को कंपैटिबल बनाया जा सकता है जो पहले से ही इसका इस्तेमाल कर रहे हैं. नई और ज़्यादा जानकारी वाली cpu_features लाइब्रेरी के उलट, इस पुरानी लाइब्रेरी में कई खास एसओसी के लिए वर्कअराउंड उपलब्ध नहीं हैं.