Если бы это был реальный, а не вымышленный случайный пример:
Я бы ожидал, что процессор 8 ГГц будет сильно конвейеризованным, и, таким образом, будет иметь высокие штрафы за ошибочные прогнозы ветвлений и другие задержки. , И, возможно, более высокая задержка для более сложных инструкций. (Предположительно все еще задержка одного цикла для add
и других простых инструкций ALU; тактирование настолько велико, что вы не можете сделать это, имеет смысл, только если вы хотите 8 ГГц для маркетинга, а не для реальной производительности.)
Также, для заданной скорости DRAM промах кэша имеет в основном фиксированное время в наносекундах. При более высокой тактовой частоте ядра гораздо больше циклов ядра тратится на ожидание одной и той же ошибки кэша (т. Е. Большая задержка памяти для выполнения не по порядку выполнения при попытке скрытия).
См. Также Современные микропроцессоры A 90-минутный гид! - это был бы полный дизайн "демона скорости", противоположный "brainia c".
Но даже тогда, ИПЦ 12, вероятно, не будет будьте типичны (например, для SPECint2017) для любого вменяемого дизайна, который кто-то потрудится построить. Но помните, это для одной конкретной c программы. Очень высокий CPI (низкий IP C) также является признаком неэффективного программного обеспечения (или, по крайней мере, выполнения чего-то, что неизбежно замедляется), например, тратит много времени на просмотр связанных списков, которые отсутствуют в кеше. Адрес для следующей загрузки зависит от предыдущей загрузки, поэтому он не может даже запуститься, пока не поступит из какого-либо внешнего кэша или даже из памяти.
(Другие структуры данных также включают в себя отслеживание указателя, например, бинарные деревья. Поиск огромного бинарного дерева включает в себя как погоню за указателями, так и (обычно) ошибочные предсказания ветвлений. Бинарный поиск в плоском массиве или неявном дереве, где узлы находятся в известных позициях массива, позволяет программной предварительной выборке двух возможностей опережать следующую. шаг, использование дополнительной полосы пропускания для уменьшения задержки за счет использования параллелизма на уровне памяти, на который способно большинство HW.)
Или, конечно, поскольку это только теоретический пример без ущерба для здравомыслия, Процессор может быть настолько тупо неэффективным, насколько мы хотим: возможно, он микрокодирован (и не конвейерен), как оригинальный 8086 и другие микропроцессоры той эпохи, и выполняет инструкции, выполняя шаги микрокодирования, каждый из которых занимает тактовый цикл. (Например, детали производительности Z80 были известны с точки зрения внутренних состояний по сравнению с тактовыми циклами, а обычные инструкции занимали несколько раз.) одна инструкция (с парой входных указателей) может заменить целый l oop на массивы чисел с плавающей точкой. (Таким образом, высокопроизводительные ЦП могут использовать преимущества более широких каналов передачи данных, не требуя другого машинного кода, как мы делаем для современного SIMD с коротким вектором, такого как x86 SSE / AVX / AVX512, чтобы использовать преимущества нового HW с более широкими модулями SIMD add / mul / FMA .)