• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Матрица

  • Автор темы Tural
  • Дата начала
T

Tural

Программа находит обратную матрицу с выбором элемента по столбце или по строке методом Гаусса-Жордана. записывает матрицу в одномерный или двумерный массив. Все 4 вар. выложил.
Вопрос: Почему прога которая считает обратную матрицу с выбором элемента по строке находит гораздо быстрее чем та же самая прога переделанная для нахождения с выбором эл.-та по столбце? Проги 2postr, 1postr находят обратную матрицу 1000x1000 за 15-20 сек а 2postlb, 1postlb за 150-160 сек. Для проверки запустите программу и введите размер матрицы. Например: 1000
 

Вложения

  • matr.rar
    142,9 КБ · Просмотры: 147
L

lazybiz

Давай попробую...

Допустим у тебя есть матрица:
C++:
char mat[1000][1000];
И тебе нужно вычислить сумму первой строки:
C++:
sum += mat[0][i];
Элементы строки расположены последовательно, т.е. один за другим в памяти компьютера. В этом случае может кэшироваться вся строка, и, следовательно, цикл нахождения суммы чисел, взятых (уже) из кэша пройдет быстрее чем в следующем примере, в котором мы находим сумму первого столбца:
C++:
sum += mat[i][0];
В этом случае кэш просто не может вместить в себя всю матрицу, т.к. адрес первого слагаемого элемента будет отличаться от адреса второго как минимум на 1000 байт! И для того, чтобы вместить в кэш все первые элементы столбцов матрицы ему потребуется как минимум (1000*1000)-999 байт!!! В итоге у нас получается что мы читаем первое значение каждого столбца не из кэша, а из обычной памяти, которая хоть и быстрая сама по себе, но намного медленней памяти кэша.

А так как у всех процессоров размер кэша разный, то поэтому результаты измерения времени выполнения твоей программы будут не только меняться не линейно, но и не прапорционально.
Например у меня были вот такие результаты:
1postr : 24.898 sec.
1postlb: 69.434 sec.

Исходя из этого я могу предположить что частота твоего процессора больше моего, а размер кэша меньше. Но могу в чем то и ошибаться...
 
T

Tural

Огромное спасибо. А ты попробовал запустить 2postlb? у меня находит за 91 сек.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!