0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 23

Услышал, что построчно компьютер быстрее считывает матрицу чем по столбцам. Почему?

11.06.2018, 23:43. Показов 2282. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Относительно недавно , преподаватель линейной алгебры и геометрии сказал , что построчно компьютер быстрее считывает матрицу чем по столбцам и опираясь на это , можно ускорить время работы программы. Я спросил у него с чем это связано , он начал мне втирать о иерархии памяти и тд.
Я кивая головой сделал вид что мне понятно , но ничего не понял Может у кого то получиться объяснить мне это простым языком ?
Меня действительно заинтересовал данный вопрос , ибо мне не понятно , какая вообще разница для компьютера считывать информацию построчно или по столбцу.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.06.2018, 23:43
Ответы с готовыми решениями:

Я услышал о возникновении новой версии VS, более поздней, чем .NET. Что это?
Пожалуйста, расскажите начинающему программисту о новой версии Visual Studio, в чем ее принципиальное отличие от .NET и как она называется.

Почему матрица на вектор умножается быстрее чем вектор на матрицу?
Почему матрица на вектор умножается быстрее чем вектор на матрицу?

Ввести вещественную матрицу размерности n * m построчно, а вывести по столбцам
Задача 1. Разработать алгоритм и программу решения задачи: "Ввести вещественную матрицу размерности n * m построчно, а вывести по...

6
из племени тумба-юбма
 Аватар для мама Стифлера
2522 / 1818 / 419
Регистрация: 29.11.2015
Сообщений: 8,840
Записей в блоге: 15
12.06.2018, 08:07
Хмм... тоже интересно, пусть даже это так и действительно связано с иерархией памяти. Для меня не понятно другое, каким образом можно добиться программным способом, чтоб данные записывались в ячейки (кэша или ОЗУ)памяти построчно.
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
13.06.2018, 01:33
Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

Эх люди видимо вы не помните про адресную арефметику

двухмерный массив mas[count1, count2] в памяти представлен в виде одномерного массива mas[count1*count2] соответственно прочитать строчку массива будет быстрее чем столбец т. к. для каждого элемента столбца нужно вычислить его местоположение и прочитать значение по указанному адресу при этом весь масив зачастую засунуть в кеш процессора не удасться, но если читать по строчно то каждую строку можно засунуть в кеш процессора как фрагмент памяти соответственно скорость обработки массива будет выше по строчно чем по столбцам, но данное различие начинает играть роль при очень больших размерах массива к примеру mas[1000,1000] of long
3
из племени тумба-юбма
 Аватар для мама Стифлера
2522 / 1818 / 419
Регистрация: 29.11.2015
Сообщений: 8,840
Записей в блоге: 15
13.06.2018, 08:33
агерон, с вами полностью согласен, но понять не могу каким способом засунуть в нужные адреса кэша нужные данные, чтоб потом они читались построчно.
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16355 / 7671 / 1078
Регистрация: 11.11.2010
Сообщений: 13,736
13.06.2018, 16:39
мама Стифлера,
транспонируй матрицу, работай со строками
1
WH
1585 / 813 / 192
Регистрация: 10.09.2013
Сообщений: 3,231
Записей в блоге: 3
21.06.2018, 13:33
Это от языка программирования еще зависит. Если С/С++, то да, если fortran, то он как раз размещает массивы в памяти компа по столбцам.
1
 Аватар для Ethereal
6772 / 2740 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
23.06.2018, 02:13
Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

Цитата Сообщение от evil_tourist Посмотреть сообщение
Я кивая головой сделал вид что мне понятно , но ничего не понял Может у кого то получиться объяснить мне это простым языком ?
Простым языком. Современный процессор добирается до памяти не напрямую. Он работает с промежуточным хранилищем - кешем. Пока нужные данные в кеше процессор работает с ними быстро. А вот когда нужных данных в кеше нет, то процессору приходится ждать пока они будут подгружены из памяти в кеш и это медленно. Подгрузка данных в кеш идет порциями, которые называются линиями.
Так вот пусть линия кеша 64 байта и наш матрица (пусть 100x100) выровняна на адрес, кратный 64 (компилятор, если включить у него опцию оптимизации структуры данных программы на такие кратные адреса выравнивает). Тогда, когда программа прочитает первый элемент матрицы типа целое (4 байта), до кучи в кеш подчитаются еще 15 элементов матрицы из той-же строки. И если работать по строкам, то эти 15 элементов будут обработаны быстро. И только потом начнется подгрузка новой линии в кеш. То есть одна медленная подгрузка данных из памяти в кеш будет приходиться на 16 обработанных элементов матрицы. А вот если работать по столбцам, то при обработке каждого элемента матрицы придется подгружать из памяти новую линию в кеш (потому-что от столбца до столбца по адресам далеко) и это будет заметно медленнее.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.06.2018, 02:13
Помогаю со студенческими работами здесь

Почему FX-6300 быстрее чем FX-4300?
Выбираю недорогой процессор для игр, ориентируюсь на тактовую частоту. У FX-4300 частота выше. Цена почти одна и та же. Почему в тестах...

Почему программа на Lazarus работает быстрее, чем на C++Builder?
Здравствуйте! Вопрос выкладываю на два форума - C++Builder и Lazarus. Это, пожалуй, не вопрос, а результат эксперемента. И так,...

Что и в чем быстрее?
Разъясните пожалуйста: в чем разница в скорости в ArrayList and LinkedList? А также в HashMap and LinkedHashMap? В ArrayList быстрее...

Почему ракета не может разогнаться быстрее, чем её двигатель выбрасывает газ?
Или если по-другому - почему ракета не может разгоняться до почти скорости света? Допустим, ракета разогналась до скорости истечения...

Правда что С быстрее чем С++?
Имеется в виду на исполнении, а не на момент компиляции... Наверняка такая тема уже была, но я не нашёл, если дадите ссылку также буду...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
Паттерны в Python: Singleton, Factory и Observer
py-thonny 26.04.2025
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования. . . .
Исключения в C#: Stack Overflow, Access Violation и Out of memory
stackOverflow 26.04.2025
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,. . .
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
Структура "железный OnKeyUp" вместо антидребезга. Полностью асинхронный счётчик.
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
Автоматизация Amazon Web Services (AWS) с Boto3 в Python
py-thonny 25.04.2025
Облачные вычисления стали неотъемлемой частью современной ИТ-инфраструктуры, а Amazon Web Services (AWS) занимает лидирующие позиции среди провайдеров облачных услуг. Управление многочисленными. . .
Apache Kafka vs RabbitMQ в микросервисной архитектуре
ArchitectMsa 25.04.2025
Современная разработка ПО всё чаще склоняется к микросервисной архитектуре — подходу, при котором приложение разбивается на множество небольших, автономных сервисов. В этой распределённой среде. . .
Параллельное программирование с OpenMP в C++
NullReferenced 24.04.2025
Параллельное программирование — подход к созданию программ, когда одна задача разбивается на несколько подзадач, которые могут выполняться одновременно. Оно стало необходимым навыком для. . .
Цепочки методов в C# с Fluent API
UnmanagedCoder 24.04.2025
Современное программирование — это не только решение функциональных задач, но и создание кода, который удобно поддерживать, расширять и читать. Цепочки методов и Fluent-синтаксис в C# стали мощным. . .
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru