Для ARMv7 ISA (и вариантов)
неона является SIMD и параллельным блок обработки данных и для целочисленных данных с плавающей точкой, и VFP, является полностью IEEE-754 совместит модуль с плавающей точкой. В частности, на A8 модуль NEON намного быстрее для всего, даже если у вас нет высокопараллельных данных, поскольку VFP не является конвейерным.
Так почему бы вам использовать VFP ?!
Главное отличие заключается в том, что VFP обеспечивает двойную точность с плавающей запятой.
Во-вторых, есть некоторые специализированные инструкции, которые VFP предлагает, чтобы в модуле NEON не было эквивалентных реализаций. SQRT приходит на ум, возможно, некоторые преобразования типов.
Но самое важное отличие, не упомянутое в ответе Cosmin, состоит в том, что конвейер с плавающей точкой NEON не является полностью совместимым с IEEE-754. Лучшее описание различий содержится в FPSCR Register Description.
Поскольку он не совместим с IEEE-754, компилятор не может сгенерировать эти инструкции, если вы не сообщите компилятору, что вас не интересует полное соответствие. Это можно сделать несколькими способами.
- Использование встроенной функции для принудительного использования NEON, например, см. GCC Neon Intrinsic Function List.
- Спросите у компилятора, очень красиво. Даже более новые версии GCC с
-mfpu=neon
не будут генерировать инструкции NEON с плавающей запятой, если вы также не укажете -funsafe-math-optimizations
.
Для armv8 + ISA (и варианты) [Update]
NEON теперь полностью ПЭО-754 соответствует, и от программиста (и компилятора) точки зрения, на самом деле не слишком большая разница , Двойная точность была векторизована. С точки зрения микроархитектуры я сомневаюсь, что это даже разные аппаратные блоки. ARM выполняет документацию по скалярным и векторным инструкциям отдельно, но оба являются частью «Advanced SIMD».
Эй, Пьер, открывание глаз!Но, я не мог понять, что вы подразумеваете под акулой, можете ли вы любезно опубликовать ссылку? – HaggarTheHorrible
По тупым причинам нет прямой ссылки на документацию архитектуры ARM. Вместо этого я указываю разработчикам iOS на локальную копию, которую они уже имеют, в/Library/Application \ Support/Shark/Helpers/ARM \ Help.app/Contents/Resources/ARMISA.pdf (тем не менее, этот документ опускает устаревшую информацию или не имеет значения для разработки iOS, например, информации на системном уровне). Если вы не являетесь разработчиком iOS, перейдите по адресу http://infocenter.arm.com/help/topic/com.arm.doc.ddi0406b/index.html, зарегистрируйтесь в учетной записи, примите условия и загрузите документ. –