0 / 0 / 0
Регистрация: 19.05.2018
Сообщений: 23
|
|
Услышал, что построчно компьютер быстрее считывает матрицу чем по столбцам. Почему?11.06.2018, 23:43. Показов 2282. Ответов 6
Метки нет Все метки)
(
Относительно недавно , преподаватель линейной алгебры и геометрии сказал , что построчно компьютер быстрее считывает матрицу чем по столбцам и опираясь на это , можно ускорить время работы программы. Я спросил у него с чем это связано , он начал мне втирать о иерархии памяти и тд.
Я кивая головой сделал вид что мне понятно , но ничего не понял ![]() Меня действительно заинтересовал данный вопрос , ибо мне не понятно , какая вообще разница для компьютера считывать информацию построчно или по столбцу.
0
|
11.06.2018, 23:43 | |
Ответы с готовыми решениями:
6
Я услышал о возникновении новой версии VS, более поздней, чем .NET. Что это?
Ввести вещественную матрицу размерности n * m построчно, а вывести по столбцам |
из племени тумба-юбма
![]() |
|
12.06.2018, 08:07 | |
Хмм... тоже интересно, пусть даже это так и действительно связано с иерархией памяти. Для меня не понятно другое, каким образом можно добиться программным способом, чтоб данные записывались в ячейки (кэша или ОЗУ)памяти построчно.
0
|
![]() 447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
13.06.2018, 01:33 | |
![]() Решение
Эх люди видимо вы не помните про адресную арефметику
![]() двухмерный массив mas[count1, count2] в памяти представлен в виде одномерного массива mas[count1*count2] соответственно прочитать строчку массива будет быстрее чем столбец т. к. для каждого элемента столбца нужно вычислить его местоположение и прочитать значение по указанному адресу при этом весь масив зачастую засунуть в кеш процессора не удасться, но если читать по строчно то каждую строку можно засунуть в кеш процессора как фрагмент памяти соответственно скорость обработки массива будет выше по строчно чем по столбцам, но данное различие начинает играть роль при очень больших размерах массива к примеру mas[1000,1000] of long
3
|
из племени тумба-юбма
![]() |
|
13.06.2018, 08:33 | |
агерон, с вами полностью согласен, но понять не могу каким способом засунуть в нужные адреса кэша нужные данные, чтоб потом они читались построчно.
0
|
21.06.2018, 13:33 | |
Это от языка программирования еще зависит. Если С/С++, то да, если fortran, то он как раз размещает массивы в памяти компа по столбцам.
1
|
![]() 6772 / 2740 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
||
23.06.2018, 02:13 | ||
![]() РешениеТак вот пусть линия кеша 64 байта и наш матрица (пусть 100x100) выровняна на адрес, кратный 64 (компилятор, если включить у него опцию оптимизации структуры данных программы на такие кратные адреса выравнивает). Тогда, когда программа прочитает первый элемент матрицы типа целое (4 байта), до кучи в кеш подчитаются еще 15 элементов матрицы из той-же строки. И если работать по строкам, то эти 15 элементов будут обработаны быстро. И только потом начнется подгрузка новой линии в кеш. То есть одна медленная подгрузка данных из памяти в кеш будет приходиться на 16 обработанных элементов матрицы. А вот если работать по столбцам, то при обработке каждого элемента матрицы придется подгружать из памяти новую линию в кеш (потому-что от столбца до столбца по адресам далеко) и это будет заметно медленнее.
2
|
23.06.2018, 02:13 | |
Помогаю со студенческими работами здесь
7
Почему FX-6300 быстрее чем FX-4300? Почему программа на Lazarus работает быстрее, чем на C++Builder? Что и в чем быстрее? Почему ракета не может разогнаться быстрее, чем её двигатель выбрасывает газ? Правда что С быстрее чем С++? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Анализ и линтинг кода 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
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
|