Belirli bir ARM işlemcide NEON motorunun mevcut olup olmadığı nasıl belirlenir? Herhangi bir durum/bayrak kaydı bu amaçla sorgulanabilir?Kolda NEON'un varlığı nasıl kontrol edilir?
cevap
unixsmurf's answer, ayrıcalıklı bir çekirdeği olan bir işletim sistemi kullanıyorsanız elde edeceğiniz kadar iyi olduğuna inanıyorum. Genel amaçlı özellik tespiti için, ARM'nin bunu işletim sisteminden alması için bir gereklilik olduğunu ve bunu elde etmek için bir işletim sistemi API'si kullanmanız gerektiğini düşünüyor. Android NDK günü
(android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM) && (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON)
ile#include <cpu-features.h>
kullanın. Not, bu 32 bit ARM içindir. ARM 64 bit'in farklı bayrakları vardır ama fikir aynıdır. sources/docs'a bakın.- Linux'ta, varsaile
#include <sys/auxv.h>
ve#include <asm/hwcap.h>
kullanın. - iOS'ta, dinamik bir arama olduğundan emin değilim. Yöntem, uygulamanızı NEON hedeflemeyi oluşturuyormuş gibi görünüyor, ardından uygulamanızın NEON gerektirecek şekilde işaretlendiğinden emin olun, böylece yalnızca onu destekleyen cihazlara yüklenir . Elbette, her şeyin derleme zamanında hazır olduğundan emin olmak için önceden tanımlanmış önişlemci bayrağı
__ARM_NEON__
'u kullanmalısınız. Android uygulamaları bir çok göreceksiniz Aslında
bazı başka RTOS kullanıyorsanız, Microsoft veya ... Bilmiyorum mu ne olursa olsun üzerinde
... hangi sadece ayrıştırma/proc/cpuinfo içinde android_getCpuFeatures() .... Heh uygulamak için sipariş. Ama yine de iyileşiyor gibi görünüyor ve en yeni sürümleri getauxval yöntemini kullanıyor.iOS 5 ve üstü tarafından desteklenen tüm iOS donanımları NEON'a sahiptir; NEON'un mevcut olduğunu varsayabilirsin, herhangi bir çeke gerek yok (ama eğer gerçekten istiyorsan 'sysctl' kullanarak dinamik olarak kontrol edebilirsin). (Android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM && (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON)! = 0) –
kontrol * getauxval (AT_HWCAP) & HWCAP_NEON, Aarch64 için çalışıyor, ancak Aarch32 değil. Kontrol etmen gereken başka tanımların olduğuna inanıyorum. – VMMF
sayesinde evet, ARM64 vb –
Bu amaçla, o çekirdekte neyin desteklendiği ve neyin yetersiz olduğu hakkında bilgi vermek için bir dizi işlemcisi kaydı vardır. Bu kayıtların nerede yaşadığını görmek için bu veya benzer bir çekirdek için TRM'yi edinin. –
ARM işlemcilerin tasarlandığını düşünüyorum. Bu bilgi ve bu kayıtlar aslında ayrıcalıklıdır; Linux altında, bu nedenle, NEON veya Advanced SIMD bayrağını aramak için '/ proc/cpuinfo''ya bakmalısınız. Ayrıcalıklı kod için, bkz. ARMv7 Mimari Referans El Kitabı, Bölüm _B3.12.19 c1, İşbirlikçi Erişim Kontrol Kaydı (CPACR) _; Bu kayıtların 32'si istediğin şey. –
CPACR'nin Bit 31'i, NEON motorunu saptamak için doğrudan bir yol gibi görünmeyen, 1'e ayarlandığında NEON komutlarını devre dışı bırakır. – Thomson