Алгоритм работы процессора

Предыдущий пост темы здесь.

Как же он все-таки работает:

protsessorРассмотрим алгоритм работы современного процессора. Ради облегчения понимания мы значительно упростим схему и опишем лишь функции крупных блоков ЦП, не вдаваясь в технические детали.
 
1. Условно говоря, работа процессора начинается с запроса очередной команды. Блок выборки, зная, по какому адресу расположена команда, пытается найти ее в кэше L1. Не обнаружив ее там, он обращается к кэшу L2 (который больше по объему и хранит больше ранее запрошенных команд и данных), если и там ее нет – к еще более вместительному L3.

Если же искомая команда отсутствует и в кэше L3, она загружается через шину данных процессора из системной памяти, по пути попадая во все три кэша. Сходным образом запрашиваются и данные, требующиеся для выполнения этой команды.
 

protsessor22. Блок выборки передает команду в декодер. Этот узел нужен для того, чтобы разложить сложную команду системы команд x86 на несколько микроопераций, каждая из которых выполняется исполнительными устройствами за один такт.

Получившуюся последовательность микроопераций декодер помещает в кэш декодированных команд. Блоку выборки нужна следующая команда. Для того чтобы узнать, откуда брать следующую команду и данные для нее, задействуется блок предвыборки. Анализируя последовательность микроопераций, он определяет, какая команда понадобится далее.
 
3. Планировщик забирает из кэша декодированных команд несколько микроопераций и определяет, в какой последовательности их можно выполнять. Команды, результаты выполнения которых не зависят от результатов выполнения других команд, могут исполняться параллельно на разных исполнительных устройствах.

Таких устройств в ядре современного процессора немало: ALU для целых чисел, FPU для чисел с плавающей запятой, ALU для команд SSE и множество других.
 
4. На этом этапе возможно определение ошибки предвыборки. К примеру, если исполняемая операция является командой условного перехода (то есть результат зависел от содержимого одного из регистров), блок

Ещё по теме:   Компьютерные очки

предвыборки, не имея возможности узнать, каким будет значение регистра на момент исполнения команды, может ошибочно предположить, что переход осуществится (тогда как на самом деле его не должно быть), и предложит блоку выборки неверный адрес следующей команды.

То же касается предвыборки данных: если на момент исполнения команды загрузки или выгрузки данных значения регистров, содержащих адрес этих данных, будут иными, нежели в момент предвыборки, будет зафиксирована ошибка предвыборки, поскольку в кэш попали неверные данные.

В этом случае конвейер очищается, а блок выборки снова запрашивает команду, предшествующую моменту совершения ошибки.

Разумеется, очистка,  и повторное заполнение конвейера ведут к потере времени. И если при исполнении программы совершается множество ошибок предвыборки, производительность процессора заметно снижается. Тем не менее,  средняя эффективность предвыборки в современных ЦПУ достигает 90–95%.
 
5. Если команда на выходе с конвейера признана выполненной корректно (то есть ошибки предвыборки не было), ее результат помещается в кэш и далее попадает в системную память компьютера.

Источник: по материалам журнала ComputerBild

Сергей Сергеевич/ автор статьи

Уроженец города Архангельcка. Работал в Усть-Камчатске на Дальнем Востоке. В настоящее время проживаю в Архангельске. Увлекаюсь шахматами, математикой, компьютерами, книгами, садом и огородом. Об этом и другом пишу на этом сайте!

Понравилась статья? Поделиться с друзьями:
Оставьте свой комментарий