Инструкции памяти, такие как ldr, str или b, выполняют 4 цикла в сборке ARM. Это потому, что каждая ячейка памяти имеет длину 4 байта?Почему инструкции по сборке занимают 4 цикла в сборке ARM?
ответ
ARM имеет конвейерную архитектуру. Каждый тактовый цикл продвигает трубопровод на один шаг (например, fetch/decode/execute/read ...). Поскольку конвейер непрерывно подается, общее время выполнения каждой команды может приближаться к 1 циклу, но фактическое время для отдельной команды от «выборки» до завершения может быть 3+ циклами. ARM имеет хорошее объяснение на своем сайте:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0222b/ch01s01s01.html
Латентность памяти добавляет еще один уровень усложнения этой идеи. ARM использует многоуровневую систему кэширования, целью которой является получение наиболее часто используемых данных в наименьшее количество циклов. Даже чтение из самого быстрого (L0) кэша включает в себя несколько циклов латентности. Конвейер включает средства, позволяющие завершить запросы на чтение позднее, если данные не будут использоваться сразу. Это легче понять на примере:
LDR R0,[R1]
MOV R2,R3 // Allow time for memory read to occur
ADD R4,R4,#200 // by interleaving other instructions
CMP R0,#0 // before trying to use the value
// By trying to access the data immediately, this will cause a pipeline
// 'stall' and waste time waiting for the data to become available.
LDR R0,[R1]
CMP R0,#0 // Wastes at least 1 cycle due to pipeline not having the data
Идея заключается в том, чтобы скрыть присущие латентности в трубопроводе и, если вы можете, скрыть дополнительные задержки в доступе к памяти, задерживая зависимости регистров (ака инструкции чередования) ,
Дополнительные пункты? В магазине нет латентности. Кроме того, все быстрее с кешем - это код и данные. Сначала код будет конкурировать с доступом к данным. Существует инструкция «PLD». Филиалы могут усложнять ситуацию. –
@artlessnoise - В основном верно. Есть только 4 буфера записи, которые не объединяют последовательные записи. Плохое использование буферов записи (например, запись по одному байту за раз) также вызовет дополнительные записи при записи. – BitBank
- 1. Инструкции по пропуску в сборке ARM
- 2. ARM - Инструкции по сборке и хранению
- 3. Что делают инструкции по сборке ARM?
- 4. Упрощение инструкции по сборке
- 5. Адрес инструкции по сборке
- 6. Инструкции по сборке CUDA
- 7. инструкция по сборке ARM «retne»
- 8. MSP430 инструкции по сборке
- 9. Инструкции по сборке Манипуляции
- 10. Вопрос по сборке начинающих ARM
- 11. Счетчик программ в ARM-сборке
- 12. Почему используются условные инструкции по сборке?
- 13. Почему инструкции по сборке содержат умножения в инструкции «lea»?
- 14. Поиск инструкции по сборке opcode
- 15. У компилятора IAR ARM есть странные инструкции по сборке
- 16. Как изменить этот код на инструкции по сборке ARM?
- 17. о инструкции по сборке testl
- 18. Настройка irq_handler в сборке ARM
- 19. ARM/Thumb interworking в сборке
- 20. Объяснение str в сборке ARM
- 21. Матричное умножение в ARM-сборке
- 22. указание точки поплавка по сборке ARM
- 23. Инструкции по сборке JNZ и CMP
- 24. STR и инструкция LDR в сборке ARM
- 25. Перевод инструкции С в инструкции по сборке MIPS?
- 26. Проблема с увеличением в встроенной сборке ARM
- 27. Замена изменений в инструкции по сборке Другие инструкции
- 28. (MIPS) - некоторые инструкции по сборке быстрее других?
- 29. C к сборке, переводчик по каждой инструкции
- 30. Где хранятся выходы инструкции по сборке?
Зависит от процессора, некоторые ARM-процессоры могут выполнять несколько команд LDR или STR в цикле. –
Нет, вероятно, это не работает (чтение одного байта/цикла, поэтому с 4 циклами), вероятно, это просто латентность для всей операции. – harold
Ширина данных редко делает большую разницу в производительности, так как вы можете «просто» увеличить количество транзисторов, чтобы обрабатывать большую ширину, вместо 8 бит параллельно вы работаете параллельно с 16 или 32. Это стоит «всего» нескольких миллионов миллионных транзисторов по всему ядру, и именно так процессоры двигались через 4, 8, 16, 32 до современных 64-битных (с выделенными 128-512-битными SIMD-командами для дальнейшего распараллеливания). Но сложно «обмануть» (кэш - это один), вся логическая сложность обращения к другому чипу (памяти) от ЦП для извлечения/хранения некоторых данных по шине. Это как путешествие. – Ped7g