Проблемы конвейерной обработки в микроархитектурах ЦП
Hazard (computer architecture)
Проблемы в конвейере CPU: типы опасностей (data, structural, control), методы решения (stall, forwarding, scoreboarding, Tomasulo). Оптимизация микроархитектуры.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Проблемы с конвейером команд в микроархитектурах центрального процессора (CPU)
Problems with the instruction pipeline in central processing unit (CPU) microarchitectures
В области проектирования центральных процессоров (CPU) опасностями (или конфликтами) называют проблемы в конвейере команд микроархитектуры CPU, когда следующая команда не может быть выполнена на следующем такте, что потенциально может привести к неверным результатам вычислений. Три основных типа опасностей – это конфликты данных, структурные конфликты и конфликты управления (конфликты ветвлений). Существует несколько методов решения проблем, связанных с опасностями, включая остановки конвейера / создание "пузырей" в конвейере, перенаправление операндов, а в случае внеочередного выполнения – метод таблицы состояний и алгоритм Томасуло.
In the domain of central processing unit (CPU) design, hazards are problems with the instruction pipeline in CPU microarchitectures when the next instruction cannot execute in the following clock cycle, and can potentially lead to incorrect computation results. Three common types of hazards are data hazards, structural hazards, and control hazards (branching hazards). There are several methods used to deal with hazards, including pipeline stalls/pipeline bubbling, operand forwarding, and in the case of out of order execution, the scoreboarding method and the Tomasulo algorithm.
Предыстория
Инструкции в конвейерном процессоре выполняются в несколько стадий, поэтому в любой момент времени несколько инструкций находятся в обработке на разных стадиях конвейера, таких как выборка и выполнение. Существует множество различных микроархитектур конвейера команд, и инструкции могут выполняться вне порядка. Конфликт (или опа́сность) возникает, когда две или более одновременно обрабатываемых (возможно, выполняемых вне порядка) инструкций вступают в противоречие.
Instructions in a pipelined processor are performed in several stages, so that at any given time several instructions are being processed in the various stages of the pipeline, such as fetch and execute. There are many different instruction pipeline microarchitectures, and instructions may be executed out of order. A hazard occurs when two or more of these simultaneous (possibly out of order) instructions conflict.
Опасности управления (опасности в отрасли или опасности в инструкции)
Опасность управления возникает, когда конвейер принимает неверные решения при предсказании переходов и, следовательно, загружает в конвейер инструкции, которые впоследствии необходимо отменить. Термин "опасность перехода" также относится к опасности управления.
Control hazard occurs when the pipeline makes wrong decisions on branch prediction and therefore brings instructions into the pipeline that must subsequently be discarded. The term branch hazard also refers to a control hazard.
Пузырьки в трубопроводе
Пузырькообразование в конвейере, также называемое разрывом конвейера или остановкой конвейера, — это метод предотвращения конфликтов данных, структурных конфликтов и конфликтов переходов. По мере выборки инструкций, управляющая логика определяет, может ли возникнуть конфликт. Если это так, то управляющая логика вставляет "пузырь" (s) в конвейер. Таким образом, до выполнения следующей инструкции (которая вызовет конфликт), предыдущая успеет завершиться и предотвратить его. Если количество "пузырей" равно количеству стадий в конвейере, процессор очищается от всех инструкций и может продолжить работу без конфликтов. Любые формы остановки конвейера вносят задержку перед возобновлением выполнения. Очистка конвейера происходит, когда инструкция перехода переходит к новому адресу памяти, делая недействительными все предыдущие стадии конвейера. Эти предыдущие стадии очищаются, позволяя конвейеру продолжить работу с новой инструкцией, указанной переходом.
Bubbling the pipeline, also termed a pipeline break or pipeline stall, is a method to preclude data, structural, and branch hazards. As instructions are fetched, control logic determines whether a hazard could/will occur. If this is true, then the control logic inserts s (s) into the pipeline. Thus, before the next instruction (which would cause the hazard) executes, the prior one will have had sufficient time to finish and prevent the hazard. If the number of s equals the number of stages in the pipeline, the processor has been cleared of all instructions and can proceed free from hazards. All forms of stalling introduce a delay before the processor can resume execution. Flushing the pipeline occurs when a branch instruction jumps to a new memory location, invalidating all prior stages in the pipeline. These prior stages are cleared, allowing the pipeline to continue at the new instruction indicated by the branch.
Другие методы
Задержка памяти — еще один фактор, на который должны обращать внимание разработчики, поскольку задержка может снизить производительность. Различные типы памяти имеют разное время доступа. Таким образом, выбирая подходящий тип памяти, разработчики могут повысить производительность конвейерного тракта данных.
Memory latency is another factor that designers must attend to, because the delay could reduce performance. Different types of memory have different accessing time to the memory. Thus, by choosing a suitable type of memory, designers can improve the performance of the pipelined data path.