راه های مختلفی برای بررسی ویژگی های 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های خاص ندارد.