Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Какая производительность на плавающей точку у AllWinner A10?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
iiv
Всем привет,

недавно в руки попала платка с оллвинером pcduino.com - многое сразу понравилось, как-то удобно что и компилишся и работаешь на одной и той же платформе и все интерфейсы под рукой есть и драйверы худо бедно почти без танцев с бубном заработали.

Есть правда вопрос по производительности процессора на плавающей точке. У меня есть несколько тестов, которые позволяют измерить достигаемую производительность с учетом того, что данных мало (все в регистрах и пайплайнится хорошо), данных чуть больше и все в кешу, данных много и они линейно или случайным образом индексируются в общей памяти.

К сожалению, результаты меня огорчили.

Я смог получить около 60МФлоп/с на регистрах, 20МФлоп/с (линейный доступ) 2МФлоп/с (случайный доступ) при работе с общей памятью. Разницы одинарная или двойная точность почти не видно, есть, но не в два раза, а примерно в 20-30%. Сильно настораживает, что на регистрах получается только 60МФлоп/с, хотя Джек Донгарра в своем докладе прошлой осенью писал, что де оллвинеры почти ГФлоп/с показывают.

Перепробовал кучу опций компиляции, похоже, что -Ofast без ничего другого показывает самые лучшие результаты, пробовал и неон включать, и vf*v3 но только хуже стало.

В связи с этим, возникают вопросы

1. какой реально достижимый пик на этом процессоре на плавающей точке,
2. может ли кто-то поделиться правильными опциями компиляции и примером в несколько строк где бы серьезно больше 60МФлоп/с получалось бы?

Спасибо

ИИВ
DASM
60 mflops это мало?? Это же не DSP.Почему Вы решили что будет больше?

Хотите — могу завтра на omap44 прогнать, только код теста дайте.
Ааа, понял.. Это же результаты Gpu соопроцессора.. Вот тут что то сравнивали, правда я не понял как это запускать Сам только начал с сопроцессорами разбираться тут тесты ГПУ
Самурай
Цитата(iiv @ May 15 2013, 20:30) *
...
Я смог получить около 60МФлоп/с на регистрах, 20МФлоп/с (линейный доступ) 2МФлоп/с (случайный доступ) при работе с общей памятью. Разницы одинарная или двойная точность почти не видно, есть, но не в два раза, а примерно в 20-30%.
...
Перепробовал кучу опций компиляции, похоже, что -Ofast без ничего другого показывает самые лучшие результаты, пробовал и неон включать, и vf*v3 но только хуже стало.

В связи с этим, возникают вопросы

1. какой реально достижимый пик на этом процессоре на плавающей точке,
2. может ли кто-то поделиться правильными опциями компиляции и примером в несколько строк где бы серьезно больше 60МФлоп/с получалось бы?


Не знаю, поможет или нет, но вот тут пишут, что включать надо одновременно и VFPv3 и neon опции. И еще до кучи с полдюжины других условий надобно соблюсти. А так, похоже, что работает только VFP сопроцессор, у него как раз 10...30 тактов на команду уходит.
iiv
Спасибо всем за отклики!

Цитата(DASM @ May 16 2013, 00:46) *
60 mflops это мало?? Это же не DSP.Почему Вы решили что будет больше?


Да, так как, например, мой лаптоп показывает под 100ГФлопс на одинарной и 50ГФлоп/с на двойной точности, и от таблеточного железа хочется хотя бы гигафлоп.

Вот здесь говорят, что на однопроцессорном 3-ем omapе можно получить гигафлоп на одинарной и 50МФлоп/с на двойной точности.

Цитата(DASM @ May 16 2013, 00:46) *
Хотите — могу завтра на omap44 прогнать, только код теста дайте.


тест собственно там же, только надо вначале поставить ATLAS и с ним скомпилить маленький тест, правда установка атласа у меня на аоллвинере заняла больше дня, и, во время инсталляции, желательно на железке ничего не делать, поэтому повторить может оказаться довольно сложно.

Цитата(DASM @ May 16 2013, 00:46) *
Ааа, понял.. Это же результаты Gpu соопроцессора.. Вот тут что то сравнивали, правда я не понял как это запускать Сам только начал с сопроцессорами разбираться тут тесты ГПУ


неее, боюсть, на ГПУ можно еще на порядок больше получить.

Про то, что надо и неон и вфпв3 включать видел и уже пробовал, пока это результаты не улучшало, похоже, ГНУ компилер сам это знает, если -Ofast написать.
sasamy
Цитата(iiv @ May 16 2013, 12:01) *
Вот здесь говорят, что на однопроцессорном 3-ем omapе можно получить гигафлоп на одинарной и 50МФлоп/с на двойной точности.


Ключевой момент производительности cortex-a8 на плавучке c двойной точностью

Цитата
non-pipelined VFP floating-point unit of the A8


а NEON поддерживает только одинарную точность

Цитата
неее, боюсть, на ГПУ можно еще на порядок больше получить.


По-моему для mali400 нет поддержки OpenCL или какой-либо другой поддержки GPGPU
iiv
Цитата(sasamy @ May 16 2013, 14:24) *
Ключевой момент производительности cortex-a8 на плавучке c двойной точностью

а NEON поддерживает только одинарную точность

простите, но я совсем не понял оба этих утверждения - вроде и то и то cortex-a8, и там и там мне хочется видк раз ееть гигафлопы хотя бы на одинарной точности, вроде неон как раз ее-то и поддерживает, так как мне получить гигафлопс на сингле на оллвинере?
sasamy
Цитата(iiv @ May 16 2013, 13:56) *
простите, но я совсем не понял оба этих утверждения - вроде и то и то cortex-a8


вроде по-русски написал..

Цитата
мне хочется видк раз ееть гигафлопы хотя бы на одинарной точности, вроде неон как раз ее-то и поддерживает, так как мне получить гигафлопс на сингле на оллвинере?


может FAQ прочитать надо было перед сборкой ?
http://www.vesperix.com/arm/atlas-arm/faq/index.html

Цитата
ATLAS 3.10.0 includes architecture defaults for a Cortex A9 with the soft floating-point ABI (like Angstrom-based distributions and Ubuntu prior to 12.04). If you have a distribution using the hard floating-point ABI (like Ubuntu 12.04 or later), you can buld ATLAS 3.10.0 using

../configure -D c -DATL_ARM_HARDFP=1 -Si archdef 0 -Fa alg -mfloat-abi=hard

Note that mainline ATLAS releases like 3.10 have always ignored any floating point unit that does not conform to the IEEE 754 specification, so what you'll get if you do this is a BLAS library using the IEEE compliant VFP. If you need the somewhat higher single precision speed of NEON, you'll need to specifically tell ATLAS to use non-IEEE compliant routines, by using

../configure -D c -DATL_NONIEEE=1 -Si archdef 0

for the soft floating-point ABI, and

../configure -D c -DATL_NONIEEE=1 -D c -DATL_ARM_HARDFP=1 -Si archdef 0 -Fa alg -mfloat-abi=hard
if your distribution has a hard floating-point ABI.
iiv
проблемка-то в том, что я как раз с опцией
Код
../configure -D c -DATL_NONIEEE=1 -D c -DATL_ARM_HARDFP=1 -Si archdef 0 -Fa alg -mfloat-abi=hard

и компилил... Еслиб все было бы так просто, не вопрошал бы sad.gif
sasamy
Цитата(iiv @ May 16 2013, 15:13) *
проблемка-то в том, что я как раз с опцией
Код
../configure -D c -DATL_NONIEEE=1 -D c -DATL_ARM_HARDFP=1 -Si archdef 0 -Fa alg -mfloat-abi=hard

и компилил... Еслиб все было бы так просто, не вопрошал бы sad.gif


Пока что только одна мысль - проверьте включена ли поддержка NEON в ядре (выполните в директории с исходниками ядра)

Цитата
$ grep CONFIG_NEON .config
CONFIG_NEON=y


надо экспериментировать, чтобы понять что там происходит - снаскоку не могу сказать..
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.