Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Снятие зависимости данных



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

1) запись после чтения: первая команда читает данные из регистра или памяти, вторая - ищет в этот же регистр или ячейку памяти. Очевидно, что, прежде чем производить запись, необходимо дождаться, пока будет выполнено чтение;

2) чтение после записи: обратная ситуация, когда до операции чтения необходимо дождаться выполнения записи.

Существует несколько методов уменьшения влияния зависимости данных на производительность. Это переименование регистров (register renaming), одновременное использование одних данных в обоих конвейерах (data forwarding) и запоминание промежуточных результатов для дальнейшего использования (data bypassing). Сразу отметим, что данные методы реализованы в разных процессорах по-разному, а в некоторых не применены совсем.

Одновременное использование данных и сохранение промежуточных результатов

Полное снятие зависимости второго типа невозможно, можно только уменьшить "простаивание" второго конвейера. Первый метод - одновременное использование данных (data forwarding). Например, если первая инструкция выполняет какую-либо операцию, читая данные из памяти или регистра, а вторая использует эти данные, то процессор выполняет операцию чтения и результат посылает одновременно на оба конвейера (operad forwarding). Возможна и другая ситуация: первая инструкция выполняет операцию, результат которой записывается в память или регистр, после чего этот результат используется второй командой также для записи куда-либо. В этом случае полученный результат используется одновременно в двух конвейерах (result forwarding). Кроме этих методов снятия зависимости данных, существует еще один - запоминание промежуточного результата для дальнейшего использования (data bypassing). Если первая инструкция сохраняет результат в памяти, а вторая использует эту же ячейку памяти, то результат передается сразу на второй конвейер, что позволяет избежать операции чтения из памяти. Таким образом, путем комбинации описанных выше методов при возникновении зависимости данных вынужденное простаивание конвейера можно свести к минимуму.

Контроль ветвлений программы

Если в программе встречается условный или безусловный переход, то после декодирования инструкции перехода и получения адреса процессор начинает считывать данные с нового адреса. Ясно, что до получения этого адреса конвейер простаивает. Подобная ситуация происходит достаточно часто, поэтому для снижения "негативных" последствий ветвлений программы все переходы, встречающиеся в программе, запоминаются в специальном буфере адресов переходов (branch target buffer). При выполнении инструкции перехода процессор проверяет наличие адреса в буфере и начинает чтение программы с этого адреса. В случае безусловного перехода создается таблица "истории" переходов, исходя из которой процессор решает, будет произведен переход или нет, и начинает выполнение инструкций с предсказанного адреса - так называемое опережающее исполнение (speculative execution), Понятно, что если адрес предсказан неправильно, то все выполнение прекращается, конвейер очищается и начинается исполнение с правильного адреса. Поэтому весьма важно, чтобы вероятность правильного прогноза была наиболее высокой. В современных процессорах она лежит в пределах 80-90%.

Блок вычислений с плавающей точкой FPU (Floating Point Unit)

Данный блок обеспечивает выполнение операций с плавающей точкой и мультимедийных операций ММХ. Как правило, такие операции могут исполняться только в одном конвейере. На производительность блока FPU в последнее время стали обращать внимание из-за появления множества приложений, написанных для команд ММХ или для работы с трехмерной графикой, не говоря уже о чисто вычислительных задачах. Именно оптимизация этого блока является сейчас основной задачей многих производителей, и в будущем появятся процессоры со значительно улучшенным блоком FPU. Пока существует один критерий: чем больше частота процессора, тем лучше он работает с плавающей точкой и ММХ. Например, достаточно высокой производительностью обладают процессоры Athlon и Pentium IV (благодаря высокой частоте кэш-памяти второго уровня).

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

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

Другим усовершенствованием MMX является расширение набора команд процессора 57 новыми командами, а также введение новой возможности выполнения команд, называемой одиночный поток команд - множественный поток данных (Single Instruction - Multiple Data, SIMD). В современных мультимедийных и сетевых приложениях часто используются циклы; хотя они занимают около 10% (или даже меньше) объема полного кода приложения, на их выполнение может уйти до 90% общего времени выполнения. SIMD позволяет одной команде осуществлять одну и ту же операцию над несколькими данными, подобно тому как преподаватель, читая лекцию, обращается ко всей аудитории, а не к каждому студенту в отдельности. Технология SIMD позволяет ускорить выполнение циклов при обработке графических, анимационных, видео и аудиофайлов; в противном случае эти циклы отнимали бы время у процессора.

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

Технологии SSE, SSE2, SSE3

В феврале 1999 года Intel представила общественности процессор Pentium III, содержащий обновление технологии MMX, получившей название SSE(Streaming SIMD Extensions - поточные расширения SIMD). Инструкции SSE содержат 70 новых команд для работы с графикой и звуком в дополнение к существующим командам MMX. SSE позволяют выполнять операции с плавающей запятой, реализуемые в отдельном модуле процессора. В технологиях MMX для этого использовалось стандартное устройство с плавающей запятой.

Инструкции SSE2, содержащие 144 дополнительные команды SIMD, были представлены в ноябре 2000 года вместе с процессором Pentium 4. В SSE2 были включены все инструкции предыдущих наборов MMX и SSE.

Инструкции SSE3 были представлены в феврале 2004 года вместе с процессором Pentium4 Prescott; они добавляют 13 команд SIMD, предназначенных для ускорения выполнения сложных математических операций, обработки графики, кодирования видео и синхронизации потоков данных. Инструкции SSE3 также содержат все инструкции MMX, SSE и SSE2.

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

 

Технология Hyper Threading

Такие операционные системы, как Windows NT 4.0/2000/XP Professional/2003 Server и Linux, в полной мере поддерживают компьютеры с двумя или более установленными физическими процессорами, дающими подобным системам большой прирост производительности по сравнению с однопроцессорными компьютерами. Тем не менее двухпроцессорные компьютеры и системные платы всегда были на порядок дороже их однопроцессорных “сородичей”, а добавление второго процессора в поддерживающую подобную модернизацию систему приводило к возникновению различных сложностей, связанных с подбором одинаковой тактовой частоты и конфигурационных параметров для двух процессоров. Технология Hyper Threading (HT) компании Intel позволяет одному процессору одновременно обрабатывать два независимых потока команд. Другими словами, HT превращает один физический процессор в два виртуальных.

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

Быстродействие системы с процессором HT меньше быстродействия систем c двумя физическими процессорами. Однако выполнение нескольких приложений или одного многопоточного приложения в системе с процессором HT демонстрирует прирост производительности примерно на 25% по сравнению с обычным однопроцессорным компьютером.

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.