Я разрабатываю некоторое числовое программное обеспечение, производительность которого сильно зависит от числовой точности (т. Е. Поплавков, двойных и т. Д.). Я заметил, что ARM NEON не полностью соответствует стандарту IEEE754 с плавающей запятой. Есть ли способ эмулировать точность с плавающей запятой NEON на процессоре x86? Например, библиотека, которая эмулирует операции с плавающей запятой NEON SIMD.Можно ли эмулировать ARM NEON в программе x86 C?
ответ
Возможно.
Я менее знаком с SSE, но вы можете заставить многие из режимов SSE вести себя как NEON. Это будет зависеть от вашего компилятора и доступных библиотек, но см. Некоторые Visual Studio FP unit control functions. Это может быть достаточно хорошим для ваших требований.
Кроме того, вы можете использовать заголовок arm_neon.h, чтобы убедиться, что вы используете аналогичные возможности для выполнения подобных задач.
И, наконец, если вам действительно необходимо достичь этой точности в этих граничных условиях, вы захотите получить хороший набор тестов, чтобы убедиться, что вы достигаете своих результатов по назначению.
Наконец, даже с чистым кодом «C», который обычно соответствует IEEE-754, и использует VFP на ARM, как упомянули другие комментаторы, вы получите разные результаты, потому что с плавающей точкой очень ... нерегулярно при условии прихоти оптимизации и порядка операций. Нелегко получить результаты для соответствия различным компиляторам, не говоря уже об аппаратных архитектурах. Например, для получения очень приятных результатов для Intel с gcc часто требуется использовать флаг -ffloat-store
, если вы хотите сравнить с /fp:precise
на CL/MSVS.
В конце концов, вам, возможно, потребуется принять некоторый отказ от ненулевой погрешности. Попытка добраться до нуля может быть затруднительной, но было бы здорово услышать ваши результаты, если вы доберетесь туда. Кажется возможным ... но сложно.
Спасибо за ваши ответы.
Наконец-то я использовал телефон Android, подключенный к рабочему столу, и некоторые функции выполнялись на телефоне.
- 1. Можно ли эмулировать ARM на Windows 8?
- 2. Эмулятор Windows Phone 8 с ARM NEON
- 3. clang ARM neon support
- 4. Возможно ли распараллелить фильтр для ARM NEON?
- 5. Использование C переменные в сборке ARM Neon
- 6. __seg_fs на GCC. Можно ли эмулировать его только в программе?
- 7. arm neon инструкция
- 8. ARM NEON отказ векторизации
- 9. Можно ли эмулировать методы объекта в C?
- 10. Рекомендация в оптимизации ARM NEON
- 11. arm neon vst1.32 segfault
- 12. средняя операция ARM NEON
- 13. Быстрый ARM NEON memcpy
- 14. Включает ли Android x86 ARM?
- 15. Поддержка ARM NEON в Qemu
- 16. Улучшения ARM NEON в Eigen 3.3
- 17. Есть ли реализация C для GNU ARM NEON intrinsics?
- 18. ARM Assembler NEON - Увеличение производительности
- 19. Объяснение ARM Neon Image Sampling
- 20. ARM Neon: предложение условного магазина
- 21. ARM NEON SIMD версия 2
- 22. Отладка сборки ARM (расширение Neon)
- 23. Операция ARM NEON 8x8 SAD
- 24. arm neon transpose 4x4 uint32
- 25. Обратный векторный порядок в ARM NEON intrinsics
- 26. Можно ли эмулировать ftp-сервер?
- 27. Кодирование для ARM NEON: С чего начать?
- 28. ARM NEON простой фильтр низких частот векторизации
- 29. ARM NEON не дает точных результатов.
- 30. ошибка в arm-neon asm, связанная с C++ в android
http://meta.stackexchange.com/a/66378 – auselen
Обратите внимание, что NEON _arithmetic_ должен быть одинарной точностью 754 - «несоблюдение» в основном происходит от фиксированных значений для определенных аспектов, где 754 задает несколько режимов (округление , захват исключений, денормальная обработка и т. д.). Если точность важнее скорости, рассмотрите ориентацию VFP, а не NEON. – Notlikethat
Разве NEON не обращался с денормалами как ноль? Если это так, я считаю, что в x86 есть такая же возможность. – EOF