2014-11-02 3 views
11

주어진 ARM 프로세서에 NEON 엔진이 있는지 여부를 확인하는 방법은 무엇입니까? 어떤 상태/플래그 레지스터도 그런 목적으로 쿼리 될 수 있습니까?NEON on arm의 존재를 확인하는 방법은 무엇입니까?

+1

코 프로세서 레지스터에는 그 코어에서 지원되는 항목과 isnt가 무엇인지에 대한 자세한 정보를 제공하는 목적으로이 코 프로세서 레지스터가 있습니다. 그 또는 유사한 코어에 대해 TRM을 가져와이 레지스터가 어디에 있는지 확인하십시오. –

+2

나는 ARM 프로세서가 s.t. 이 정보와 레지스터는 실제로 권한이 부여됩니다. 따라서 리눅스에서는'/ proc/cpuinfo'를보고 NEON 또는 Advanced SIMD 플래그를 찾아야합니다. 권한있는 코드에 대해서는 ARMv7 아키텍처 참조 설명서, 섹션 _B3.12.19 c1, CPACR (Coprocessor Access Control Register) _; 그 레지스터의 비트 31이 당신이 원하는 것입니다. –

+0

CPACR의 비트 31은 NEON 엔진을 직접 감지 할 수없는 것처럼 보이는 1로 설정하면 NEON 명령어가 취소되는 것을 비활성화합니다. – Thomson

답변

10

unixsmurf's answer은 권한있는 커널이있는 OS를 사용하는 경우에 얻을 수있는 것만 큼 훌륭하다고 생각합니다. 범용 기능 감지를 위해서는 ARM이 OS에서이 기능을 얻으려는 요구가 있었으므로 OS API를 사용해야합니다.

  • Android NDK의 경우 #include <cpu-features.h>(android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM) && (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON)을 사용하십시오. 32 비트 ARM 용입니다. ARM 64 비트는 플래그가 다르지만 아이디어는 같습니다. sources/docs을 참조하십시오.
  • Linux의 경우 사용 가능한 경우 #include <sys/auxv.h>#include <asm/hwcap.h>getauxval(AT_HWCAP) & HWCAP_NEON과 함께 사용하십시오.
  • iOS에서 동적 호출이 있는지 확실하지 않습니다. 방법론은 NEON을 타겟팅하는 앱을 만든 다음 NEON을 요구하도록 앱을 플래그 지정했는지 확인하는 방법으로 보이며 지원하는 기기에만 설치됩니다. . 물론 미리 정의 된 전처리 기 플래그 __ARM_NEON__을 사용하여 컴파일시 모든 것이 순서대로 이루어 지도록해야합니다. 당신이 안드로이드 구현을 많이 볼 수 있습니다
  • 사실

당신이 다른 RTOS를 사용하는 경우 Microsoft가 나 ... 나도 몰라 않는 무엇에

  • ... 이는 단지 구문 분석은/proc/cpuinfo의에서 android_getCpuFeatures()를 구현하기 위해서 .... Heh. 그러나 여전히 개선되고 있으며 최신 버전은 getauxval 메서드를 사용합니다.

    +1

    iOS 5 이상에서 지원되는 모든 iOS 하드웨어에는 NEON이 있습니다. NEON이 있다고 가정하면 아무런 검사가 필요 없습니다 (그러나 정말로 원한다면'sysctl'를 사용하여 동적으로 검사 할 수 있습니다). (android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM && (android_getCpuFeatures() ANDROID_CPU_ARM_FEATURE_NEON)! = 0) –

    +1

    는 을 확인 *'getauxval (AT_HWCAP) & HWCAP_NEON'는 Aarch64에서는 작동하지만 Aarch32에서는 작동하지 않습니다. 확인해야 할 다른 정의가 있다고 생각합니다. – VMMF

    +0

    감사합니다, 그래, 내가 ARM64 등 –

    관련 문제