Представьте схему процессора с конвейерной архитеткурой, многоуровневым кэшем и предсказателем переходов — объясните феномен «memory wall» и «pipeline hazards», опишите аппаратные и компиляторные приёмы для уменьшения задержек и потерь производительности

12 Окт в 14:17
3 +2
0
Ответы
1

Ниже — сжатое, но технически ёмкое объяснение феноменов «memory wall» и «pipeline hazards» и перечень аппаратных и компиляторных приёмов, применяемых для уменьшения задержек и потерь производительности.

1) Что такое «memory wall»

Суть: производительность процессоров частота,количествоинструкцийвсекунду,параллелизмнауровнеинструкцийчастота, количество инструкций в секунду, параллелизм на уровне инструкцийчастота,количествоинструкцийвсекунду,параллелизмнауровнеинструкций растёт гораздо быстрее, чем скорость доступа к основной памяти латентностьи,вменьшейстепени,пропускнаяспособностьлатентность и, в меньшей степени, пропускная способностьлатентностьи,вменьшейстепени,пропускнаяспособность. В результате процессор всё чаще простаивает в ожидании данных из памяти — «стена памяти».Проявления:
Высокая латентность основной памяти DRAMDRAMDRAM — сотни тактов процессора; в то же время L1-кэш — лишь несколько тактов. Типичные порядки: L1 ~1–4 циклов, L2 ~8–20, L3 ~30–100, DRAM ~100–300+ циклов ориентирыориентирыориентиры.Даже если агрегированная пропускная способность выросла, одиночный доступ остаётся дорогим — это ухудшает задержкочувствительные приложения.Последствия: загрузка кэшей и предвыбор prefetchingprefetchingprefetching необходимы; архитектуры ориентируются на скрытие латентности MLP,ООO,SMTMLP, ООO, SMTMLP,ООO,SMT.

2) Pipeline hazards конвейерныепомехиконвейерные помехиконвейерныепомехи

Типы:
Structural hazards — конфликт за аппаратные ресурсы например,единственныйумножительзадействовандвумяинструкциямиодновременнонапример, единственный умножитель задействован двумя инструкциями одновременнонапример,единственныйумножительзадействовандвумяинструкциямиодновременно.Data hazards — зависимости между инструкциями:RAW readafterwriteread after writereadafterwrite — истинная зависимость необхо­димодождатьсязаписинеобхо­димо дождаться записинеобхо­димодождатьсязаписи.WAR writeafterreadwrite after readwriteafterread и WAW writeafterwritewrite after writewriteafterwrite — ложные зависимости, возникают из-за ограниченного набора регистров.Control hazards — прерывания потока выполнения из-за ветвлений branchbranchbranch, возвращаемых адресов, вызовов/возвратов.Следствия: конвейер должен либо вставлять «пустые» такты bubblesbubblesbubbles, либо выполнять повторную выборку и сброс flushflushflush при неверном предсказании ветвления. Миспредсказание = потеря всех инструкций в конвейере приближённоравноглубинеконвейераприближённо равно глубине конвейераприближённоравноглубинеконвейера.

3) Аппаратные приёмы для уменьшения задержек и потерь производительности

a) Для борьбы с «memory wall»

Многоуровневые кэши L1/L2/L3L1/L2/L3L1/L2/L3 с разной латентностью и размерами — локализуют горячие данные.Умные аппаратные префетчеры:
Потоочные streamstreamstream, шаговые stridestridestride, адаптивные; загружают данные заранее по шаблону доступа.Несблокирующие кэши и поддержка множества незавершённых промахов multipleoutstandingmissesmultiple outstanding missesmultipleoutstandingmisses — повышают memory-level parallelism MLPMLPMLP.Кэш-консистентность и write buffers / write-combining — уменьшают задержки записи.Высокая пропускная способность канала памяти: многобаночный DRAM, более широкие шины, многоканальная память, HBM.Аппаратное ускорение: DMA, контроллеры памяти, предвыбор адресов, блоки предварительной агрегации prefetch/streamingenginesprefetch/streaming enginesprefetch/streamingengines.Аппаратная многопоточность SMT/HTSMT/HTSMT/HT и аппаратная поддержка контекстов — при промахе одного потока другой поток использует вычислительные ресурсы.Near-data processing / compute-in-memory — уменьшает необходимость переноса больших объёмов данных покаэкспериментально/специализированнопока экспериментально/специализированнопокаэкспериментально/специализированно.Кэш-архитектурные улучшения: victim caches, inclusive/exclusive policies, victim prefetching.Увеличение ширины и скорости L1/L2 ноэтоtrade‑off:энергопотребление,площадьно это trade‑off: энергопотребление, площадьноэтоtradeoff:энергопотребление,площадь.

b) Для борьбы с pipeline hazards

Forwarding bypassbypassbypass — передача результата напрямую в ступени, не дожидаясь записи в регистры, сокращая задержку RAW.Аппаратные interlocks — контролируют и приостанавливают инструкции, когда это необходимо.Динамическое планирование: out-of-order execution TomasuloTomasuloTomasulo, ROB reorderbufferreorder bufferreorderbuffer, регистрация зависимостей — позволяет выполнять независимые инструкции дальше по конвейеру.Регистровое переименование — устраняет ложные зависимости WAR/WAW.Глубокие/точные механизм предсказания переходов: двухуровневые предсказатели, BTB, RAS, hybrid predictors — снижают частоту mispredict.Спекулятивное выполнение и раннее разрешение ветвлений branchtargetbuffer,returnstackbranch target buffer, return stackbranchtargetbuffer,returnstack — закрывают задержки ветвлений.Специализированные аппаратные блоки несколькоцелевыхфункциональныхблоков—ALU,FPunitsнесколько целевых функциональных блоков — ALU, FP unitsнесколькоцелевыхфункциональныхблоковALU,FPunits — уменьшают структурные конфликты.Предзагрузка инструкций и улучшенный IF-stage instructionfetchinstruction fetchinstructionfetch — снижение stalls на выборку.Использование условных двигателей predicateexecutionpredicate executionpredicateexecution и условных mov CMOVCMOVCMOV — уменьшение числа ветвлений.Micro-op cache, trace cache — ускоряют повторный доступ к декодированным микрополям.

4) Компиляторные приёмы SoftwaretechniquesSoftware techniquesSoftwaretechniques

a) Для уменьшения влияния «memory wall»

Локальность данных:
Блокирование tilingtilingtiling, буферизация blockingblockingblocking для локализации доступа к кэш-уровням.Перестановка данных: структура из массивов SoASoASoA вместо массива структур AoSAoSAoS для векторизации и лучшей фильтрации кэша.Padding и выравнивание для уменьшения конфликтов в set-associative кэше.Software prefetching — вставка инструкций prefetch с правильно подобранной дистанцией prefetchdistanceprefetch distanceprefetchdistance.Алгоритмические изменения: выбор алгоритмов с лучшей локальностью например,Strassen/blockedматричныеумножениянапример, Strassen/blocked матричные умножениянапример,Strassen/blockedматричныеумножения, уменьшение объёма данных, потоковая обработка.Использование SIMD/векторизации — повышает пропускную способность и лучше использует кэш-стримы.Асинхронные I/O и батчинг запросов к памяти — уменьшение синхронных ожиданий.Параллелизация multi−threading,taskingmulti-threading, taskingmultithreading,tasking — скрывает задержки памяти масштабируемым параллелизмом.Использование scratchpad / software-managed cache ввстроенныхсистемахв встроенных системахввстроенныхсистемах для детерминированного управления данными.Профилирование и PGO profile−guidedoptimizationprofile-guided optimizationprofileguidedoptimization — оптимизация горячих путей, улучшение предсказуемости ветвлений и укладки кода.

b) Для устранения pipeline hazards

Инструкционная переупорядочка и расписание:
Static scheduling compilerscompilerscompilers: перестановка инструкций для заполнения задержек insertindependentinstr.междузависимыми—latencyhidinginsert independent instr. между зависимыми — latency hidinginsertindependentinstr.междузависимымиlatencyhiding.Software pipelining loopschedulingloop schedulingloopscheduling и unrolling — повышают ILP и уменьшают зависимость от отдельных задержек.Регистровый аллокатор: уменьшение обращений к памяти и ложных зависимостей.Branch optimizations:
Предикатирование/if-conversion — преобразование ветвлений в условные операции.Удаление редких ветвей, inline горячих функций, tail duplication.PGO — расстановка вероятных ветвлений «в линию» для лучшей работы BTB и кэш-линий.Использование инструкций условного перемещения CMOVCMOVCMOV и противоподсказательное кодирование для уменьшения mispredict.Minimize use of long-latency operations in inner loops; hoist invariant computations out of loops.Векториация и использование специализированных инструкций для уменьшения числа инструкций и ветвлений.

5) Комбинации аппаратных и программных приёмов

Software prefetch + hardware prefetch: компилятор вставляет инструкцию prefetch; аппаратный префетчер дополняет стом.PGO + hardware branch predictors: компилятор располагает горячие пути последовательно, чтобы снизить miss в BTB и кэше инструкций.Код, организованный по локальности blockingblockingblocking, хорошо работает с многоуровневой кэшей и снижает DRAM-traffic.SMT/многопоточность на аппаратном уровне + компиляторная поддержка параллелизма = лучшее скрытие латентности.

6) Практические рекомендации сводкасводкасводка

Для программистов и компиляторов:
Улучшайте локальность данных blocking,SoA,выравниваниеblocking, SoA, выравниваниеblocking,SoA,выравнивание, применяйте prefetch состорожнойдистанциейс осторожной дистанциейсосторожнойдистанцией, пользуйтесь векторизацией и PGO.Устраняйте/сводите к минимуму ветвления в горячих циклах if−conversion,CMOVif-conversion, CMOVifconversion,CMOV, делайте loop unrolling и software pipelining там, где это уместно.Для проектировщиков аппаратуры:
Инвестируйте в MLP несколькоoutstandingmissesнесколько outstanding missesнесколькоoutstandingmisses, префетчеры, non-blocking caches и быстрые уровни кэша; используйте ООО и регистровое переименование; повышайте пропускную способность памяти многоканальнаяархитектура,HBMмногоканальная архитектура, HBMмногоканальнаяархитектура,HBM и поддерживайте SMT.Trade-offs: увеличение кэш-памяти, глубины конвейера, сложности предсказателя и ООO повышают площадь, энергопотребление и сложность верификации; программные преобразования могут увеличить кодовый размер и сложность.

Кратко: память часто ограничивает эффективность быстрого конвейера — решение комбинирует многоуровневые кэши и префетчинг на аппаратном уровне с техникой упорядочивания, предсказания ветвлений и трансформациями кода на уровне компилятора, плюс параллелизм SMT/многопроцессорностьSMT/многопроцессорностьSMT/многопроцессорность, чтобы скрыть и уменьшить задержки.

12 Окт в 15:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир