Задержка памяти является одной из фундаментальных проблем, изучаемых в исследованиях компьютерной архитектуры.
Спекулятивное исполнение
Спекулятивное выполнение с проблемой неупорядоченных команд часто может найти полезную работу, чтобы заполнить задержку во время обращения к кэш-памяти L1, но обычно заканчивается полезная работа после 10 или 20 циклов или около того. Было несколько попыток увеличить объем работы, которую можно выполнить во время промаха с большим временем ожидания. Одна идея состояла в том, чтобы попытаться сделать ценностное предсказание (Липасти, Уилкерсон и Шен, (ASPLOS-VII): 138-147, 1996). Эта идея была очень модной в научных кругах академической архитектуры некоторое время, но, похоже, не работает на практике. Последней попыткой сохранить предсказание значения из мусорной корзины истории было предвкушение выполнения(Мутлу, Старк, Уилкерсон и Патт (HPCA-9): 129, 2003). В выполнении runahead вы понимаете, что ваши предсказания значений будут неправильными, но все равно спекулятивно выполняете их, а затем отбрасываете всю работу, основанную на предсказании, исходя из теории, что вы по крайней мере запустите некоторые предварительные выборки для того, что в противном случае было бы кешем L2 промахов. Оказывается, ранада впустую тратит столько энергии, что просто не стоит этого.
Последний подход в этом направлении, который может получить некоторую популярность в промышленности, заключается в создании чрезвычайно длинных буферов переупорядочения. Инструкции выполняются спекулятивно на основе прогнозирования ветвлений, но прогнозирование значений не выполняется. Вместо этого все инструкции, которые зависят от загрузки с большим временем ожидания, сидят и ждут в буфере переупорядочения. Но поскольку буфер переупорядочения настолько велик, вы можете продолжать извлекать инструкции, если предиктор ветвления делает достойную работу, иногда вы сможете найти полезную работу намного позже в потоке команд. Влиятельным исследовательским документом в этой области были Continuous Flow Pipelines(Шринивасан, Раджвар, Аккари, Ганди и Аптон (АСПЛОС-XI): 107-119, 2004). (Несмотря на то, что все авторы принадлежат Intel, я думаю, что эта идея получила большее распространение в AMD.)
Многопоточность
Использование нескольких потоков для обеспечения устойчивости к задержкам имеет гораздо более длительную историю и гораздо больший успех в промышленности. Все успешные версии используют аппаратную поддержку многопоточности. Самая простая (и наиболее успешная) версия этого - то, что часто называют FGMT ( мелкозернистая многопоточность ) или чередованная многопоточность . Каждое аппаратное ядро поддерживает несколько потоковых контекстов ( контекст по сути является состоянием регистра, включая регистры, такие как указатель команд и любые регистры неявных флагов). В мелкозернистом многопоточном процессоре каждый поток обрабатывается в-приказ. Процессор отслеживает, какие потоки остановились при пропадании нагрузки с большим временем ожидания, а какие готовы к следующей инструкции, и использует простую стратегию планирования FIFO для каждого цикла, чтобы выбрать, какой готовый поток выполнить этот цикл. Первым примером этого в широком масштабе были HEP-процессоры Burton Smith (Burton Smith продолжил разработку суперкомпьютера Tera, который также был мелкозернистым многопоточным процессором). Но идея уходит гораздо дальше, в 1960-е годы, я думаю.
FGMT особенно эффективен при потоковых рабочих нагрузках. Все современные графические процессоры (графические процессоры) являются многоядерными, где каждое ядро является FGMT, и эта концепция также широко используется в других вычислительных областях. Sun T1 также был многоядерным FMGT, как и Intel Xeon Phi (процессор, который до сих пор называют «MIC» и раньше называли «Larabee»).
Идея одновременной многопоточности (Tullsen, Eggers и Levy, (ISCA-22): 392-403, 1995) объединяет аппаратную многопоточность со спекулятивным исполнением. Процессор имеет несколько контекстов потока, но каждый поток выполняется спекулятивно и не по порядку. Более сложный планировщик может затем использовать различные эвристические методы для извлечения из потока, который, скорее всего, будет полезен ( Малик, Агарвал, Дар и Фрэнк, (HPCA-14: 50-61), 2008 ). Некоторая крупная полупроводниковая компания начала использовать термин гиперпоточность для одновременной многопоточности, и это имя, по-видимому, является наиболее широко используемым в наши дни.
Микроархитектурные проблемы низкого уровня
После перечитывания ваших комментариев я понял, что вы также заинтересованы в передаче сигналов между процессором и памятью. Современные кэши обычно допускают одновременное выполнение нескольких промахов. Это называется кешем без блокировки (Kroft, (ISCA-8): 81-87, 1981). (Но документ трудно найти в Интернете, и его довольно сложно прочитать. Краткий ответ: ведется много бухгалтерского учета, но вы просто с этим справляетесь. Структура аппаратного учета называется MSHR (отсутствует информация / регистр хранения статуса). ), это имя Крофт дал в своей статье 1981 года.)