В любом случае, возможность достичь более высоких скоростей из-за более быстрых шин перевесит увеличение задержки. Если бы мы продолжили ось времени в диаграмме, то обнаружили бы, что следующая передача данных начинается через 5 циклов после окончания текущей. Это значит, что шина данных используется только в двух циклах из семи.
Поэтому с ростом количества ядер в процессорах наблюдается и увеличение скорости системной шины. Однако этого часто недостаточно, особенно если программа использует большие рабочие множества и недостаточно оптимизирована. Поэтому программист должен быть всегда готов распознать проблемы, связанные с пропускной способностью. В основном все советы по оптимизации размещения памяти по-прежнему применяются, просто детали того, что именно происходит, когда вы не можете избежать промахов кэша или разногласий, различаются. Эта ситуация изменилась с тех пор как основная структура компьютеров стабилизировалась, и разработчики аппаратного обеспечения сконцентрировались на оптимизации отдельных подсистем.
Знайте инструменты командной строки
Рисунок 6.5 показывает как быстро проблема может появиться. Если в этой опции задано значение N, то требование выравнивания для стека будет задано как 2N байт. Так, если исползуется значение 2, то требование выравнивания для стека будет снижено со https://deveducation.com/ значения по умолчанию (которое равно 16 байт) до всего 4 байт. В большинстве случаев это означает, что не нужно никаких дополнительных операций выравнивания, так как обычные операции кэша push и pop и так работают по четырехбайтным границам.
- Массовые машины с архитектурой NUMA существуют сегодня и, наверное, будут играть все большую роль в будущем.
- Демультиплексор и мультиплексор могут реализовать режим массива.
- Доступ к таким дискам на порядки медленнее, чем даже доступ к памяти DRAM.
- Очень нетерпеливый читатель может начать чтение с этой главы и, если необходимо, возвращаться к предыдущим главам, чтобы освежить знания об используемых технологиях.
- Для кэшей высокого уровня это не так, если предполагается, что программа будет универсальной.
В принципе, память SRAM в подобной ситуации используется в качестве расширения набора регистров процессора. Обычный совет в эти дни, чтобы удалить все SW prefetch из старого кода, и только подумайте о том, чтобы вернуть его, если профилирование показывает промахи кэша (и вы не насыщаете пропускную способность памяти). Предварительная выборка с обеих сторон далее шаг двоичного поиска все еще может помочь. Например, как только вы решите, какой элемент смотреть дальше, предварительно выберите элементы 1/4 и 3/4, чтобы они могли загружаться параллельно с загрузкой/проверкой середины. Первый вид оптимизации – это снизить количество страниц, которые использует программа.
(обычно) Не используйте программную предварительную выборку
Кроме параллельного доступа к памяти есть и другие проблемы. Сами модели доступа к данным очень сильно влияют на производительность подсистемы памяти, особенно когда есть несколько что каждый программист должен знать о памяти каналов памяти. Модели доступа к данным RAM будут подробно обсуждаться в разделе 2.2. Программист должен знать, что такое стек, что такое куча и как этим пользоваться.

Предварительная загрузка имеет одну большую слабость – она ме может пересекать границы страницы. Причина должна быть очевидной, если вспомнить, что ЦПУ поддерживают выделение страниц по запросу. Если модуль предварительной загрузки сможет пересекать границы страницы, то такой доступ пожет породить событие операционной системы, делающее эту страницу доступной.
1.1 Статическая RAM
Даже на модулях DRAM с command rate равным 1 команда на предварительную зарядку не может быть запущена сразу. Сигнал на предварительную зарядку не имеет специальной выделенной линии. Вместо этого на некоторых реализациях используется одновременное понижение уровней Write Enable (WE) и RAS.
Использование конденсаторов означает, что этот блок необходимо разряжать при считывании блока, поэтому этот процесс нельзя повторить беспроводным способом, а конденсатор необходимо перезарядить в какой-то момент. Что еще хуже, чтобы разместить огромное количество блоков (обычно на чипе) 10 cи единиц из 10) Емкость конденсатора должна быть низкой (femtofarads). Конденсатор, заполненный точками, содержит десятки тысяч электронов.
2 Технические детали доступа к DRAM
Могут иметься модули предварительной загрузки для кэшей L1d и L1i. Очень большая вероятность того, что имеется модуль для кэшей L2 и выше. Этот модуль для L2 и выше разделяется между всеми ядрами и гиперпотоками, использующими общий кэш. Следовательно количество от восьми до шестнадцати отдельных потоков быстро уменьшается. Программа должна делать свою работу, даже если набор данных очень велик.

Единицами измерения оси X служат единицы произведения емкости на сопротивление RC, которые являются единицами времени. Динамическая RAM по своей структуре намного проще, чем статическая. Она состоит всего из одного транзистора и одного конденсатора.
3 Предварительная загрузка
Когда строка перезаряжается (единица измерения здесь строка (см. [5]) хотя в [2] и другой литературе утверждается иное), доступ к ней невозможен. Исследование в [2] показывает, что “удивительно, но организация перезарядки DRAM может драматически влиять на производительность”. Сегодня для SDRAM одна порция передачи данных составляет 64 бит – 8 байт. Следовательно, скорость передачи данных для FSB это 8 байт умножить на эффективную частоту шины (6.4Гб/с для шины 200МГц с учетверенной скоростью передачи данных). Кажется, что это много, но это пиковая скорость, максимум, который невозможно превзойти.
Часть 5. Что могут делать программисты – оптимизация кеша
Размеры этих кэшей могут варьироваться в широких пределах. Невозможно предположить большой размер кэша как значение по умолчанию, так как это будет означать, что код будет выполняться плохо на всех машинах, кроме тех, у которых действительно такой большой кэш. Противоположный выбор также плох – предполагая самый маленький кэш, мы отбросим 87% кэша или больше. Это плохо, как мы можем увидеть из рисунка 3.14, использование большого кэша может иметь огромный эффект на скорость программы.
