Форум программистов, компьютерный форум, киберфорум
Наши страницы

Перемножение матриц 6000Х6000 - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Описать структуру Note http://www.cyberforum.ru/cpp-beginners/thread605940.html
Описать структуру с именем NOTE, содержащую следующие поля: фамилия, имя; номер телефона; дата рождения (массив из трех чисел). Написать программу, выполняющую следующие действия: ввод с...
C++ Подскажите как записать условие В матрице А(n*n) найти Сред.Арифметическое элементов последнего столбца и возвести полученное значение в квадрат. Нужно только условие с началом открытия цикла и концом Циклы for(i=0;i<r;i++)... http://www.cyberforum.ru/cpp-beginners/thread605929.html
C++ Poisk.dat
Вот программа http://pastebin.com/MxsNP1kc . И к ней есть 5 Dat файлов sozd.dat ,poisk.dat ,poisk2.dat,dop.dat,kor.dat. Не показывает второй третий и пятые столбики,которые должны выводиться. Вот...
Вывести фамилии студентов, дата рождения которых соответствует введенному месяцу C++
Дана информация о студентах 1) ФИО 2) Дата рождения 3) Оценки по 3 предметам 4) Пол Вывести фамилии студентов, дата рождения которых соответствует введенному месяцу, и тех, которые не имеют...
C++ Определение области допустимых значений параметров формул http://www.cyberforum.ru/cpp-beginners/thread605909.html
Составьте программу, которая подсчитывает и выводит значение t1 и t2 по формулам, которые приведены в Вашем варианте индивидуального задания. Определите области допустимых значений параметров формул...
C++ В матрице А(N,N) найти индексы первого элемента, превосходящего среднее арифметическое всех элементов В заданной матрице А(N,N) найти индексы первого элемента, превосходящего среднее фрифметическое всех элементов. Элементы матриц просматривать слева на право и сверху вниз. подробнее

Показать сообщение отдельно
Sanyur
11 / 11 / 0
Регистрация: 19.03.2010
Сообщений: 101

Перемножение матриц 6000Х6000 - C++

14.06.2012, 22:04. Просмотров 990. Ответов 3
Метки (Все метки)

Нужно перемножить матрицы размером в 6000 на одном ядре(один поток).
Рассчитать теоретическое время.

Кто-нибудь, подскажите пожалуйста: почему препод говорит, что время выполнения операции с плавающей точкой при частоте 2.5 GHz 10^10(процессоры вычисляют 4 операции с плавающей точкой одновременно, то есть 2.5*4*10^9) и почему он говорит, что в эту величину внесено время выборки из ОП.

В теории должно быть 500Х10^9 операций / 10^10 = 50 секунд.(Я так понимаю препод округлил 432=6*6*6*2)

На практике получается больше часа, если еще получится вычислить.

Почему такие различия в результатах?

компилятор vs2010, обычный проект с++, платформа х64.

алгоритм обычный(матрица здесь умножается на себя для экономии времени написания программы и памяти выделяемой в программе. как мне кажется если таким же способом перемножать разные матрицы время не уменьшится)
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 0; i< 6000; i++)
    {
        for(int j = 0; j< 6000; j++)
        {
            float buf = 0;
            for(int k = 0; k< 6000; k++)
            {
                buf += pfltMasA[6000*k+i]*pfltMasA[6000*j+k];
            }
            pfltMasC[j*6000+i] = buf;
        }
    }

Прошу сделать подсказки(или привести код) КАК обычным алгоритмом(без кеша и распараллеливания) получить 50с и/или обосновать почему получается такое ужасное время. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru