Опубликован: 10.10.2011 | Доступ: свободный | Студентов: 1427 / 453 | Оценка: 4.31 / 4.16 | Длительность: 05:32:00
Специальности: Программист
Лекция 1:

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

Лекция 1: 123 || Лекция 2 >

Приведу две схемы из 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 км/ч. А дальше вопрос стоит в выборе маршрута. Умный компилятор найдет места, где мы можем срезать путь и пойти более короткой дорогой. Формально, может случиться так, что процессор, который обеспечивает меньшую скорость, за счет компилятора данную задачу по перемещению из точки А в точку В выполнит быстрее.

Лекция 1: 123 || Лекция 2 >