2015-03-25 2 views
3

Я разрабатываю некоторое числовое программное обеспечение, производительность которого сильно зависит от числовой точности (т. Е. Поплавков, двойных и т. Д.). Я заметил, что ARM NEON не полностью соответствует стандарту IEEE754 с плавающей запятой. Есть ли способ эмулировать точность с плавающей запятой NEON на процессоре x86? Например, библиотека, которая эмулирует операции с плавающей запятой NEON SIMD.Можно ли эмулировать ARM NEON в программе x86 C?

+0

http://meta.stackexchange.com/a/66378 – auselen

+1

Обратите внимание, что NEON _arithmetic_ должен быть одинарной точностью 754 - «несоблюдение» в основном происходит от фиксированных значений для определенных аспектов, где 754 задает несколько режимов (округление , захват исключений, денормальная обработка и т. д.). Если точность важнее скорости, рассмотрите ориентацию VFP, а не NEON. – Notlikethat

+0

Разве NEON не обращался с денормалами как ноль? Если это так, я считаю, что в x86 есть такая же возможность. – EOF

ответ

1

Возможно.

Я менее знаком с 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.

В конце концов, вам, возможно, потребуется принять некоторый отказ от ненулевой погрешности. Попытка добраться до нуля может быть затруднительной, но было бы здорово услышать ваши результаты, если вы доберетесь туда. Кажется возможным ... но сложно.

0

Спасибо за ваши ответы.

Наконец-то я использовал телефон Android, подключенный к рабочему столу, и некоторые функции выполнялись на телефоне.

Смежные вопросы