LINUX.ORG.RU

NEON на ARM Cortex-A53 (Raspberry Pi 3)

 , ,


0

2

Глядя на то, какое сильное ускорение даёт сборка ПО с дополнительными процессорными инструкциями, я решил проверить NEON на ARM. Скомпилировал cpuminer на Raspberry Pi 3 - сначала без neon-а, а потом с ним.

./minerd --benchmark
4 miner threads started, using 'scrypt' algorithm.
Total: 3.75 khash/s

Никуда не годится. Компилируем с поддержкой NEON: CFLAGS="-O3 -mfpu=neon" ./configure

Total: 2.41 khash/s

Upd: А ещё оно стало зависать при попытке запустить бинарник с Неоном. Может, у меня проц дефектный? А если вручную указать не 4 потока, а --threads 2 и 3, то появляется прирост относительно бинарника без неона (на двух - 2,49 против 1,91), и не зависает.

Пишите в комментариях ваши истории успеха/неуспеха, много ли конкретно у вас даёт прироста производительности этот самый NEON, можно ли сравнивать с SSE?

★★★★★

Последнее исправление: ZenitharChampion (всего исправлений: 9)

Ты б лучше задумался, как будешь жить в старости с такими отклонениями.

Как не компиляй твой арм такое тормозное говно, что на бу штеуде скомпиленое без оптимизаций быстрее работает. Маняйнить это вообще nuff said. Опрос суксесс стори не интересен, тк на разном железе прирост разный.

anonymous
()
Ответ на: комментарий от anonymous

Как не компиляй твой арм такое тормозное говно

Твой софт - говно (с)
ARM - заебца, но юзерам нужны свистоперделки, а разработчикам гигабайты json'а и xml'ей на каждый чих.

devl547 ★★★★★
()
Последнее исправление: devl547 (всего исправлений: 1)
Ответ на: комментарий от devl547

Ну да, и вселенная с её законами не та))

anonymous
()
Ответ на: комментарий от anonymous
pi@raspberrypi:~/cpuminer-2.4.5 $ CFLAGS="-O3 -march=arm-v8a+crc -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv" ./configure
checking build system type... armv7l-unknown-linux-gnueabihf
checking host system type... armv7l-unknown-linux-gnueabihf
checking target system type... armv7l-unknown-linux-gnueabihf
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for style of include used by make... GNU
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/home/pi/cpuminer-2.4.5':
configure: error: C compiler cannot create executables
See `config.log' for more details
ZenitharChampion ★★★★★
() автор топика

Ещё надо сказать что neon хорош только на Cortex-a8 (даёт наиьольший прирост чем без). На A7 и A15 neon несколько подрезали. Под neon часто компилер генерит не слишком хороший код и наибольший прирост утдаётся получить написав на ассемблере. Но это сильно зависит от задачи. Но односзначно даже при просто компиляции, при включённой векторизации, если завекторизовалось нормально - будет быстрее. К сожалению с векторизацией в последних компиляторах как-то не очень, во времена gcc-3.x было повеселее. Ещё надо учитывать что многие инструкции neon требуют строгого выравнивания, и новый gcc (>= 4.x) если не может выровнять, кладёт болт. Если оптимизация важна, нужно вручную постараться через __attribute__. Там достаточно много тонкостей.

slapin ★★★★★
()
Ответ на: комментарий от slapin

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

slapin ★★★★★
()
Ответ на: комментарий от ZenitharChampion

mfpu=crypto-neon-fp-armv

вот ты олень ленивый, скопипастил даже по ссылке не сходил, очепятка там, ищи сам.

anonymous
()
Ответ на: комментарий от slapin

If the selected floating-point hardware includes the NEON extension (e.g. -mfpu=‘neon’), note that floating-point operations are not generated by GCC’s auto-vectorization pass unless -funsafe-math-optimizations is also specified. This is because NEON hardware does not fully implement the IEEE 754 standard for floating-point arithmetic (in particular denormal values are treated as zero), so the use of NEON instructions may lead to a loss of precision.

anonymous
()
Ответ на: комментарий от slapin

Я обновил исходное сообщение - у меня оказался дефектный проц. Код с неоном даже приводит к завису, но при этом в три потока (вместо четырёх) есть и прирост в скорости, и не зависает.

ZenitharChampion ★★★★★
() автор топика
Ответ на: комментарий от ZenitharChampion

Припекание зависит от количества используемых транзисторов, которое на разных инструкциях отличается.

anonymous
()
Ответ на: комментарий от anonymous

Интересно. Я думал что там в каждом вычислительном юните встроены все инструкции, а не где-то отдельно. Сейчас замерю на трёх потоках. Upd: с тремя потоками 66-69 градусов, с четырьмя ушло в ребут уже при 64.

Я уверен что проблема в процессоре, потому что при перегреве сначала был бы тротлинг (на RPi он есть). А тут - ребут в первые 5 секунд после запуска бинарника.

ZenitharChampion ★★★★★
() автор топика
Последнее исправление: ZenitharChampion (всего исправлений: 3)
Ответ на: комментарий от anonymous

Векторизация перпендикулярна floating point, но да, и это тоже. Когда я этим активно занимался всё было гораздо проще - включаешь neon и векторизацию и получаешь ускорение в 5 раз на 1-ядерном Cortex-A8. Сейчас уже всё не так. Консерваторы, блин.

slapin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.