Архитектура микропроцессора Intel и основные факторы, влияющие на его производительность

Описание архитектуры фон Неймана. Упрощенная модель процессора, анализ факторов, влияющих на его производительность. Объем адресуемой памяти. Сущность и понятие кэширования. Качество конвейеризации. Основные компоненты суперскалярного процессора.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 30.10.2011
Размер файла 35,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Архитектура микропроцессора Intel и основные факторы, влияющие на его производительность

Прототипом схемы служит отчасти описание архитектуры фон Неймана, которая имеет следующие принципы:

1. Принцип двоичности

2. Принцип программного управления

3. Принцип однородности памяти

4. Принцип адресуемости памяти

5. Принцип последовательного программного управления

6. Принцип условного перехода

Чтобы как бы легче было понять, что из себя представляет современная вычислительная система, надо рассматривать ее в развитии. Поэтому я здесь привел самую простую схему, которая приходит в голову. По сути дела, эта упрощенная модель. У нас существует некое устройство управления внутри процессора, арифметико-логическое устройство, системные регистры, системная шина, которая позволяет вести обмен между устройством управления и другими устройствами, память и периферийные устройства. Устройство управления получает инструкции, делает их дешифрацию, управляет арифметически-логическим устройством, осуществляет пересылку данных между регистрами процессора, памятью, периферийными устройствами.

Упрощенная модель процессора

· устройство управления (Control Unit, CU)

· арифметико-логическое устройство (Arithmetic and Logic Unit, ALU)

· системные регистры

· системная шина (Front Side Bus, FSB)

· памятьпериферийные устройства

Устройство управления (CU):

· выполняет дешифрацию инструкций, поступающих из памяти компьютера.

· управляет ALU.

· осуществляет пересылку данных между регистрами ЦП, памятью, периферийными устройствами.

Арифметико-логическое устройство:

· позволяет производить арифметические и логические операции над системными регистрами.

Системные регистры:

· определенный участок памяти внутри ЦП, используемый для промежуточного хранения информации, обрабатываемой процессором.

Системная шина:

· используется для пересылки данных между ЦП и памятью, а также между ЦП и периферийными устройствами.

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

Высокая производительность МП -один из ключевых факторов в конкурентной борьбе производителей процессоров.

Производительность процессора напрямую связана с количеством работы, вычислений, которые он может выполнить за единицу времени.

Очень условно:

Производительность = Кол-во инструкций / Время

Мы будем рассматривать производительность процессоров на базе IA32 и IA32e архитектур. (IA32 with EM64T).

Факторы влияющие на производительность процессора:

· Тактовая частота процессора.

· Объем адресуемой памяти и скорость доступа к внешней памяти.

· Скорость выполнения и набор инструкций.

· Использование внутренней памяти, регистров.

· Качество конвейеризации.

· Качество предсказания переходов.

· Качество упреждающей выборки.

· Суперскалярность.

· Наличие векторных инструкций.

· Многоядерность.

Что такое производительность? Сложно дать однозначное определение производительности. Можно формально привязать его к процессору - сколько, инструкций за единицу времени может выполнять тот или иной процессор. Но проще дать сравнительное определение - взять два процессора и тот, который выполняет некий набор инструкций быстрее, тот более производительный. То есть, очень условно, можно сказать, что производительность - это количество инструкций на время выполнения. Мы здесь в основном будем исследовать те микропроцессорные архитектуры, которые выпускает Intel, то есть архитектуры IA32, которые сейчас называются Intel 64. Это архитектуры, которые с одной стороны поддерживает старые инструкции из набора IA32, с другой стороны имеют EM64T - это некое расширение, которое позволяет использовать 64 битные адреса, т.е. адресовать большие размеры памяти , а также включает в себя какие-то полезные дополнения, типа увеличенного количества системных регистров, увеличенное количество векторных регистров.

Какие факторы влияют на производительность? Перечислим все, которые приходят в голову. Это:

· Скорость выполнение инструкций, полнота базового набора инструкций.

· Использование внутренней памяти регистров.

· Качество конвейеризации.

· Качество предсказания переходов.

· Качество упреждающей выборки.

· Суперскалярность.

· Векторизация, использование векторных инструкций.

· Параллелизация и многоядерность.

Тактовая частота

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

Объем адресуемой памяти

8086 - 1МБ.

80286 - 16МБ (новые системные регистры и новый режим работы с памятью).

80386 - 4ГБ (первый 32-битный процессор технология EM64T - ~264Б)

Тактовая частота.

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

Объем адресуемой памяти и скорость доступа к памяти.

Объем памяти - необходимо, чтобы памяти хватало для нашей программы и наших данных. То есть, технология EM64T позволяет адресовать огромное количество памяти и на данный момент вопрос с тем, что нам не хватает адресуемой памяти не стоит.

Поскольку на эти факторы разработчики в общем случае не имеют возможности влиять, то я только упоминаю о них.

Скорость выполнения и набор инструкций

Производительность зависит от того, насколько качественно реализованы инструкции, насколько полно базовый набор инструкций покрывает все возможные задачи.

CISC,RISC (complex, reduced instruction set computing)

Современные процессоры Intel® представляют собой гибрид CISC и RISC процессоров, перед исполнением преобразуют CISC инструкции в более простой набор RISC инструкций.

Скорость выполнения инструкций и полнота базового набора инструкций.

По сути дела, когда архитекторы проектируют процессоры, они постоянно работают с целью улучшить его производительность. Одной из их задач является сбор статистики, для определения , какие инструкции или последовательности инструкций являются ключевыми с точки зрения производительности. Пытаясь улучшить производительность, архитекторы пытаются самые горячие инструкции сделать быстрее, для каких-то наборов инструкций сделать специальную инструкцию, которая заменит этот набор и будет работать эффективнее. От архитектуры к архитектуре изменяются характеристики инструкций, появляются новые инструкции, которые позволяют добиться лучшей производительности. Т.е. можно считать что от архитектуры к архитектуре базовый набор инструкций постоянно совершенствуется и расширяется. Но если вы не указываете на каких архитектурах будет выполняться ваша программа, то в вашем приложении будет задействован некий умолчательный набор инструкций, который поддерживают все последние микропроцессоры. Т.е. наилучшей производительности мы можем добиться только если будем четко специфицировать тот микропроцессор, на котором будет выполняться задача.

Использование регистров и оперативной памяти

Время доступа к регистрам наименьшее, поэтому кол-во доступных регистров влияет на производительность микропроцессора.

Вытеснение регистров (register spilling) - из-за недостаточного кол-ва регистров велик обмен между регистрами и стеком приложения.

Ia32

Технология EM64T - добавлены дополнительные системные регистры

С ростом производительности процессоров возникла проблема, связанная с тем, что скорость доступа к внешней памяти стала ниже скорости вычислений.

Существуют две характеристики для описания свойств памяти:

· Время отклика (latency) - число циклов процессора необходимых для передачи единицы данных из памяти.

· Пропускная способность (bandwidth) - количество элементов данных которые могут быть отправлены процессору из памяти за один цикл.

Две возможные стратегии для ускорения быстродействия- уменьшение времени отклика или упреждающий запрос нужной памяти.

Использование регистров и оперативной памяти.

Регистры - самые быстрые элементы памяти, они находятся непосредственно на ядре, и доступ к ним практически мгновенный. Если ваша программа делает какие-то вычисления, хотелось бы, чтобы все промежуточные данные хранились на регистрах. Понятно, что это невозможно. Одна из возможных проблем производительности- это проблема вытеснения регистров. Когда вы под каким-нибудь анализатором производительности смотрите на ассемблерный код, вы видите, что у вас очень много движения со стека в регистры и обратно выгрузка регистров на стек. Стоит вопрос - как оптимизировать код так, чтобы самые горячие адреса, самые горячие промежуточные данные, лежали именно на системных регистрах.

Следующая часть памяти - это обычная оперативная память. С ростом производительности процессоров стало ясно, что самым узким местом производительности является доступ к оперативной памяти. Для того, чтобы добраться до оперативной памяти, нужны сотня, а то и две сотни тактов процессора. То есть, запросив какую-то ячейку памяти в оперативной памяти, мы будем ждать двести тактов, а процессор будет простаивать.

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

Кэширование

Кэш-память служит для уменьшения времени доступа к данным.

Для этого блоки оперативной памяти отображаются в более быструю кэш-память.

Если адрес памяти находится в кэше - происходит "попадание" и скорость получения данных значительно увеличивается.

В противном случае - "промах" (cash miss)

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

Можно выделить следующие виды кэш-памяти:

· полностью ассоциативная кэш-память (каждый блок может отображаться в любое место кэша)

· память с прямым отображением (каждый блок может отображаться в одно место)

· гибридные варианты (секторная память, память с множественно-ассоциативным доступом)

Множественно-ассоциативный доступ - по младшим разрядам определяется строка кэша, куда может отображаться данная память, но в этой строке может находиться только несколько слов основной памяти, выбор из которых проводится на ассоциативной основе.

Качество использования кэша - ключевое условие быстродействия.

Дополнительная информация: в современных IA32 системах размер кэш-линии 64 байта.

Уменьшение времени доступа было достигнуто введением кэш-памяти. Кэш-память - это память, находящаяся между оперативной памятью и микропроцессором. Она реализована на ядре, то есть доступ к ней гораздо быстрее чем к обычной памяти, но она намного дороже, поэтому приразработке микроархитектуры нужно найти точный баланс между ценой и производительностью. Если вы посмотрите на описания предлагаемых в продаже процессоров, вы увидите, что всегда в описании пишется, сколько кэша памяти того или иного уровня на данном процессоре есть. Эта цифра серьезно влияет на цену данного изделия. Кэш-память устроена так, что обычная память отображается на кэш-память, отображение идет блоками. Вы, запрашивая в оперативной памяти какой-то адрес, делаете проверку, отображен ли этот адрес в кэш-памяти. Если этот адрес уже есть в кэш-памяти, то вы экономите время на обращение к памяти. Вы считываете эту информацию из быстрой памяти, и у вас время отклика существенно уменьшается, если же этого адреса в кэш-памяти нет, то мы должны обратиться к обычной памяти, чтобы этот необходимый нам адрес вместе с каким-то блоком, в котором он находится, отобразился в эту кэш-память.

Существуют разные реализации кэш-памяти. Бывает полностью ассоциативная кэш-память, когда каждый блок может отображаться в любое место кэша. Существует память с прямым отображением, когда каждый блок может отображаться в одно место, также существуют различные гибридные варианты - например кэш с множественно-ассоциативным доступом. В чем разница? Разница во времени и сложности проверки на наличие нужного адреса в кэш-памяти. Предположим, что нам нужен определенный адрес. В случае с ассоциативной памятью нам нужно проверить весь кэш - убедиться, что этого адреса в кэше нет. В случае с прямым отображением нам нужно проверить только одну ячейку. В случае с гибридными вариантами, например, когда используется кэш с множественно-ассоциативным доступом, нам нужно проверить, к примеру, четыре или восемь ячеек. То есть, задача определить есть ли адрес в кэша - тоже важна. Качество использования кэша - важное условие быстродействия. Если нам удастся написать программу так, чтобы как можно чаще те данные, с которыми мы собирались работать, находились в кэше, то такая программа будет работать гораздо быстрее.

Характерные времена отклика при обращении к кэш памяти для Nehalem i7:

· L1 - latency 4

· L2 - latency 11

· L3 - latency 38

Время отклика для оперативной памяти > 100

Упреждающий механизм доступа к памяти реализован при помощи механизма упреждающей выборки (hardware prefetching).

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

Для примера возьмем наш последний процессор Nehalem: i7.

Здесь мы имеем не просто кэш, а некий иерархический кэш. Долгое время он был двухуровневый, в современной системе Nehalem он трехуровневый - совсем немного очень быстрого кэша, чуть побольше кэша второго уровня и достаточно большое количество кэша третьего уровня. При этом, эта система построена так, что если какой-то адрес находится в кэше первого уровня, он автоматически находится во втором и в третьем уровнях. Это и есть иерархическая система. Для кэша первого уровня задержка - 4 такта, для второго - 11, третьего - 38 и время отклика оперативной памяти - больше 100 тактов процессора.

Принцип локальности. Качество упреждающей выборки.

Локальность ссылки (locality of reference) - повторное использование переменных или взаимосвязанных данных. Различают временную локальность (temporal locality) - когда речь идет об одних и тех же данных и пространственную локальность (spatial locality) - использование различных данных, имеющих относительно близкие области хранения.

Механизм кэширования использует принцип временной локальности. (Стремится сохранять в кэше наиболее часто используемые данные).

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

Кэш aliasing - из-за неудачного расположения в памяти различных объектов, участвующих в вычислении, происходит вытеснению из кэш памяти одних адресов другими.

Второй вариант улучшения быстродействия и работы с памятью, про который мы упомянули - это подкладывать в кэш заранее необходимые адреса - упреждающий механизм доступа к памяти (Hardware Prefetching). Этот механизм выявляет закономерности, с которыми вы обращаетесь к памяти, и заранее закачивает в кэш адреса, которые могут вам понадобиться. Если вы обрабатываете несколько массивов, движетесь по ним последовательно или с каким-то постоянным шагом, то, скорее всего, этот механизм начнет эти адреса заранее подгружать. Есть специальный набор инструкций, позволяющий загрузить в кэш память, расположенную по определенному адресу. (Software Prefetching)

Кэш имеет внутренние алгоритмы работы. Введем несколько понятий.

Локальность ссылки - переиспользование переменных или взаимосвязанных данных. Различают временную локальность - переиспользование определенных данных и ресурсов и пространственную локальность - использование данных, имеющих относительно близкие области хранения.

Механизм кэширования использует механизм временной локальности. Он пытается отследить те адреса, которые чаще всего используются, и сохранять их в кэше, а те, которые больше не используются - из кэша удалять. То есть каждый раз, когда вы запрашиваете из памяти какой-то новый адрес, механизм кэширования оценивает, какие блоки у него есть, какой из имеющихся у него блоков давно не использовался, и удаляет этот блок, заменяя его на новый. Этот механизм пытается сохранять только те данные, с которыми ведется активная работа.

Механизм упреждающей выборки использует принцип пространственной локальности, то есть подгружает соседние элементы.

При работе механизма кэширования могут происходить неприятные моменты. Например, вы работаете с двумя массивами, но они расположены в памяти так, что беря адреса одного массива, которые вам нужны, вы вытесняете из кэша адреса другого массива, которые будут вам нужны. Формально, ничего не мешает расположить эти массивы в памяти по-другому и избежать этой проблемы.

Конвейер

Обычно подобную картинку приводят, чтобы иллюстрировать работу конвейера.

Качество конвейеризации, уровень параллелизма инструкций

Конвейеризация предполагает, что последовательные инструкции будут перекрываться при выполнении.

Выполнение типичной команды можно разделить на следующие этапы:

· выборка команды - IF;

· декодирование команды / выборка операндов из регистров - ID;

· выполнение операции / вычисление эффективного адреса памяти - EX;

· обращение к памяти - MEM;

· запоминание результата - WB.

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

Качество конвейеризации.

Было время, когда процессор выполнял одновременно одну инструкцию. После введения конвейеризации процесс обработки инструкции разбит на несколько этапов. Один из вариантов, который широко используется, приведен:

выборка команды;

декодирования команды;

выполнение операции;

обращение к памяти;

запоминание результатов.

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

Качество предсказания переходов

Инструкции могут быть зависимыми по данным и по управляющей логике программы. (Data dependence and control flow dependence).

Эффективность суперскалярных и конвейерных механизмов во многом ограничивается различными условными переходами внутри программы.

Существует специальный механизм предсказания переходов (branch prediction).

МПП выбирает один из возможных путей и продолжает выбирать инструкции и нагружать конвейеры МП работой. В момент, когда условие перехода вычислено, определяется, не ошибся ли предсказатель.

Ошибка предсказателя (branch misprediction) - все уже выполненные или еще находящиеся в обработке инструкции удаляются, и МП заново заполняет конвейеры.

Можно выделить статический и динамический предсказатель.

Динамический предсказатель отличается тем, что собирает статистику на каждое ветвление и делает предсказание на основании собранной статистики.

Тривиальное предсказание - переход не будет выполнен в случае если осуществляется переход вперед и будет выполнен - если происходит переход назад.

Существует также механизм предсказания цели ветвления (branch target prediction), который предсказывает безусловные переходы.

Качество предсказания переходов.

В программе есть некая управляющая логика, и эта логика включает в себя различные переходы внутри кода. Если встречаются if'ы и на основании вычисления какого-то условия принимается решение, какую выполнять инструкцию дальше? Как быть с загрузкой конвейера, в случае если встречается зависимость по управляющей логике? Можно остановить конвейер и ждать, пока вычислится условие перехода и после этого определить, какую инструкцию выполнять дальше и загружать ее на конвейер. Понятно, что в этом случае произойдет замедление работы конвейера, поэтому выбран другой метод. Процессор пытается предсказать по какому-то пути будет передаваться управление и продолжает выполнять инструкции с этого направления. Причем пока процессор не убедится, что выполняются правильные инструкции, они недействительны . Как только процессор убеждается, что путь угадан верно, все инструкции признаются правильными. Если предсказатель ошибся и реальное управление пошло по другому пути, недействительные инструкции удаляются из буферов, где они ожидали своей судьбы. Это приводит к некой задержке, приходится тратить время на то, чтобы инструкции удалять и загружать правильные инструкции на конвейер. Ошибка предсказателя (branch misprediction) вызывает замедление работы конвейера.

В процессоре есть статический и динамический предсказатель.

Статический предсказатель действует по простым правилам и принимает решения для тех переходов для которых нет собранной статистики.

Если встречается условный переход вперед, то статический предсказатель считает, что перехода не будет (в случае с оператором if управление пойдет по ветке if а не else).

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

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

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

Одна из целей vtun'а -- это определение таких событий, как неверное угадывание перехода, например. Вы можете этим устройством проанализировать ваше приложение и увидеть, что в определенном месте вашего кода есть плохо предсказуемый переход или цепочка переходов влияющих на производительность. Зачастую такие проблемы могут быть решены творческим модифицированием кода.

Существуют разные проблемы. Проблема с КЭШем, например. Если у вас идет неугадывание по КЭШу, и вы не можете вовремя получить из памяти какие-то адреса, то эта проблема заслонит ту проблему, что вы не можете правильно определить цель ветвления, потому что процессор будет простаивать много времени по другой причине.

Суперскалярность процессор кэширование конвейеризация

Суперскалярный процессор - процессор, способный выполнять несколько операций за один такт.

Как следствие, для такого типа процессора обязательно наличие нескольких исполнительных блоков (execution unit).

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

Pentium - первый суперскалярный процессор архитектуры x86.

Выигрыш от суперскалярности определяется уровнем параллелизма инструкций.

"Разнообразие" поступающих на конвейер инструкций позволяет более полно нагружать исполняемые устройства.

Суперскалярность.

Теперь обсудим суперскалярность. Мы рассуждали о командном управляющем устройстве и об арифметически-логических устройствах. Суперскалярность -- это процессор, который имеет несколько исполняющих устройств, то есть одновременно он может выполнять несколько арифметических и логических операций. Мы обсуждали конвейер, где обрабатывались инструкции, и была часть конвейера, которая выполняла операцию и называлась "исполняющее устройство", где непосредственно делалась основная работа, для которой эта инструкция была написана. Суперскалярность означает, что построен конвейер имеющий несколько исполняющих устройств и одновременно может исполняться несколько различных команд. Исполняющие устройства специфицированы, они не могут исполнить любую инструкцию, у них у каждого своя должность (один выполняет одни виды команд, другой - другие и так далее). То есть у нас появилась возможность выполнять одновременно несколько инструкций на этих исполняющих устройствах. Например до 6 инструкций на микропроцессорах семейства IA32 последних моделей.

Первым суперскалярным процессором интеловской архитектуры был Pentium, и в нем было реализовано исполняемое устройство U и исполняемое устройство V. Одно умело делать все операции, а второе -- самые простенькие, например, инкрементирование.

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

Упрощенная модель процессора

Теперь мы берем и изменяем несколько упроценную модель нашего микропроцессора, чтобы счематично отобразить на ней те свойства, которые мы только что обсуждали. На системной шине работает упреждающая выборка, которая из памяти подгружает данные в систему КЭШа, базируясь на логике железного предсказателя. Отображаем систему КЭШей. В микропроцессоре будет работать конвейер и предсказатель переходов, то есть управляющее устройство будет брать не только те инструкции, которые оно в данный момент собирается выполнять, а также те, которые ему рекомендует брать предсказатель переходов (чтобы конвейер более плотно нагружать). Регистров увеличенное количество, ну и суперскалярность, которую мы можем отобразить как наличие нескольких вычислительно-логических устройств.

Использование векторных инструкций, векторизация

Типичная векторная инструкция выполняет элементарную операцию над двумя векторными последовательностями в памяти или векторными регистрами фиксированной длины.

Векторизация - процесс конвертации компьютерной программы из скалярного представления, в котором одна операция выполняется над парой операндов, в векторное представление, в котором одна операция выполняется над парой векторных операндов.

В Pentium III новая технология SSE (Streaming SIMD Extensions), которая добавила в МП 8 128 битных регистра (XMM0-XMM7) и 70 новых инструкций в том числе для работы с вещественными числами. SSE2,SSE3,SSEE3,SSE4,SSE4.2,AVX - последующие расширения этой идеи.

Конвейеризация, суперскалярность -- это некие варианты параллелизации. Они несколько разные по их специфике, но в целом приводят к тому, что мы одновременно работаем с несколькими инструкциями.

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

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

Процессор поддерживает разные наборы векторных инструкций: SSE2, SSE3 и так далее. Обсуждая полноту набора инструкций мы уже затронули вопрос, что приложение будет работать оптимальнее на архитектуре, если при создании приложения вы будете специально создавать его для работы на данной архитектуре. Это верно и в случае с векторными инструкциями.

Опережающий просмотр потока инструкций

Для того, чтобы эффективно использовать несколько АЛУ и конвейер, современные микропроцессоры используют опережающий просмотр потока инструкций. Это позволяет определить те инструкции, которые могут вычисляться параллельно.

Также возможно исполнение с изменением последовательности операций (out-of-order execution).

Но технологии опережающего просмотра инструкций (lookahead) не могут решить проблему простоя АЛУ и конвейера в случае низкого уровня инструкционного параллелизма.

Out-of-order execution - одно из определяющих свойств архитектуры x86. Реализация этого механизма усложняет процессор. В качестве противоположного примера от Интел можно упомянуть архитектуры Itanium и Atom. На этих архитектурах инструкции выполняются в порядке, заданном приложением.

Ранее я описал некоторые особенности характерные для работы конвейера микропроцессора. Можно считать, что перед загрузкой инструкций на конвейер, они ожидают в неком буфере. И есть процессорные механизмы для того, чтобы подходящие инструкции выбирать и посылать на выполнение. То есть существуют процессорные механизмы для опережающего просмотра потока инструкций и определения тех инструкций, которые в данный момент выгодно загружать на конвейер. И вот если в этом буфере есть возможность выбрать много независимых инструкций -- это позволяет более полно загрузить конвейер. А если в буфере много зависимых инструкций, то этот механизм может не справится и будут случаи когда конвейер частично будет простаивать.

Т.е. в микроархитектурах семейства IA32 реализовано исполнение с изменением последовательности операций (out-of-order-execution). То есть программисты написали какие-то инструкции, подали их на процессор, а он сам выбрал, в каком порядке их выполнять. В данном случае важная часть работы - планирование инструкций выполняется непосредственно микропроцессором.

Это не единственный возможный вариант работы микропроцессора. Есть микропроцессор Intel Atom, предназначенный для различных планшетных устройств, который последовательно выполняет получаемые микроинструкции, или например, процессор Itenium, в котором в процессор поступают инструкции уже объединенные в группы. То есть работа по определению того, какие инструкции независимы и в каком порядке их подавать процессору переложена на компилятор. В этом случае работа по определению оптимального порядка инструкций выполняется один раз -- во время компиляции. Это должно быть выгодно с точки зрения энергопотребления.

Если кто-то хочет более подробно с этим все ознакомиться, я отсылаю к инструкциям, к документации от Интел. Вы можете скачать документацию и после этого сидеть и перед сном ее почитывать. Документация содержит много схем, объясняющих более подробно работу микропроцессора и взаимодействия между различными компонентами процессора. Пример, который показывает спецификацию исполняемых устройств. То есть существует внутри конвейера некий распределитель, который поступающие инструкции распределяет на то или иное подходящее исполняющее устройство.

Приведу две схемы из Intel® 64 and IA-32 Architectures Software Developer's Manual. Они дают примерное представление о архитектуре процессора.

Из этой схемы видно, что FE микропроцессора (пред)выбирает инструкции из памяти и декодирует их в микроинструкции. Эти микроинструкции заполняют Trace Cache. Из Trace Cache микроинструкции передаются для выподнения в Execution Out-Of-Order Core. После выполнения микроинструкции дожидаются решения о своей валидности в Retirement секции.

Параллельные вычисления

· Многозадачность.

· Многопоточность.

· Гиперпоточность (Hyper-threading Pentium 4 - Core i7)

· Многоядерность

· Многопроцессорные решения

Наличие нескольких вычислительных ядер дает возможность достижения высокой производительности приложения распределением вычислений между этими вычислительными ядрами.

На ранних компьютерах, когда какая-либо задача требовала доступа к периферийным устройствам, МП вынужден был простаивать, ожидая пока периферийное устройство обработает данные. Поэтому возникла простая идея: на время этого ожидания сохранить контекст программы и начать исполнять другую задачу. Возникла концепция многозадачных операционных систем. Были продуманы и реализованы разные подходы к решению этой проблемы. Как правило многозадачные системы реализовывают и многопоточность, т.е. одна задача может выполняться более чем в одном потоке, что позволяет вынести работу с периферийными устройствами в отдельный поток.

Переключение контекста.

Технология гиперпоточности Hyper-threading.

Возможность смешивать и одновременно выполнять на процессоре инструкции от двух потоков. Впервые реализована в процессоре Пентиум. Процессор с включенным гиперсредингом распознается системой, как два разных процессора. Это "смешивание" позволяет улучшить параллелизм инструкций, поступающих на выполнение.

Многоядерные МП (multi-core). Это процессор, который содержит несколько ядер (более или менее независимых процессоров) в одном пакете. Эти ядра содержат всю функциональность обычного процессора, но совместно используют системную шину и кэши.

Одновременно выполняющиеся потоки конкурируют за ресурсы микропроцессора.

Для увеличения производительности используются многопроцессорные решения. Современные системы имеют по паре двух, а то и четырехядерных МП.

Ну и последняя возможность существенно повлиять на производительность -- это параллелизация и многоядерность. Вы представляете, что все современные вычислительные системы, как правило, реализуют многозадачность и многопоточность. Многозадачность -- это когда одновременно могут выполняться несколько задач, многопоточность -- когда одна задача может работать в несколько потоков, то есть одновременно делать несколько разных дел.

Есть еще такая технология Hyper-threading, которая когда-то появлялась и теперь возродилась. Это означает, что существует один конвейер, на которые, тем не менее, поступают инструкции двух разных задач, что позволяет иметь больше независимых инструкций в буфере конвейера и более плотно нагрузить этот конвейер. Операционная система в этом случае видит два виртуальных ядра.

Многоядерность -- это когда в нашем процессоре несколько ядер. По аналогии с промышленным предприятием мы имеем два цеха с конвейером по сборке машин вместо одного , но при этом железнодорожная станция, на которую приходят компоненты и которая осуществляет отправку готовой продукции формально одна.

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

Основные характеристики приложения, влияющие на его производительность

· Эффективность вычислений

· Эффективность работы с памятью

· Правильное предсказание переходов

· Эффективность использования векторных инструкций

· Эффективность параллелизации

· Уровень инструкционного параллелилизма

Теперь плавно переходя от факторов влияющих на производительность процессора к факторам влияющим на производительность приложения сформулируем какие характеристики приложения влияют на его производительность.

Основные характеристики приложения, влияющие на его производительность:

Эффективность вычислений

Эффективность работы с памятью

Правильное предсказание переходов

Эффективность использования векторных инструкций

Эффективность параллелизации

Уровень инструкционного параллелизма.

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

Правильное предсказание переходов. Мы можем повлиять на этот фактор, удалив лишние переходы, правильно if'ы и else'ы расставить, чтобы у нас статический предсказатель реже ошибался.

Уровень инструкционного параллелизма -- если в приложении существуют какие-то взаимосвязанные цепочки вычислений, то такой код трудно выполнить оптимальным образом из-за наличия большого количества зависимых вычислений. Иногда можно менять порядок вычислений и влиять на этот фактор.

Измерение производительности

От каких факторов зависит производительность конкретной программы?

· качество работы оптимизирующего компилятора

· работа МП

Потребителям необходимы критерии определения производительности вычислительной системы

· Репрезентативная выборка типичных задач

· Универсальная схема тестирования

· Независимость от производителей МП

Spec.org (Standart Performance Evaluated Corporation) - некоммерческая организация для подготовки, поддержки и сопровождения стандартного набора тестов для сравнения производительности различных вычислительных систем. Эта организация разрабатывает стандартные пакеты и публикует результаты измерений.

CPU2006 - разработана для измерения производительности. Может быть использована для сравнения работы программ, выполняемых на различных вычислительных системах. CINT2006 для целочисленных вычислений. CFP2006 для сравнения производительности работы с вещественными числами.

OMP2001 - измеряет производительность на тестах с использованием OpenMP (это библиотека для параллельных вычислений с общей памятью (shared-memory parallel processing)).

Место и роль компилятора.

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

Играет ли компилятор какую-либо роль в борьбе за производительность МП?

· Компилятор используется во время тестирования и отладки функциональности новых МП.

· Только с помощью компилятора можно показать рост производительности МП связанный с новыми командами, увеличением количества регистров и т.п.

· Компилятор способен скрыть неудачи архитекторов.

Измерение производительности - довольно сложная тема. Как вы должны были догадаться из предыдущих рассуждений производительность зависит от двух факторов: от непосредственной качественной работы микропроцессора (МП) и от качества работы оптимизирующего компилятора. То есть качество работы оптимизирующего компилятора влияет непосредственно на результаты измерения производительности. Есть специальная организация - Standard Performance Evaluated Corporation -- некоммерческая организация, которая делает аудиторскую независимую оценку производительности разных вычислительных систем. Она занимается сбором типичных задач, предоставляет своим пользователям некую универсальную систему тестирования и гарантирует независимое мнение о производительности микропроцессоров.

Соответственно, если вас интересует вопрос о производительности, вы можете зайти на сайт этой организации, заплатить небольшие деньги и скачать оттуда пакет для измерения производительности, получить доступ к двум различным вычислительным системам, взять этот пакет, инсталлировать его. Пакет позволяет построить и прогнать специальные программы, получить цифры и сказать: "с использованием представительной выборки задач из сюиты такой-то мы получили результат, что вот эта система в таких-то задачах эту систему превосходит, а на таких задачах немного проигрывает". В мире существуют аналитики, которые на этом зарабатывают деньги. Перед публикацией в научных компьютерных журналах своих отчетов, они используют этот пакет. Есть различные пакеты CPU2006, OMP2001 и так далее для тестирования различных аспектов производительности. Поскольку производительность зависит от микропроцессора и от компилятора, то компилятор -- это важная часть в борьбе за признание высокой производительностей изделий. Если появляется новый микропроцессор, которые реализует какие-то новые команды, трудно показать улучшение его производительности из-за этих команд если не будет компилятора способного использовать эти команды в исполняемой программе. Другой фактор влияния компилятора на производительность связан с тем, что если в процессе эксплуатации процессора обнаружены какие-то инструкции, которые на процессоре почему-либо выполняются медленно, то с помощью компилятора мы можем каким-то образом заменить плохие инструкции на хорошие. Компилятор также активно используется при тестировании и разработке новых архитектур.

Т.е. с точки зрения разработки и продвижения процессоров компилятор очень важный инструмент.

Можно провести некую аналогию на использование компилятора. Например, выполнение какой-то расчетной задачи мы можем сравнить с прохождением человеком некоего маршрута по пересеченной местности из точки А в точку В. Примерную схему маршрута и контрольные точки определил разработчик, написавший алгоритм и запрашивающий результаты рассчетов. Процессор в данном случае будет отвечать за физические кондиции того человека, который пойдет через лес. То есть он может быть очень сильный и может идти по ровной местности со скоростью 6 км/ч. Другой процессор может идти со скоростью 5 км/ч. А дальше вопрос стоит в выборе маршрута. Умный компилятор найдет места, где мы можем срезать путь и пойти более короткой дорогой. Формально, может случиться так, что процессор, который обеспечивает меньшую скорость, за счет компилятора данную задачу по перемещению из точки А в точку В выполнит быстрее.

Размещено на Allbest.ru


Подобные документы

  • Назначение, основные функции процессора, его конвейерная архитектура (pipelining) и технология изготовления. Отличительные особенности архитектуры фон Неймана. Характеристика основных видов процессоров. Структура и функционирование микропроцессоров.

    курсовая работа [142,6 K], добавлен 07.05.2010

  • Функциональная схема микропроцессора Intel 8086 (i8086). Формирование физического адреса памяти, выборка команд из памяти и запись их в очередь команд. Система команд процессора. Суть защищенного режима, переход из защищенного режима в реальный режим.

    практическая работа [93,3 K], добавлен 24.03.2013

  • Описание конфигурации компьютера, предназначенного для игр. Ознакомление с характеристиками процессора Intel core 2 Quad. Тестирование уменьшения объема кэш-памяти второго уровня. Анализ видеокарты ASUS Radeon HD 7850 DirectCU II, материнской платы.

    курсовая работа [3,6 M], добавлен 04.01.2016

  • Распараллеливание операций, кэширование памяти и расширение системы команд как способы совершенствования архитектуры и роста производительности компьютеров. Внутренняя структура конвейера центрального процессора Pentium i486. Корпус и колодки ЦП Intel.

    презентация [281,2 K], добавлен 27.08.2013

  • Описание архитектуры внешних выводов кристалла процессора. Рассмотрение форматов данных для целых чисел со знаком и без знака. Выбор модели памяти и структуры регистровой памяти. Использование кэш прямого отображения. Арифметические и логические команды.

    курсовая работа [890,5 K], добавлен 05.06.2015

  • Основные характеристики процессора: быстродействие, тактовая частота, разрядность, кэш. Параметры материнской платы. Исследование архитектуры домашнего компьютера. Соотношение частоты памяти и системной шины в смартфоне, количество слотов памяти.

    лабораторная работа [1,1 M], добавлен 26.12.2016

  • Рост производительности и снижение потребляемой мощности процессора. Упрощенная-схема процессора BF535. Поддержка моделей памяти. Стандарты коммуникационных протоколов. Системные регистры процессора. Регистровый файл данных. Шины связи регистрового файла.

    презентация [6,3 M], добавлен 14.12.2013

  • Структура процессора Pentium, суперскалярность, основные особенности архитектуры. Организация конвейера команд, правила объединения. Дополнительные режимы работы процессора. Источники аппаратных прерываний. Формат ММХ команды. Процессор Pentium 4, схемы.

    лекция [4,0 M], добавлен 14.12.2013

  • Анализ материнской платы Intel D815EEA, установка процессора. Хаб Графики и Памяти 82815E – GMCH, Южный мост. Описание программного Хаба 82802AB, слотов PCI и CNR, слотов памяти. Опциональные звуковые чипы. Цифровой видеовыход Digital Video Out.

    лабораторная работа [571,2 K], добавлен 11.05.2010

  • Управление взаимодействием всех устройств ЭВМ. История создания и развития производства процессора. Структура центрального процессора. Регистры общего назначения. Обозначения популярных моделей процессоров Intel и AMD. Команды центрального процессора.

    реферат [111,2 K], добавлен 25.02.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.