Neon desteği

NDK, isteğe bağlı bir cihaz olan ve genellikle Neon olarak bilinen ARM Advanced SIMD'yi destekler. ARMv7 ve ARMv8 için talimat grubu uzantısı. Neon, skaler/vektör sağlar MMX/SSE/3DNow ile karşılaştırılabilir talimatlar ve kayıtlar (FPU ile paylaşılır)! bir şeyler var.

ARMv8 tabanlı ("arm64") tüm Android cihazlar Neon'u destekler. Neredeyse tamamen ARMv7 tabanlı ("32 bit") Android cihazlar, Neon'u destekler. API düzeyi 21 veya sonrası. NDK, her ikisi için de varsayılan olarak Neon'u etkinleştirir.

Çok eski cihazları hedeflerseniz uyumsuz cihazları hedeflemek için Google Play Console Ayrıca, kaç tanesinin kullanıldığını görmek için uygulamanızın konsolunu da kullanabilirsiniz cihazlar.

Alternatif olarak, maksimum uyumluluk için 32 bit kod, çalışma zamanı sırasında algılamasını kullanarak Neon kodun hedef cihazda çalıştırılabileceğini kontrol edin. Bir uygulama belirtilen seçeneklerden herhangi birini kullanarak bu kontrolü gerçekleştirin CPU özellikleri.

Tekliflerinizi otomatikleştirmek ve optimize etmek için Neon doğal renkler C ve C++ koduna ekleyebilirsiniz. İlgili içeriği oluşturmak için kullanılan Armv8-A için Neon Programcı Kılavuzu dahili Neon programlama ve Neon programlama hakkında daha fazla bilgi sağlar.

Topluluk

Neon'u genel olarak devre dışı bırak

ndk-kurum

ndk-build, Neon'un küresel olarak devre dışı bırakılmasını desteklemez. Neon'u tamamen devre dışı bırakmak için . bir uygulamadır.

CMake

CMake çağrılırken -DANDROID_ARM_NEON=ON değerini geçirin. Android ile geliştiriyorsanız Studio/Gradle için, build.gradle dosyanızda aşağıdaki seçeneği ayarlayın:

android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                arguments "-DANDROID_ARM_NEON=OFF"
            }
        }
    }
}

Modül başına Neon'u devre dışı bırak

ndk-kurum

Tüm kaynak dosyaları Neon kullanmadan ndk-build modülünde oluşturmak için aşağıdaki adımları uygulayın:

LOCAL_ARM_NEON := false

CMake

Tüm kaynak dosyaları Neon kullanmadan bir CMake hedefinde oluşturmak için CMakeLists.txt dosyanıza ekleyin:

if(ANDROID_ABI STREQUAL armeabi-v7a)
    set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS -mfpu=vfpv3-d16)
endif()

Burada ${TARGET} yerine kitaplığınızın adı gelir.

x86 için platformlar arası destek

NDK, mevcut ARM SIMD'nizin (Neon) platformlar arası derlemesini destekler üçüncü taraf kodu kullanarak, dahili fonksiyonları x86 SSE koduna dönüştürme NEON_2_SSE.h. Bu konuyla ilgili daha fazla bilgi için bkz. ARM NEON'dan Intel SSE'ye kadar otomatik bağlantı noktası çözümü, ipuçları ve püf noktaları.

Örnek kod

hello-neon örneği cpufeatures kitaplığının ve Neon içsel özelliklerinin nasıl kullanılacağına dair bir örnek ile aynı anda oynatabilirsiniz. Bu örnek, bir FIR filtre döngüsü için çok küçük bir karşılaştırma uygular C sürümü ve Neon'u destekleyen cihazlar için Neon optimize edilmiş bir sürümü ile.