Я использую библиотеку 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? По моим быстрым испытаниям это не происходило автоматически.
Спасибо, Лаури
Тем не менее, сейчас я помню, что эта запись изменений имел в виду: ситуация до Eigen 3.3 была еще хуже, так как эта константа была установлена равной 8! По крайней мере сейчас он использует 16, что является правильным значением для arm32. –
Исправлено в ветке по умолчанию: https://bitbucket.org/eigen/eigen/commits/1095dd392946a44a260ef0f4c2a0c32e696bd8e0 и в ветке 3.3: https://bitbucket.org/eigen/eigen/commits/9498b5b4c39d452452cceef90d88d6f9b4f19d62. Обратите внимание, что только потому, что этот параметр теперь исправлен, не знает автоматически, что Eigen будет знать, как эффективно использовать дополнительные регистры для конкретной операции. –
Спасибо Бенуа. Мой код имеет две критические части. 1) умножение больших матриц и 2) вычисление собственных векторов с SelfAdjointEigenSolver. Eigen release 3.3 (без вашего исправления) дает хорошее ускорение для части 2). Я унаследовал ваше исправление и добавил #define EIGEN_ARCH_ARM64 1 для дальнейшего ускорения 1) или 2), но я не получил улучшения (по сравнению с 3.3 без вашего исправления). Это похоже на ожидаемое поведение или может быть больше ошибок? –