راه های مختلفی برای بررسی ویژگی های CPU در کد شما وجود دارد که هر کدام مجموعه ای از مبادلات متفاوت دارند.
ABI: از ماکروهای از پیش تعریف شده پیش پردازنده استفاده کنید
معمولاً راحتترین راه برای تعیین ABI در زمان ساخت با استفاده از #ifdef
همراه با:
-
__arm__
برای ARM 32 بیتی -
__aarch64__
برای ARM 64 بیتی -
__i386__
برای X86 32 بیتی -
__x86_64__
برای X86 64 بیتی
توجه داشته باشید که X86 32 بیتی __i386__
نامیده می شود، نه __x86__
آنطور که شما انتظار دارید!
تعداد هسته های CPU: از sysconf(3) libc استفاده کنید
sysconf(3) به شما امکان می دهد هم _SC_NPROCESSORS_CONF
(تعداد هسته های CPU در سیستم) و هم _SC_NPROCESSORS_ONLN
(تعداد هسته های CPU در حال حاضر آنلاین) را پرس و جو کنید.
ویژگی ها: از getauxval(3) libc استفاده کنید
در سطح API 18 و جدیدتر، getauxval(3) در کتابخانه C اندروید موجود است. آرگومانهای AT_HWCAP
و AT_HWCAP2
ماسکهای بیتی را برمیگردانند که ویژگیهای خاص CPU را فهرست میکنند. برای مقایسه ثابت ها، سرصفحه های مختلف hwcap.h
در NDK ببینید، مانند HWCAP_SHA512
برای دستورالعمل های SHA512 در arm64، یا HWCAP_IDIVT
برای دستورالعمل های تقسیم عدد صحیح بازویی Thumb.
کتابخانه cpu_features گوگل
یکی از مشکلات AT_HWCAP
این است که گاهی اوقات دستگاه ها اشتباه می شوند. به عنوان مثال، برخی از دستگاه های قدیمی ادعا می کنند که دستورالعمل های تقسیم اعداد صحیح دارند اما ندارند.
کتابخانه cpu_features Google با استفاده از دانش خود در مورد SoCهای خاص (با تجزیه /proc/cpuinfo
برای کار کردن SoC خاص مورد نظر) در مورد چنین مسائلی کار می کند.
این کتابخانه برای استفاده توسط تیمهای برنامه شخص اول Google نگهداری میشود و راهحلهایی برای هر دستگاه مشکلداری که در طبیعت با آنها مواجه شدهاند دارد.
کتابخانه cpufeatures NDK (منسوخ شده)
NDK هنوز یک کتابخانه منسوخ به نام cpufeatures
برای سازگاری منبع با برنامههایی که قبلاً از آن استفاده میکنند، ارائه میکند. برخلاف کتابخانه جدیدتر و کاملتر cpu_features ، این کتابخانه تاریخی راهحلهایی برای بسیاری از SoCهای خاص ندارد.
راه های مختلفی برای بررسی ویژگی های CPU در کد شما وجود دارد که هر کدام مجموعه ای از مبادلات متفاوت دارند.
ABI: از ماکروهای از پیش تعریف شده پیش پردازنده استفاده کنید
معمولاً راحتترین راه برای تعیین ABI در زمان ساخت با استفاده از #ifdef
همراه با:
-
__arm__
برای ARM 32 بیتی -
__aarch64__
برای ARM 64 بیتی -
__i386__
برای X86 32 بیتی -
__x86_64__
برای X86 64 بیتی
توجه داشته باشید که X86 32 بیتی __i386__
نامیده می شود، نه __x86__
آنطور که شما انتظار دارید!
تعداد هسته های CPU: از sysconf(3) libc استفاده کنید
sysconf(3) به شما امکان می دهد هم _SC_NPROCESSORS_CONF
(تعداد هسته های CPU در سیستم) و هم _SC_NPROCESSORS_ONLN
(تعداد هسته های CPU در حال حاضر آنلاین) را پرس و جو کنید.
ویژگی ها: از getauxval(3) libc استفاده کنید
در سطح API 18 و جدیدتر، getauxval(3) در کتابخانه C اندروید موجود است. آرگومانهای AT_HWCAP
و AT_HWCAP2
ماسکهای بیتی را برمیگردانند که ویژگیهای خاص CPU را فهرست میکنند. برای مقایسه ثابت ها، سرصفحه های مختلف hwcap.h
در NDK ببینید، مانند HWCAP_SHA512
برای دستورالعمل های SHA512 در arm64، یا HWCAP_IDIVT
برای دستورالعمل های تقسیم عدد صحیح بازویی Thumb.
کتابخانه cpu_features گوگل
یکی از مشکلات AT_HWCAP
این است که گاهی اوقات دستگاه ها اشتباه می شوند. به عنوان مثال، برخی از دستگاه های قدیمی ادعا می کنند که دستورالعمل های تقسیم اعداد صحیح دارند اما ندارند.
کتابخانه cpu_features Google با استفاده از دانش خود در مورد SoCهای خاص (با تجزیه /proc/cpuinfo
برای کار کردن SoC خاص مورد نظر) در مورد چنین مسائلی کار می کند.
این کتابخانه برای استفاده توسط تیمهای برنامه شخص اول Google نگهداری میشود و راهحلهایی برای هر دستگاه مشکلداری که در طبیعت با آنها مواجه شدهاند دارد.
کتابخانه cpufeatures NDK (منسوخ شده)
NDK هنوز یک کتابخانه منسوخ به نام cpufeatures
برای سازگاری منبع با برنامههایی که قبلاً از آن استفاده میکنند، ارائه میکند. برخلاف کتابخانه جدیدتر و کاملتر cpu_features ، این کتابخانه تاریخی راهحلهایی برای بسیاری از SoCهای خاص ندارد.