Прогнозирование зависимости от памяти

редактировать

Прогнозирование зависимости от памяти - это метод, используемый высокопроизводительными микропроцессорами, выполняющими вне очереди, которые выполняют операции доступа к памяти (загрузки и сохранения) вне программного порядка, чтобы предсказать истинные зависимости между загрузками и сохранениями во время выполнения инструкции. Обладая прогнозируемой информацией о зависимости, процессор может затем решить спекулятивно выполнить определенные загрузки и сохранения в неупорядоченном порядке, не допуская при этом выполнения других загрузок и сохранений не в порядке (поддерживая их в порядке). Позже в конвейере используются методы устранения неоднозначности в памяти, чтобы определить, правильно ли выполнялись загрузки и сохранения, а если нет, то для восстановления.

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

В общем, прогнозирование зависимости от памяти предсказывает, являются ли две операции с памятью зависимыми, то есть взаимодействуют ли они, обращаясь к одной и той же области памяти. Помимо использования прогнозирования зависимости от памяти для загрузки (RAW или истинное) для неупорядоченного планирования загрузок и сохранений, были предложены другие приложения для прогнозирования зависимости от памяти. См. Например.

Прогнозирование зависимости от памяти - это оптимизация, дополняющая предположение о зависимости от памяти. Семантика последовательного выполнения подразумевает, что операции сохранения и загрузки выполняются в порядке, указанном программой. Однако, как и в случае выполнения других инструкций вне очереди, возможно выполнение двух операций с памятью в порядке, отличном от того, который подразумевается программой. Это возможно, когда две операции независимы. В предположении зависимости от памяти загрузке может быть разрешено выполнение до предшествующего ей хранилища. Спекуляция успешна, когда загрузка не зависит от хранилища, то есть когда две инструкции обращаются к разным ячейкам памяти. Спекуляция терпит неудачу, когда загрузка зависит от хранилища, то есть когда два доступа перекрываются в памяти. В первых, современных нестандартных конструкциях, спекуляция с памятью не использовалась, поскольку ее преимущества были ограничены. Если объем внепланового выполнения увеличился на несколько десятков инструкций, использовались наивные предположения о зависимости от памяти. В наивных предположениях о зависимости от памяти загрузке разрешается обходить любое предыдущее хранилище. Как и в случае любой формы спекуляции, важно сопоставить преимущества правильных спекуляций с штрафом, уплаченным за неправильные спекуляции. По мере того, как объем внепланового выполнения увеличивается до нескольких десятков инструкций, преимущества наивной спекуляции с точки зрения производительности уменьшаются. Чтобы сохранить преимущества агрессивных предположений о зависимости от памяти, избегая при этом издержек, связанных с ошибочными предположениями, было предложено несколько предикторов.

Селективное прогнозирование зависимости от памяти останавливает определенные нагрузки до тех пор, пока не станет ясно, что нарушения не произойдет. Он не предсказывает явно зависимости. Этот предсказатель может задерживать загрузки дольше, чем необходимо, и, следовательно, приводить к неоптимальной производительности. Фактически, в некоторых случаях он работает хуже, чем наивно спекулировать всеми нагрузками как можно раньше. Это связано с тем, что часто быстрее ошибиться и восстановить, чем ждать, пока все предыдущие хранилища выполнятся. Точное предсказание зависимости от памяти было разработано в Университете Висконсина-Мэдисона. В частности, Dynamic Speculation и Synchronization задерживают загрузку только до тех пор, пока это необходимо, путем прогнозирования точного хранилища, которого должна ждать загрузка. Этот предсказатель предсказывает точные зависимости (пара накоплений и нагрузок). В синониме прогнозирующие группирует всю зависимость, которые разделяют общую нагрузку или команду сохранения. Магазин наборы предсказатель представляет множество потенциальных зависимости эффективны путем объединения всех возможные магазинов нагрузка может зависеть от. Средство прогнозирования барьеров магазина рассматривает определенные инструкции магазина как препятствия. То есть всем последующим операциям загрузки или сохранения не разрешается обходить конкретное хранилище. Предиктор барьера хранилища не предсказывает явно зависимости. Этот предсказатель может без необходимости задерживать последующие, но независимые загрузки. Прогнозирование зависимости от памяти имеет и другие приложения, помимо планирования загрузки и хранения. Например, спекулятивная маскировка памяти и спекулятивный обход памяти используют предсказание зависимости от памяти, чтобы упростить передачу значений через память.

Аналогия с предсказанием ветвления

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

Прогнозирование ветвления можно рассматривать как двухэтапный процесс. Сначала предсказатель определяет направление ветки (взято или нет). Это бинарное решение. Затем предсказатель определяет фактический целевой адрес. Точно так же прогнозирование зависимости от памяти можно рассматривать как двухэтапный процесс. Сначала предсказатель определяет, существует ли зависимость. Затем он определяет, что это за зависимость.

Смотрите также
Рекомендации
Последняя правка сделана 2024-01-02 06:55:05
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте