2010-11-18 4 views
8

Я использую процессор Cortex-A8, и я не понимаю, как использовать флаг -mfpu.ARM Cortex-A8: Как использовать как NEON, так и vfpv3

На Cortex-A8 есть оба VFPv3 и неоновых сопроцессоров. Раньше я не зная, как использовать неон, поэтому я использовал только

gcc -marm -mfloat-abi=softfp -mfpu=vfpv3

Теперь я понял, как SIMD процессоры работают, и я написал определенный код, используя NEON встроенных функций. Для того, чтобы использовать неоновую сопроцессор теперь мой флаг -mfpu должен измениться на -mfpu=neon, поэтому мой компилятор командной строки выглядит следующим образом

gcc -marm -mfloat-abi=softfp -mfpu=neon

Теперь, значит ли это, что мой vfpv3 не используется больше? У меня много кода, который не использует NEON, эти части не используют vfpv3.

Если и неоновые, и vfpv3 все еще используются, у меня нет проблем, но если используется только один из них, как я могу использовать оба этих параметра?

ответ

10

NEON подразумевает наличие традиционной поддержки VFP. VFP можно использовать для «нормальных» (не векторных) вычислений с плавающей запятой. Кроме того, NEON не поддерживает FP с двойной точностью, поэтому для этого могут использоваться только инструкции VFP.
Что вы можете сделать, это добавить команду -s в командную строку gcc и проверить сборку. Инструкции, начинающиеся с V (например, vld1.32, vmla.f32), являются инструкциями NEON, а те, которые начинаются с F (fldd, fmacd), являются VFP. (Хотя теперь ARM предпочитает использовать префикс V даже для инструкций VFP, GCC этого не делает.)

+0

Igor У меня есть только значения точности с плавающей запятой. В самом деле, я вижу много f-инструкций (fadds, fsitos), поэтому я думаю, что инструкции vfp все еще выдаются компилятором. – HaggarTheHorrible

+0

Несвязанный вопрос, знаете ли вы, что означает процессор с двумя проблемами? Cortex-A8 - это двухпроцессорный процессор, что это значит? Можете ли вы указать мне на какие-либо ссылки? Мой поиск не был настолько продуктивным. – HaggarTheHorrible

+0

Vikram, Coretex A8 - это двухпроцессорный процессор. Это означает (по-разному), что он может делать некоторые или все из 1) декодировать и выдавать за невыполнение порядка двух команд за такт, 2) выполнять две команды с такой очередью за такт и/или 3) он может удалить два таких результаты за часы. Другими словами, в лучших условиях он может выполнять две инструкции за такт, поддерживаемые. Лучшие условия возникают только в случае отсутствия промахов в кеше, неверных прогнозов ветвей и т. Д. –