Расчет среднего числа циклов для каждой команды с учетом времени выполнения, количества команд и тактовой частоты

Поэтому я изучаю компьютерную архитектуру, где мы должны учитывать различные процессоры и их часы, и я не могу не чувствовать, что мои вычисления отключены при расчете среднего ИПЦ. Для одного такого процесса мне дают:

  • счетчик команд 1.0E9
  • Время выполнения 1,5 с для программы компилятора А
  • и тактовая частота процессора составляет 8.0E9 Гц.

Мое переработанное уравнение: CPI = (Execution Time * Clock Rate)/Instruction Count .

Подставляя значения, я понял, что средний CPI для программы компилятора A равен 12. Однако это намного выше, чем у других практических проблем. Мне было интересно, если мои расчеты были правильными или нет, и если так, то почему CPI такой высокий?

Всего 1 ответ


Если бы это было реальным, а не выдуманным случайным примером:

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

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

См. Также « Современные микропроцессоры». Руководство за 90 минут! - это был бы полный дизайн «демона скорости», противоположный «бреду».


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

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


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


Или, может быть, это архитектура с векторными инструкциями SIMD в стиле Cray старой школы, где одна инструкция (с парой входов указателя) может заменить весь цикл над массивами чисел с плавающей запятой. (Таким образом, высокопроизводительные ЦП могут использовать преимущества более широких каналов передачи данных без необходимости использования другого машинного кода, как мы делаем для современного SIMD с коротким вектором, такого как x86 SSE / AVX / AVX512, чтобы использовать преимущества нового HW с более широкими модулями SIMD add / mul / FMA .)


Есть идеи?

10000