История изменений
Исправление
MOPKOBKA,
(текущая версия)
:
Матрицы могут быть разреженными, там уже компилятор никак не поможет, и вообще лучше не полагаться на прямой подход, иногда выгоднее вместо реального умножения и сложения конструировать микропрограмму которую потом можно оптимизировать, и выполнить когда понадобится конкретный результат.
К примеру возьмем матрицу и два вектора, значения только 1 или 0. Хотим выполнить умножение матрицы на один и второй вектор, и поэлементное умножение векторов-результатов: (M*V1)*(M*V2)
Выгоднее вместо прямого выполнения, сконструировать в памяти такую же формулу, и запустить оптимизатор во время выполнения, который передалет ее в (V1*V2)*M, если в векторе всего 10 элементов ненулевых, а матрица огромная, то это будет в сотни, тысячи, миллионы раз быстрее, зависит от соотношения.
Это простой пример, такой можно и заранее руками соптимизировать, но могут быть примеры посложнее, с непредсказуемыми данными.
Исходная версия
MOPKOBKA,
:
Матрицы могут быть разряженными, там уже компилятор никак не поможет, и вообще лучше не полагаться на прямой подход, иногда выгоднее вместо реального умножения и сложения конструировать микропрограмму которую потом можно оптимизировать, и выполнить когда понадобится конкретный результат.
К примеру возьмем матрицу и два вектора, значения только 1 или 0. Хотим выполнить умножение матрицы на один и второй вектор, и поэлементное умножение векторов-результатов: (M*V1)*(M*V2)
Выгоднее вместо прямого выполнения, сконструировать в памяти такую же формулу, и запустить оптимизатор во время выполнения, который передалет ее в (V1*V2)*M, если в векторе всего 10 элементов ненулевых, а матрица огромная, то это будет в сотни, тысячи, миллионы раз быстрее, зависит от соотношения.
Это простой пример, такой можно и заранее руками соптимизировать, но могут быть примеры посложнее, с непредсказуемыми данными.