LINUX.ORG.RU

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

Исправление MOPKOBKA, (текущая версия) :

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

К примеру возьмем матрицу и два вектора, значения только 1 или 0. Хотим выполнить умножение матрицы на один и второй вектор, и поэлементное умножение векторов-результатов: (M*V1)*(M*V2)

Выгоднее вместо прямого выполнения, сконструировать в памяти такую же формулу, и запустить оптимизатор во время выполнения, который передалет ее в (V1*V2)*M, если в векторе всего 10 элементов ненулевых, а матрица огромная, то это будет в сотни, тысячи, миллионы раз быстрее, зависит от соотношения.

Это простой пример, такой можно и заранее руками соптимизировать, но могут быть примеры посложнее, с непредсказуемыми данными.

Исходная версия MOPKOBKA, :

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

К примеру возьмем матрицу и два вектора, значения только 1 или 0. Хотим выполнить умножение матрицы на один и второй вектор, и поэлементное умножение векторов-результатов: (M*V1)*(M*V2)

Выгоднее вместо прямого выполнения, сконструировать в памяти такую же формулу, и запустить оптимизатор во время выполнения, который передалет ее в (V1*V2)*M, если в векторе всего 10 элементов ненулевых, а матрица огромная, то это будет в сотни, тысячи, миллионы раз быстрее, зависит от соотношения.

Это простой пример, такой можно и заранее руками соптимизировать, но могут быть примеры посложнее, с непредсказуемыми данными.