[ARM CortexA] Разница между строго упорядоченным и типом памяти устройства

Я действительно новичок в Cortex A, и я знаю, что ARM применяет слабо упорядоченную модель памяти, и есть три взаимоисключающих типа памяти:

  • Сильно упорядоченная
  • устройство
  • Нормальный

Я примерно понимаю, для чего предназначен Normal и что означают строго заказанные и Device. Однако разница между сильно упорядоченным и устройством меня смущает.

Согласно Руководству для программистов серии Cortex-A, единственное отличие состоит в том, что:

Запись в строго упорядоченную память может завершиться только тогда, когда она достигнет периферийного устройства или компонента памяти, к которому осуществляется запись.

Запись в память устройства разрешается завершать до того, как она достигнет периферийного устройства или компонента памяти, к которому осуществляется доступ при записи.

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

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

Заранее спасибо.

1 ответ

Решение

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

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

Третьим важным моментом является то, что любое неявное упорядочение доступа к памяти, которое происходит из-за типов памяти, не влияет на упорядочение доступа к другим типам памяти. Опять же, если у вашего приложения есть подобные зависимости, требуются явные инструкции барьера.

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

Другие вопросы по тегам