LINUX.ORG.RU

История изменений

Исправление 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

и матричные умножения можешь реализовать через векторные умножения (очень не советую таким заниматься – там жизнь за окном идет:)) ).

Можно ещё конечно лапак попробовать

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

ПС. Ты этого не спрашивал, но хочу тебе искренне посоветовать (так как сам в области твоего ОП работаю): не дрочи ты такие штуки на крестах, бери матлаб\питон\джулиу, там все это удобнее делать, а на джулии может конкретно быть быстрее (она сыроватая и непростая, но я начинаю верить что она перевернет все численное программирование) и у тебя будет больше времени думать о методе, чем о микросекундах и прочем крестовом задротстве Ну и если припечет, то просто напишешь свои ботлнеки на крестах. Да и на матлабе попрогать стоит хотя бы из-за тамошней документации :))) Думаю ты сам видишь уже, что численное программирование мало общего имеет с нормальным программированием, так что всему свой инструмент.