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

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

Войти
Регистрация
Восстановить пароль
 
eXXXXXXXXXXX
30 / 30 / 3
Регистрация: 24.02.2011
Сообщений: 126
#1

Умножение матриц - C++

18.11.2011, 14:20. Просмотров 982. Ответов 4
Метки нет (Все метки)

Есть 2 функции перемножения квадратных матриц N*N
вторая функция транспонирует вторую матрицу для того, чтобы перемножение шло строка на строку, для более эффективного использования кэша, только почему то работает намного медленнее первой, в чем может быть проблема? само транспонирование выполняется мгновенно, проверял на матрицах с размерностью 100-1000 элементов
C++
1
2
3
4
5
6
7
8
9
10
void mul(float* a,float* b,float* c)
{
    for (int i=0;i<N;i++)
            for (int k=0;k<N;k++)
            {
                float val=a[i*N+k];
                for (int j=0;j<N;j++)
                    c[i*N+j]+=val*b[k*N+j];
            }
}


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void transpose(float* A)
{
    for (int i=0;i<N;i++)
        for (int j=i+1;j<N;j++)
                {
                       float t; t=A[i*N+j]; A[i*N+j]=A[j*N+i]; A[j*N+i]=t;
                }
}
void mul_trans(float* a,float* b,float* c)
{
    transpose(b);
    for (int i=0;i<N;i++)
            for (int j=0;j<N;j++)
            {
                float val=0;
                for (int k=0;k<N;k++)
                    val+=a[i*N+k]*b[j*N+k];
                c[i*N+j]=val;
            }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2011, 14:20     Умножение матриц
Посмотрите здесь:

Умножение матриц - C++
Как мне перемножить матрицы друг на друга? Искал в интернете все говорят воспользуйся boost, я скачал, а что делать дальше не понимаю....

Умножение матриц - C++
Помогите умножить 2 матрицы размерностью 4х4, нужно создать ф-ю. Я пробовал, не получилось.. typedef int mat44; void...

Умножение матриц - C++
Написал программу умножения матриц, вот отдельная функция, подскажите как протестировать на матрицы высоких порядков 1000, 1500, все...

Умножение матриц - C++
Ох уж этот универ... Короче, дела обстоят так: Перемножить матрицы А размером nхm и В размером mхl. Элементы результирующей матрицы...

Умножение матриц - C++
Плиз помогите с написанием программы умножения матриц, дело в том что матрица задана линейным массивом, вот что у меня получилось void...

Умножение матриц - C++
Ребят , помогите пожалуйста доделать программку. Осталось сделать умножение матриц C и B , результат записать в в матрицу A и матрицу A...

Умножение матриц - C++
Помогите с умножением матриц создал две идентичные таблицы 3х3 и тепер хочу вывести матрицу этих двух таблиц, но в переменной suma...

Умножение матриц - C++
Здравствуйте помогите пожалуйста, не понимаю почему не получается перемножить матрицы. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Умножение матриц - C++
Ребят помогите пожалуйста!!! Требуется написать программку умножения матриц,значения в матрице генерировать случайным образом число...

Умножение матриц - C++
Вообщем при вводе матриц размером 1х4 или 3х4, получается такое(на картинке), но если вводить матрицы к примеру 4х1 или 4х4, то все окей,...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DenCHS200
32 / 32 / 1
Регистрация: 07.10.2011
Сообщений: 117
18.11.2011, 14:41     Умножение матриц #2
Можно немного оптимизировать: не обявлять переменную t в цикле, а обьявить до цикла
eXXXXXXXXXXX
30 / 30 / 3
Регистрация: 24.02.2011
Сообщений: 126
18.11.2011, 15:04  [ТС]     Умножение матриц #3
Цитата Сообщение от DenCHS200 Посмотреть сообщение
Можно немного оптимизировать: не обявлять переменную t в цикле, а обьявить до цикла
это мелочи, транспонирование меньше 1% всего времени занимает
DenCHS200
32 / 32 / 1
Регистрация: 07.10.2011
Сообщений: 117
18.11.2011, 15:07     Умножение матриц #4
Если ты скорость работы с какой-нибудь готовой функцией сравниваешь, то , скорее всего ,её с помощью ассемблера писали, например в DirectX такие функции есть, так как графика в играх очень часто на матрицах базируется.Может тогда ассемблерную часть кода врезать в листинг?Хотя может и бредовая это идея моя?
eXXXXXXXXXXX
30 / 30 / 3
Регистрация: 24.02.2011
Сообщений: 126
18.11.2011, 15:10  [ТС]     Умножение матриц #5
Цитата Сообщение от DenCHS200 Посмотреть сообщение
Если ты скорость работы с какой-нибудь готовой функцией сравниваешь, то , скорее всего ,её с помощью ассемблера писали, например в DirectX такие функции есть, так как графика в играх очень часто на матрицах базируется.Может тогда ассемблерную часть кода врезать в листинг?Хотя может и бредовая это идея моя?
я привел листинги двух функций, первая 3 обычных вложенных циклов, только с правильным порядком переменных(чтобы осуществлялся проход по строке, а не по столбцу для второй матрицы), во втором листинге осуществляется проход по строкам сразу двух матриц , т.к. 2-ая матрица транспонированная, что должно работать быстрее первого варианта, но работает медленнее, я хочу понять почему
Yandex
Объявления
18.11.2011, 15:10     Умножение матриц
Ответ Создать тему
Опции темы

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