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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ xml библиотеки http://www.cyberforum.ru/cpp-beginners/thread386515.html
Ребята, подскажите простую xml библиотеку
C++ Как реальзовать команду Здравствуйте. Как реализовать команду help То есть как в cmd.exe Пишешь Help и там сообщение http://www.cyberforum.ru/cpp-beginners/thread386514.html
Граф C++
Помогите описать граф в С++ списками. По какому принципу это делается ?
C++ Файловый Друмерный массив
Зделать, так что бы данные двумерного массива вводились из файла и выводились в файл. Массив делает смещение главной диагонали, и ставит последний элемент на начало. #include<iostream> using namespace std; const int n=4,m=4; void InArray (float ); void Change (float ); void PrintArray (float ); void main()
C++ Задача на двумерные массивы... http://www.cyberforum.ru/cpp-beginners/thread386493.html
Как найти сумму цифр нижнего правого треугольника матрицы без диагонали??? например матрица 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 сумма равна 40(5+5+5+5+4+4+4+3+3+2)
C++ Считать со строки В строке записано арифметическое выражение, содержащее целые числа и знаки операций сложения, вычитания и умножения. Вычислить его значение, не используя процедуру Val подробнее

Показать сообщение отдельно
eXXXXXXXXXXX
30 / 30 / 3
Регистрация: 24.02.2011
Сообщений: 126

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

18.11.2011, 14:20. Просмотров 992. Ответов 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;
            }
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru