Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Выравнивание и кэш.  (Прочитано 10017 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« : 04-12-2017 11:35 » 

Доброго дня.

Хочу поинтересоваться: может ли выравнивание в памяти по границам и размеру строк кэша повысить быстродействие? Второе, можно ли от менеджера памяти добиться такого подхода стандартными методами? Или нужно как-то вручную рассчитывать смещение, чтобы всё выровнять? Или я вообще не прав?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 04-12-2017 20:19 » 

Это имеет смысл только для специфичных числодробилок. В некоторых случаях, чем выравнивание, важнее, сколько твоих структур уместятся в кеше, чтобы реже в память ходить. Для обычного прикладного софта это вообще без разницы, особенно без привязки потока исполнения к ядру.

У аллокатора, обычно, другие проблемы: поиск подходящего фрагмента за минимальное время и уменьшение фрагментации кучи.

Почитай про кеш хотя бы Вики: https://ru.wikipedia.org/wiki/%D0%9A%D1%8D%D1%88_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D0%B0
« Последнее редактирование: 04-12-2017 23:13 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #2 : 05-12-2017 06:30 » 

Советую почитать Что каждый программист должен знать о памяти.
« Последнее редактирование: 05-12-2017 06:45 от darkelf » Записан
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 05-12-2017 10:11 » 

В некоторых случаях, чем выравнивание, важнее, сколько твоих структур уместятся в кеше, чтобы реже в память ходить.
Я из всего изученного понял, что главная суть ускорения DRAM в преобразовании параллельного считывания в последовательное. То есть, предположим для упрощения, DRAM работает на частоте 100 МГц, а кэш на 1000 МГц, таким образом, считывая параллельно из DRAM по 80 бит за цикл получаем поток в 8 Гб/с, тот же поток получается при считывании из кэша по 8 бит за цикл, и это быстрее, чем считывать из DRAM по 8 бит за цикл. Сам буфер конечно тоже полезен, но программа не распределяет его использование. Я считаю, что при дробном расположении данных, потребуется несколько обращений к DRAM, а в выровненном состоянии только одно обращение за цикл обработки. Или я заблуждаюсь?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 05-12-2017 23:08 » new

Я не понял, чего ты понял. Опять что-то свое.
По ссылке darkelf все разжевано. DRAM и кеш принципиально различаются в ячейках хранения: конденсатор и триггер соответственно. Отсюда все плюсы и минусы. Сложность интерфейса к DRAM растет с целью компенсировать главный недостаток — большое время доступа. Кстати, 25 лет назад время доступа к DRAM было 50-70 нс. Сейчас время доступа... 40..50 нс. Т.е. первую порцию данных нужно ждать почти тоже самое время. Но сейчас мы получаем сразу пачку длинной в кеш-строку. По этому плотное расположение данных выгоднее для итерирования, чем разреженное.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines