VFPV3 необходим (или подходит) для ARM64?

Я пытаюсь скомпилировать OpenCV для Jetson AGX Xavier (ARM64) с опцией VFPV3 и получаю сообщение об ошибке

CMake Error at cmake/OpenCVCompilerOptimization.cmake:527 (message)
Required baseline optimization is not supported: VFPV3
(CPU_BASELINE_REQUIRE=;VFPV3;NEON)

Затем, прочитав несколько сообщений в Интернете, кажется, что VFPV3 используется для ARMv7. Итак, мой вопрос: поддерживается ли VFPV3 или даже необходимо ли активировать его на платформе ARMv8?


person KansaiRobot    schedule 07.05.2021    source источник
comment
Ваш вопрос кажется дубликатом вашего предыдущего, ARMv8 поставляется со встроенными NEON и VFPV3?. Есть ли причины, по которым вы решили вообще не комментировать предыдущий набор вопросов / ответов, вместо того чтобы задавать тот же вопрос в несколько иной форме?   -  person Frant    schedule 08.05.2021


Ответы (1)


Согласно этой записи на opencv github, для оптимизации opencv достаточно использовать -march=native -mcpu=native -mtune=native для использования NEON и VFPv3 / VFPv4 при компиляции с помощью aarch64-linux-gcc.

Более конкретно OpenCV / CMake / OpenCVCompilerOptimizations.cmake не использует какой-либо конкретный параметр для AARCH64, поскольку, опять же, NEON и VFP неявно присутствуют в любой стандартной реализации armv8-a - см. оператор if(NOT AARCH64):

elseif(ARM OR AARCH64) 
   ocv_update(CPU_NEON_TEST_FILE "${OpenCV_SOURCE_DIR}/cmake/checks/cpu_neon.cpp") 
   ocv_update(CPU_FP16_TEST_FILE "${OpenCV_SOURCE_DIR}/cmake/checks/cpu_fp16.cpp") 
   if(NOT AARCH64) 
     ocv_update(CPU_KNOWN_OPTIMIZATIONS "VFPV3;NEON;FP16") 
     if(NOT MSVC) 
       ocv_update(CPU_VFPV3_FLAGS_ON "-mfpu=vfpv3") 
       ocv_update(CPU_NEON_FLAGS_ON "-mfpu=neon") 
       ocv_update(CPU_NEON_FLAGS_CONFLICT "-mfpu=[^ ]*") 
       ocv_update(CPU_FP16_FLAGS_ON "-mfpu=neon-fp16 -mfp16-format=ieee") 
       ocv_update(CPU_FP16_FLAGS_CONFLICT "-mfpu=[^ ]*") 
     endif() 
     ocv_update(CPU_FP16_IMPLIES "NEON") 
   else() 
     ocv_update(CPU_KNOWN_OPTIMIZATIONS "NEON;FP16") 
     ocv_update(CPU_NEON_FLAGS_ON "") 
     ocv_update(CPU_FP16_IMPLIES "NEON") 
     set(CPU_BASELINE "NEON;FP16" CACHE STRING "${HELP_CPU_BASELINE}") 
   endif() 
 elseif(MIPS) 

Итак, снова, ответьте на is VFPV3 supported in a ARMv8 platform было бы да, а is it even necessary to set VFPV3 active in a ARMv8 platform? было бы нет.

person Frant    schedule 08.05.2021
comment
В случае, если этот ответ не поможет, будет оценена некоторая интерактивность о том, почему и как это можно улучшить - спасибо. - person Frant; 08.05.2021
comment
Спасибо за ответ. Буду читать медленно, комментировать, если будут вопросы, отмечать как решенный. - person KansaiRobot; 09.05.2021
comment
Спасибо за ваш отзыв! - person Frant; 09.05.2021