Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Heisenberg
44 / 45 / 3
Регистрация: 11.08.2010
Сообщений: 226
#1

Оптимизация умножения матриц 4x4 - C++

08.03.2014, 14:32. Просмотров 1083. Ответов 4
Метки нет (Все метки)

Есть код - умножение двух матриц размером 4x4

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void mat_multiply(float *matrix, float *a, float *b)
{
    float result[16];
    for (int c = 0; c < 4; c++)
    {
        for (int r = 0; r < 4; r++)
        {
            int index = c * 4 + r;
            float total = 0;
            for (int i = 0; i < 4; i++)
            {
                int p = i * 4 + r;
                int q = c * 4 + i;
                total += a[p] * b[q];
            }
            result[index] = total;
        }
    }
    for (int i = 0; i < 16; i++)
    {
        matrix[i] = result[i];
    }
}
Функция используется очень часто, помогите оптимизировать ее, в профилировщике в каждой функции где она используется она больше всех использует времени на выполнение, если верить профилировщику
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2014, 14:32     Оптимизация умножения матриц 4x4
Посмотрите здесь:

Скорость умножения матриц - C++
Всем привет. Решил написать 2 метода умножения матриц, и проверить скорость их выполнения. Имеем класс Mat4 в котором данные описаны...

Функция умножения матриц - C++
Так получилось , что я решила перейти в другой вуз на другую специальность. Программирование - это не мое . Но нужно сдать сессию , а на...

Подпрограмма умножения 2 матриц - C++
#include&lt;iostream.h&gt; const int N=20;const int M=25; double m,l,n; void d(double x,double y,double z) void main () { int i,j; ...

Рекурсивная процедура умножения матриц - C++
Вот мне задали написать рекурсивную процедуру для умножения матриц. Я понимаю, что значит написать процедуру умножения матриц, но что...

Написать функцию умножения матриц - C++
Условие : даны 3 матрицы . Определить функцию которая перемножит 2 матрицы. С помощью неё произвести умножение трех данных матриц. ...

Проверить результат умножения матриц - C++
Здравствуйте! Снова решил сдать задачу на сайте Дистанционная подготовка. Но программа не проходит по времени. Помогите, пожалуйста,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,184
Завершенные тесты: 1
08.03.2014, 14:45     Оптимизация умножения матриц 4x4 #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void mat_multiply(float *matrix, float *a, float *b)
{
    for (int c = 0; c < 4; c++)
    {
         int index=c*4;
        for (int r = 0; r < 4; r++)
        {
             float total = 0;
             int q=c*4,p=r;
             for (int i = 0; i < 4; i++)
             {
                total += a[p] * b[q++];
                p+=i*4;
             }
             matrix[index++] = total;
        }
    }
 
}
monochromer
400 / 362 / 142
Регистрация: 03.01.2013
Сообщений: 954
08.03.2014, 15:00     Оптимизация умножения матриц 4x4 #3
Можно, конечно, пойти на крайние меры и вычислять элементы матрицы так (раз уж размер матрицы жестко задан):
http://www.cyberforum.ru/cgi-bin/latex.cgi?M_{11} = A_{11} B_{11} + A_{12} B_{21} + A_{13} B_{31} + A_{14} B_{41}
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
08.03.2014, 15:08     Оптимизация умножения матриц 4x4 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Heisenberg Посмотреть сообщение
C++
1
2
3
4
5
6
for (int i = 0; i < 4; i++)
            {
                int p = i * 4 + r;
                int q = c * 4 + i;
                total += a[p] * b[q];
            }
например развернуть вот этот цикл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int p,q
 
  p=r;
  q=c*4; 
 total += a[p] * b[q];
  p+=4;
  q++;
 total += a[p] * b[q];
  p+=4;
  q++;
 total += a[p] * b[q];
  p+=4;
  q++;
 total += a[p] * b[q];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2014, 21:38     Оптимизация умножения матриц 4x4
Еще ссылки по теме:

Алгоритм умножения прямоугольных матриц - C++
написать алгоритм умножения прямоугольных матриц, известна только размерность

Алгоритм умножения матриц Винограда-Штрассена - C++
Имеется реализованный алгоритм умножения матриц по Штрассену. Проблема следующая: Штрассена надо переделать в Штрассена-Винограда, но это...

Исправить программу для умножения матриц - C++
Привет. Создал программу для умножения матриц, используя метод Виноград. Вот что получилось #include &lt;iostream&gt; #include &lt;math.h&gt; using...

Оптимизации алгоритма умножения квадратных матриц - C++
Какой алгоритм используется в мат. пакете Матлаб для умножения квадратных матриц? Даже не сам алгоритм, а идея или хотя бы догадки. ...

Оптимизация алгоритма перемножения двух матриц - C++
Здравствуйте, нужна помощь. Есть 2 матрицы, нужно их перемножить так, что бы алгоритм выполнялся со скорость O(n) и O(log(n))

Создать класс Matrix и функции умножения и сложения матриц - C++
Создайте класс Matrix на базе вектора vector&lt;vector&lt;int&gt;&gt;. Определите операторную функцию ostream&amp; operator&lt;&lt;(ostream&amp;, const Matrix&amp;) для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
VTsaregorodtsev
337 / 317 / 45
Регистрация: 19.02.2010
Сообщений: 1,354
09.03.2014, 21:38     Оптимизация умножения матриц 4x4 #5
Heisenberg, по размеру матрицы - всё заточено под векторизацию (SSE-команды).
В мат.библиотеках (BLAS или интеловская MKL) однозначно должны быть специально написанные быстрые функции под такой размер матриц.
Но векторизация требует предварительного транспонирования второй матрицы. И тут надо смотреть весь остальной код - лучше сделать так, чтобы эта вторая матрица была постоянной или очень редко изменяемой (чтобы транспонировать не при каждом умножении - а только один раз или малое число раз).
Yandex
Объявления
09.03.2014, 21:38     Оптимизация умножения матриц 4x4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru