Есть ли у гарвардской архитектуры узкое место фон Неймана?
Из названия и этой статьи я чувствую, что ответ - нет, но я не понимаю, почему. Узким местом является то, насколько быстро вы можете извлекать данные из памяти. Кажется, не имеет значения, можете ли вы получить инструкцию одновременно. Вам все еще не нужно ждать, пока данные поступят? Предположим, что выборка данных занимает 100 процессорных циклов, а выполнение команды - 1, возможность сделать этот 1 цикл заранее не кажется огромным улучшением. Что мне здесь не хватает?
Контекст: я наткнулся на эту статью, в которой говорится, что ошибка Spectre не будет исправлена из-за спекулятивного выполнения. Я думаю, что спекулятивное выполнение, например предсказание ветвлений, имеет смысл и для архитектуры Гарварда. Я прав? Я понимаю, что спекулятивное исполнение более выгодно для архитектуры фон Неймана, но насколько? Может кто-нибудь дать приблизительное число? Насколько мы можем сказать, что Призрак останется из-за архитектуры фон Неймана?
1 ответ
Термин "узкое место фон Неймана" не говорит об архитектурах Гарварда и фон Неймана. Речь идет о всей идее компьютеров с хранимой программой, которую придумал Джон фон Нейман.
Это в равной степени относится к обоим типам компьютеров с хранимой программой. И даже процессорам с фиксированной (не хранимой) программой, которые хранят данные в оперативной памяти, как старые графические процессоры (без программируемых шейдеров).
Обычно это наиболее актуально при циклическом перемещении больших массивов, поэтому код помещается в кэш инструкций и в любом случае его не нужно извлекать при доступе к данным. (Компьютеры, слишком старые, чтобы даже иметь кеши, были просто медленными, и мне неинтересно обсуждать семантику того, является ли медлительность, даже когда существует временная и / или пространственная локальность, узким местом для фон Неймана или нет.)
https://whatis.techtarget.com/definition/von-Neumann-bottleneck указывает, что кэширование и предварительная выборка являются частью того, как мы работаем над узким местом фон Неймана, и что более быстрые и широкие шины делают узкое место шире. Но только такие вещи, как Processor-in-Memory / https://en.wikipedia.org/wiki/Computational_RAM действительно решают эту проблему, когда ALU напрямую подключается к ячейкам памяти, поэтому не существует центрального узкого места между вычислениями и хранением, а также вычислениями. емкость весов с размером хранилища. Но фон Нейман с процессором и отдельной оперативной памятью работает достаточно хорошо для большинства вещей, которые скоро исчезнут (учитывая большие кеши и интеллектуальную аппаратную предварительную выборку, а также неупорядоченное выполнение и / или SMT, чтобы скрыть задержку памяти).
Джон фон Нейман был пионером в области ранних вычислений, и неудивительно, что его имя связано с двумя различными концепциями.
Гарвард против фон Неймана говорит о том, находится ли программная память в отдельном адресном пространстве (и отдельной шине); это деталь реализации для компьютеров с хранимой программой.
Призрак: да, Призрак только о доступе к данным. Если вы можете получить атаку Spectre на программную память в архитектуре Гарварда в первую очередь, тогда она может выполняться так же, как на фон Неймана.
Я понимаю, что спекулятивное исполнение более выгодно для архитектуры фон Неймана, но насколько?
Какие? Нет, здесь нет никакой связи. Конечно, все высокопроизводительные современные процессоры - это фон Нейман. (С разделенными кэшами L1i / L1d, но память программ и данных не разделена, разделяя одно и то же адресное пространство и физическое хранилище. Разделенные кэши L1 часто называют "модифицированным Гарвардом", что имеет некоторый смысл на ISA, отличных от x86, где L1i не является 't согласован с кешами данных, поэтому перед выполнением вновь сохраненных байтов в качестве кода вам потребуются специальные инструкции очистки. x86 имеет связные кеши команд, поэтому это очень большая деталь реализации.)
Некоторые встроенные процессоры являются настоящими гарвардскими: программная память подключена к Flash, а адресное пространство данных сопоставлено с RAM. Но часто эти процессоры имеют довольно низкую производительность. Конвейер, но в порядке, и только с использованием прогнозирования ветвления для предварительной выборки команд.
Но если бы вы создали очень высокопроизводительный ЦП с полностью раздельными памятью для программ и данных (поэтому копирование с одного на другое потребовало бы проходить через ЦП), было бы практически нулевое отличие от современных высокопроизводительных ЦП. Промахи L1i кеша редки, и неважно, конкурирует ли он с извлечением данных.
Я полагаю, что вы бы полностью разбили кэши; обычно современные процессоры имеют унифицированные кэши L2 и L3, поэтому в зависимости от рабочей нагрузки (большой размер кода или нет) большее или меньшее количество L2 и L3 может в конечном итоге содержать код. Возможно, вы все равно сделаете это с одним дополнительным битом в теге, чтобы отличить адреса кодов от адресов данных.
Harvard Architecture, разделенные команды и данные память, является смягчением узкого фон Неймана. Исходное определение узкого места Бэкусом касается немного более общей проблемы, чем просто выборка инструкций или данных, и говорит об интерфейсе ЦП / памяти. В абзаце перед денежной цитатой Бэкус говорит о фактическом трафике этого автобуса:
Как ни странно, большая часть трафика - это не полезные данные, а просто имена данных, большая часть которых состоит из имен, а также операций и данных, используемых только для вычисления таких имен.
В архитектуре Гарварда с отдельной шиной ввода-вывода это не изменится. Он по-прежнему будет в основном состоять из имен.
Так что ответ - твердое нет. Гарвардская архитектура смягчает узкое место фон Неймана, но не решает его. Откровенно говоря, это более быстрое узкое место фон Неймана.