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

Это экзаменационный вопрос (тренировочный, а не настоящий), но я понятия не имею, как ответить на него:

Компьютер имеет 64-битный ЦП с частотой 2 ГГц, инструкции выполняют запрограммированный ввод/вывод на устройство, которое подключено к шине 33 МГц (ширина 32 бита). Регистры устройства отображаются в памяти в диапазоне от e000 до e0ff.

(MOVQ $A,R выполняет 64-битную копию с адреса A в регистр R.)

Примерно сколько циклов ЦП потребуется для выполнения этих инструкций?

  • MOVQ $0xe000, r1
  • MOVQ $0xe000, r2
  • MOVQ $0xe000, r3
  • MOVQ $0xe000, r4
  • MOVQ $0xe008, r5

Это ответ с несколькими вариантами ответов, и вот возможные варианты:

  • а. Примерно 120 циклов процессора
  • б. Примерно 240 циклов процессора
  • в. Около 600 циклов процессора
  • д. Около 1200 циклов процессора
  • е. Приблизительно 9600 циклов процессора

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

Я не могу найти ничего ни в учебниках, ни в Интернете, чтобы помочь мне вычислить это.


person theWhiteKnight    schedule 16.12.2020    source источник
comment
В общем, ожидается, что это не детерминировано, поэтому вы не можете его вычислить. Технически возможно в очень контролируемых ситуациях заставить универсальный процессор выполнять ту же задачу за повторяющееся количество тактов, но во многих ситуациях очень легко заставить это выполнять другое количество тактов, изменив некоторые вещи, даже если это тестируется тот же машинный код.   -  person old_timer    schedule 17.12.2020
comment
теперь, если это тест для школы, то подходит то, что говорит профессор или учебник. но есть огромная разница между университетом и реальным миром. но чтобы попасть в реальный мир, вы часто хотите пройти через университет, поэтому вам нужно просто изучить этот курс и мнение школы/профессора, или, что более вероятно, в качестве образовательного инструмента эти вещи детерминированы, чтобы вы могли делать математику, затем позже вы узнаете, что является детерминированным, а что нет, когда и почему.   -  person old_timer    schedule 17.12.2020


Ответы (3)


Я думаю, что мы можем дать вам только самый наивный ответ.

Сделаем некоторые предположения.

  • инструкции кэшируются или находятся в высокоскоростной памяти и требуют 0 циклов ЦП для выборки
  • доступ к 64-битным данным по 32-битной шине занимает 2 цикла шины

Таким образом, доступ к 5 ячейкам памяти займет 10 циклов шины.

Основной процессор работает на частоте 2000 МГц, а шина - на 33 МГц; это соотношение ~ 60: 1.

Тогда ответ ~ 600 циклов процессора.

person Erik Eidt    schedule 16.12.2020
comment
Спасибо за сверхбыстрый ответ и объяснение расчета. Большое спасибо! - person theWhiteKnight; 16.12.2020

Поскольку регистры 64-битные, вам нужно передать 64-битные. Шина имеет ширину 32 бита, что означает 2 передачи. При частоте шины 33 МГц это 2/33 МГц ~ 60,6 нс. Поскольку процессор имеет частоту 2 ГГц, каждый цикл составляет 1/2 ГГц = 0,5 нс. Таким образом, количество циклов составляет 60,6 нс/0,5 нс ~ 120. Это для каждой инструкции. Если вопрос означает общее количество, то, конечно, это 5 * 120 = 600.

person Jester    schedule 16.12.2020
comment
Спасибо за сверхбыстрый ответ и объяснение расчета и подтверждение расчета выше. Я очень благодарен. - person theWhiteKnight; 16.12.2020

Для каждого чтения:

  • ЦП декодирует инструкцию, выясняет, что ему нужно, и в конечном итоге отправляет запрос на чтение по шине или каналу. Предположим, что это стоит 1 цикл ЦП.

  • шина или канал, который использует ЦП, вероятно, не будет шиной 33 МГц, которую использует устройство (поскольку ЦП 2 ГГц с ОЗУ 33 МГц просто неправдоподобен). Обычно имеется быстрая локальная шина (или быстрый набор ссылок), соединяющая ЦП, ОЗУ и другие компоненты (маршрутизаторы, мосты); затем более медленные автобусы с другой стороны. Допустим, требуется 2 такта быстрой шины, чтобы запрос ЦП на чтение был перенаправлен с быстрой шины на шину 33 МГц устройства; а также предположим, что 2 такта быстрой шины эквивалентны 4 тактам процессора.

  • когда запрос на чтение поступает на шину 33 МГц устройства; эта шина 32-битная, но сам запрос на чтение будет состоять из нескольких полей - например. может быть поле типа перехода и 32-битное адресное поле (и, возможно, начало/конец для синхронизации и, возможно, CRC для обнаружения ошибок и..). Предположим, что требуется 2 цикла шины (по 1 циклу шины для каждого поля), чтобы запрос на чтение дошел до устройства.

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

  • в конечном итоге устройство отправит обратно прочитанный ответ. Вероятно, это будет более крупный пакет (например, поле типа транзакции, 32-битное поле адреса, затем 64-битные данные, разделенные на два 32-битных поля). Допустим, для этого требуется 4 цикла шины, чтобы вернуться к маршрутизатору/мосту на быстрой шине.

  • на быстрой шине, возможно, мы можем ожидать, что ответ на чтение будет эквивалентен 6 циклам ЦП, чтобы вернуться к ЦП.

  • как только ответ на чтение возвращается в ЦП, ЦП может потратить еще 1 цикл на выполнение инструкции.

Если все это сложить, получится 1 + 4 + 4 + 1 = 10 циклов процессора плюс 2 + 2 + 4 = 8 циклов шины. Теперь нам нужно преобразовать циклы шины в циклы ЦП — 2 ГГц / 33 МГц = 60,606, поэтому мы можем сказать, что 1 цикл шины эквивалентен 61 циклу ЦП (округляя в большую сторону, потому что вы не можете получить долю цикла ЦП); а 8 циклов шины эквивалентны 488 циклам ЦП.

Теперь мы можем подключить это и сказать, что для завершения одного чтения может потребоваться 10 + 488 = 498 циклов ЦП. Есть 5 чтений, поэтому это может занять в 5 раз больше времени, поэтому может потребоваться 2440 циклов ЦП.

Итак... мы собрали кучу недостающей информации, и 2440 циклов процессора не являются одним из вариантов. В этом случае естественно попытаться угадать, почему вопрос бессмысленен. Недостающая информация подразумевает, что вопрос игнорировал различные важные вещи, и поэтому разумно предположить, что неправильный ответ, который вопрос считает правильным, будет меньше, чем любой правильный ответ, что вопрос неверен (и меньше, чем ответ мы получили от заполнения недостающей информации). Это предположение приводит нас к d. Approximately 1200 CPU cycles.

С предполагаемым ответом мы можем работать в обратном направлении. Если предполагаемый ответ - 1200 циклов и есть 5 инструкций, то это будет 240 циклов ЦП на инструкцию. Если 1 цикл шины эквивалентен 61 циклу ЦП; тогда 240 циклов ЦП будут примерно эквивалентны 4 циклам шины (без учета времени, затрачиваемого на декодирование инструкции и т. д. в ЦП, что, вероятно, незначительно). Теперь мы можем представить, что, возможно, запрос на чтение имеет 32-битный адрес и ничего больше (нет типа транзакции), а может быть, ответ на чтение имеет 32-битный адрес и 64-битное значение и ничего больше (без типа транзакции). Конечно, это полная ерунда (отсутствие маршрутизатора/моста подразумевает, что ОЗУ либо 33 МГц, либо не существует; отсутствие типа транзакции означает, что нет очевидного способа определить, является ли что-либо на шине запросом или ответом, чтением или транзакцией). запись или любой другой вид транзакции — например, IRQ, или код ошибки, или когерентный трафик, или ..; отсутствие времени для устройства определить, что делать, означает, что устройство нашло способ для электроники превысить скорость света).

person Brendan    schedule 17.12.2020
comment
Это интересно, так что два расчета дают результат 600, а один расчет дает 1200. Похоже, нужно сделать много предположений. Я немного больше запутался! - person theWhiteKnight; 17.12.2020
comment
@theWhiteKnight: ответ ~ 600 циклов имеет смысл только в том случае, если устройство волшебным образом отправляет правильные данные в нужное время (без указания адреса или того, что происходит чтение). - person Brendan; 17.12.2020