Выполняет ли команда с одним циклом один цикл, даже если оперативная память работает медленно?

StackOverflow https://stackoverflow.com/questions/1546756

  •  20-09-2019
  •  | 
  •  

Вопрос

Я использую встроенный RISC-процессор.Есть одна основная вещь, которую я никак не могу понять.

В руководстве по процессору четко указано, что инструкция ld r1, [p1] (в C:r1 = *p1) занимает один цикл.Размер регистра r1 равен 32 битам.Однако ширина шины памяти составляет всего 16 бит.Итак, как он может получить все данные за один цикл?

Это было полезно?

Решение

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

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

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

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

Другие советы

Мое понимание:Когда говорят, что какая-то инструкция занимает один цикл, это не значит, что инструкция будет завершена за один цикл. Мы должны принять во внимание инструкции трубопровод. Предположим, что ваш процессор имеет 5-ступенчатый конвейер, эта инструкция заняла бы 5 циклов, если бы она выполнялась последовательно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top