История изменений
Исправление maggotroot, (текущая версия) :
«Свёртка» — умножение V^dagger на матрицу и затем на V, то бишь V^dagger M V.
дружище, это называется квадратичной формой.
У матриц размер порядка 10x10
ну айген вроде как раз выбирает оптимальный алгоритм для константных размеров? Можешь для симметричных\эрмитовых матриц использовать соответствующие процедуры (почему ты так сделал в бусте но не в айгене?) http://eigen.tuxfamily.org/dox/group__QuickRefPage.html#title12 или дернуть бласовский dsymm.
Вообще, советую тебе проверить что ты слинковал все нужные либы https://eigen.tuxfamily.org/dox/TopicUsingIntelMKL.html , просто бывает х10 прирост от того что профессиональные библиотеки используешь (на твоих матрицах такого не будет канешн).
Далее, почему такой трепет перед скоростью умножения матричек 10-10? Кого и почему это должно ипать? Если у тебя их надо миллионы на каждой итерации умножать, то посмотри в сторону batched-операций. https://software.intel.com/content/www/us/en/develop/articles/introducing-batch-gemm-operations.html
При этом ранг матриц — 4
ну если ты так сильно угараешь про задротство и эффективность, то храни эти 4 вектора (можешь их через eigendecomposition/svd получить), которые дают тебе матрицу
M=sum_{i<=4} v^H_i * v_i
и матричные умножения можешь реализовать через векторные умножения (очень не советую таким заниматься – там жизнь за окном идет:)) ).
Можно ещё конечно лапак попробовать
все правильно делаешь, лапак это надстройка над бласом: блас это самая основа типа матричных умножений, а лапак это сложные алгоритмы типа матричных факторизаций, решений уравнений итд.
ПС. Ты этого не спрашивал, но хочу тебе искренне посоветовать (так как сам в области твоего ОП работаю): не дрочи ты такие штуки на крестах, бери матлаб\питон\джулиу, там все это удобнее делать, а на джулии может конкретно быть быстрее (она сыроватая и непростая, но я начинаю верить что она перевернет все численное программирование) и у тебя будет больше времени думать о методе, чем о микросекундах и прочем крестовом задротстве Ну и если припечет, то просто напишешь свои ботлнеки на крестах. Да и на матлабе попрогать стоит хотя бы из-за тамошней документации :))) Думаю ты сам видишь уже, что численное программирование мало общего имеет с нормальным программированием, так что всему свой инструмент.
Исходная версия maggotroot, :
«Свёртка» — умножение V^dagger на матрицу и затем на V, то бишь V^dagger M V.
дружище, это называется квадратичной формой.
У матриц размер порядка 10x10
ну айген вроде как раз выбирает оптимальный алгоритм для константных размеров? Можешь для симметричных\эрмитовых матриц использовать соответствующие процедуры (почему ты так сделал в бусте но не в айгене?) http://eigen.tuxfamily.org/dox/group__QuickRefPage.html#title12 или дернуть бласовский dsymm.
Вообще, советую тебе проверить что ты слинковал все нужные либы https://eigen.tuxfamily.org/dox/TopicUsingIntelMKL.html , просто бывает х10 прирост от того что профессиональные библиотеки используешь (на твоих матрицах такого не будет канешн).
Далее, почему такой трепет перед скоростью умножения матричек 10-10? Кого и почему это должно ипать? Если у тебя их надо миллионы на каждой итерации умножать, то посмотри в сторону batched-операций. https://software.intel.com/content/www/us/en/develop/articles/introducing-batch-gemm-operations.html
При этом ранг матриц — 4 ну если ты так сильно угараешь про задротство и эффективность, то храни эти 4 вектора (можешь их через eigendecomposition/svd получить), которые дают тебе матрицу
M=sum_{i<=4} v^H_i * v_i
и матричные умножения можешь реализовать через векторные умножения (очень не советую таким заниматься – там жизнь за окном идет:)) ).
Можно ещё конечно лапак попробовать
все правильно делаешь, лапак это надстройка над бласом: блас это самая основа типа матричных умножений, а лапак это сложные алгоритмы типа матричных факторизаций, решений уравнений итд.
ПС. Ты этого не спрашивал, но хочу тебе искренне посоветовать (так как сам в области твоего ОП работаю): не дрочи ты такие штуки на крестах, бери матлаб\питон\джулиу, там все это удобнее делать, а на джулии может конкретно быть быстрее (она сыроватая и непростая, но я начинаю верить что она перевернет все численное программирование) и у тебя будет больше времени думать о методе, чем о микросекундах и прочем крестовом задротстве Ну и если припечет, то просто напишешь свои ботлнеки на крестах. Да и на матлабе попрогать стоит хотя бы из-за тамошней документации :))) Думаю ты сам видишь уже, что численное программирование мало общего имеет с нормальным программированием, так что всему свой инструмент.