Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Блок оптимизации ЦП
CPU optimization unit
Предварительное извлечение – это процесс получения кодов операций инструкций из памяти программы заранее, который осуществляется с помощью входной очереди предварительного извлечения (PIQ). Предварительно извлеченные инструкции хранятся в очереди. Заблаговременное получение кодов операций, до момента необходимости их выполнения, повышает общую эффективность процессора и увеличивает его скорость. Процессору больше не требуется ждать завершения операций доступа к памяти для получения кода следующей инструкции. Эта архитектура широко использовалась в микропроцессоре Intel 8086.
Fetching the instruction opcodes from program memory well in advance is known as prefetching and it is served by using a prefetch input queue (PIQ). The pre fetched instructions are stored in a queue. The fetching of opcodes well in advance, prior to their need for execution, increases the overall efficiency of the processor boosting its speed. The processor no longer has to wait for the memory access operations for the subsequent instruction opcode to complete. This architecture was prominently used in the Intel 8086 microprocessor.
Введение
Трубопроводы вышли на передний план в проектировании архитектуры вычислительных систем в 1960-х годах из-за потребности в более быстрых и эффективных вычислениях. Трубопроводность – это более широкое понятие, и большинство современных процессоров загружают свои инструкции за несколько тактов до их выполнения. Это достигается предварительной загрузкой машинного кода из памяти в очередь предварительной выборки (prefetch input queue). Такое поведение применимо только к компьютерам архитектуры фон Неймана (то есть, не к компьютерам архитектуры Гарварда), которые могут выполнять самомодифицирующийся код и имеют конвейерную обработку инструкций. Почти все современные высокопроизводительные компьютеры удовлетворяют этим трем требованиям. Обычно поведение очереди предварительной выборки (PIQ) невидимо для программной модели процессора. Однако существуют ситуации, когда поведение PIQ становится видимым и должно учитываться программистом. Когда процессор x86 переключается между реальным и защищенным режимами, очередь PIQ должна быть очищена, иначе процессор продолжит интерпретировать машинный код, как если бы он был написан в предыдущем режиме. Если PIQ не очищается, процессор может неправильно интерпретировать код и сгенерировать исключение недопустимой инструкции. При выполнении самомодифицирующегося кода изменение кода процессора непосредственно перед текущей точкой выполнения может не повлиять на то, как процессор интерпретирует код, поскольку он уже загружен в PIQ. Процессор просто выполнит старую копию, уже находящуюся в PIQ, вместо новой, измененной версии кода в оперативной памяти и/или кэше. Это поведение PIQ можно использовать для определения, выполняется ли код внутри эмулятора или непосредственно на аппаратном обеспечении реального процессора. Большинство эмуляторов, вероятно, никогда не будут моделировать такое поведение. Если размер PIQ равен нулю (изменения в коде всегда немедленно влияют на состояние процессора), можно сделать вывод, что код выполняется в эмуляторе или процессор аннулирует PIQ при записи по адресам, загруженным в PIQ.
Pipelining was brought to the forefront of computing architecture design during the 1960s due to the need for faster and more efficient computing. Pipelining is the broader concept and most modern processors load their instructions some clock cycles before they execute them. This is achieved by pre loading machine code from memory into a prefetch input queue. This behavior only applies to von Neumann computers (that is, not Harvard architecture computers) that can run self modifying code and have some sort of instruction pipelining. Nearly all modern high performance computers fulfill these three requirements. Usually, the prefetching behavior of the PIQ is invisible to the programming model of the CPU. However, there are some circumstances where the behavior of PIQ is visible, and needs to be taken into account by the programmer. When an x86 processor changes mode from real mode to protected mode and vice versa, the PIQ has to be flushed, or else the CPU will continue to translate the machine code as if it were written in its last mode. If the PIQ is not flushed, the processor might translate its codes wrong and generate an invalid instruction exception. When executing self modifying code, a change in the processor code immediately in front of the current location of execution might not change how the processor interprets the code, as it is already loaded into its PIQ. It simply executes its old copy already loaded in the PIQ instead of the new and altered version of the code in its RAM and/or cache. This behavior of the PIQ can be used to determine if code is being executed inside an emulator or directly on the hardware of a real CPU. Most emulators will probably never simulate this behavior. If the PIQ size is zero (changes in the code always affect the state of the processor immediately), it can be deduced that either the code is being executed in an emulator or the processor invalidates the PIQ upon writes to addresses loaded in the PIQ.
Очередь инструкций
Процессор выполняет программу, извлекая инструкции из памяти и выполняя их. Обычно скорость выполнения процессора значительно превышает скорость доступа к памяти. Инструкционная очередь используется для предварительной выборки следующих инструкций в отдельный буфер, пока процессор выполняет текущую инструкцию. При использовании четырехступенчатого конвейера скорость выполнения инструкций может быть увеличена в четыре раза по сравнению с последовательным выполнением. Процессор обычно имеет два отдельных устройства для выборки инструкций и для их выполнения. Реализация конвейерной архитектуры возможна только в том случае, если устройство интерфейса шины и устройство выполнения независимы. Пока устройство выполнения декодирует или выполняет инструкцию, не требующую использования шины данных и адреса, устройство интерфейса шины извлекает коды операций инструкций из памяти. Этот процесс значительно быстрее, чем отправка адреса, чтение кода операции, а затем его декодирование и выполнение. Предварительная выборка следующей инструкции во время декодирования или выполнения текущей инструкции называется конвейеризацией. Процессор 8086 имеет шестибайтовый конвейер предварительной выборки инструкций, в то время как 8088 – четырехбайтовый. Пока устройство выполнения выполняет текущую инструкцию, устройство интерфейса шины заранее считывает до шести (или четырех) байтов кодов операций из памяти. Длина очереди была выбрана на основе результатов моделирования. Исключение возникает, когда устройство выполнения встречает инструкцию перехода, то есть инструкцию безусловного или условного перехода (jump или call). В этом случае вся очередь должна быть очищена, и из памяти необходимо извлечь содержимое, на которое указывает указатель инструкции.
The processor executes a program by fetching the instructions from memory and executing them. Usually the processor execution speed is much faster than the memory access speed. Instruction queue is used to prefetch the next instructions in a separate buffer while the processor is executing the current instruction. With a four stage pipeline, the rate at which instructions are executed can be up to four times that of sequential execution. The processor usually has two separate units for fetching the instructions and for executing the instructions. The implementation of a pipeline architecture is possible only if the bus interface unit and the execution unit are independent. While the execution unit is decoding or executing an instruction which does not require the use of the data and address buses, the bus interface unit fetches instruction opcodes from the memory. This process is much faster than sending out an address, reading the opcode and then decoding and executing it. Fetching the next instruction while the current instruction is being decoded or executed is called pipelining. The 8086 processor has a six byte prefetch instruction pipeline, while the 8088 has a four byte prefetch. As the Execution Unit is executing the current instruction, the bus interface unit reads up to six (or four) bytes of opcodes in advance from the memory. The queue lengths were chosen based on simulation studies. An exception is encountered when the execution unit encounters a branch instruction i. e. either a jump or a call instruction. In this case, the entire queue must be dumped and the contents pointed to by the instruction pointer must be fetched from memory.
Недостатки
Процессоры, реализующие алгоритм предварительной выборки команд, достаточно сложны в техническом плане. Сложность разработки центрального процессора таких процессоров значительно выше, чем у обычных процессоров. Это в основном связано с необходимостью реализации двух отдельных блоков – БИУ и ЕС, работающих независимо друг от друга. По мере увеличения сложности этих чипов растет и их стоимость. Эти процессоры относительно дороже, чем их аналоги без очереди предварительной выборки. Однако эти недостатки в значительной степени компенсируются улучшением времени выполнения задач. После внедрения очереди предварительной выборки инструкций в процессор 8086, все последующие процессоры стали включать эту функцию.
Processors implementing the instruction queue prefetch algorithm are rather technically advanced. The CPU design level complexity of the such processors is much higher than for regular processors. This is primarily because of the need to implement two separate units, the BIU and EU, operating separately. As the complexity of these chips increases, the cost also increases. These processors are relatively costlier than their counterparts without the prefetch input queue. However, these disadvantages are greatly offset by the improvement in processor execution time. After the introduction of prefetch instruction queue in the 8086 processor, all successive processors have incorporated this feature.