2016-12-19 4 views
2

Я использую библиотеку Eigen C++ для написания определенного алгоритма для 64-битного процессора ARM Cortex-A53.Улучшения ARM NEON в Eigen 3.3

В главном журнале изменений (http://eigen.tuxfamily.org/index.php?title=3.3) есть улучшения ARM NEON в версии 3.3, включая «правильную настройку целевого количества векторных регистров». Итак, кто-нибудь знает, что это значит? Можно ли сказать Эйгену в полной мере воспользоваться 32 векторными регистрами A53? По моим быстрым испытаниям это не происходило автоматически.

Спасибо, Лаури

ответ

3

Благодарим за сообщение ... технически, вы нашли ошибку!

Eigen должен настроить его использование 128-битных регистров NEON в режиме arm64, в нем используется 32 из них. Я думал, что я сделал это сделать, но это похоже, что я был неправ: -/ https://bitbucket.org/eigen/eigen/src/tip/Eigen/src/Core/arch/NEON/PacketMath.h?fileviewer=file-view-default#PacketMath.h-34

Нужно исправить ...

+0

Тем не менее, сейчас я помню, что эта запись изменений имел в виду: ситуация до Eigen 3.3 была еще хуже, так как эта константа была установлена ​​равной 8! По крайней мере сейчас он использует 16, что является правильным значением для arm32. –

+0

Исправлено в ветке по умолчанию: https://bitbucket.org/eigen/eigen/commits/1095dd392946a44a260ef0f4c2a0c32e696bd8e0 и в ветке 3.3: https://bitbucket.org/eigen/eigen/commits/9498b5b4c39d452452cceef90d88d6f9b4f19d62. Обратите внимание, что только потому, что этот параметр теперь исправлен, не знает автоматически, что Eigen будет знать, как эффективно использовать дополнительные регистры для конкретной операции. –

+0

Спасибо Бенуа. Мой код имеет две критические части. 1) умножение больших матриц и 2) вычисление собственных векторов с SelfAdjointEigenSolver. Eigen release 3.3 (без вашего исправления) дает хорошее ускорение для части 2). Я унаследовал ваше исправление и добавил #define EIGEN_ARCH_ARM64 1 для дальнейшего ускорения 1) или 2), но я не получил улучшения (по сравнению с 3.3 без вашего исправления). Это похоже на ожидаемое поведение или может быть больше ошибок? –

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