Главная » Статьи » Програмирование | [ Добавить статью ] |
Как уже говорилось в первой части, процессор POWER5™ оснащен шестью счетчиками производительности, два из которых предназначены для подсчета выполненных инструкций PowerPC® и общего количества тактов, а остальные четыре предназначены для подсчета других типов событий. Процессор POWER5 способен выполнять одну группу команд за такт (в группе может быть до пяти инструкций). Некоторые инструкции PowerPC раскладываются на несколько IOPS (число выполненных инструкций PowerPC) во время декодирования и могут охватывать несколько групп. Блок мониторинга производительности (PMU) процессора POWER5 может подсчитывать как общее количество выполненных групп, так и количество групп, содержащих хотя бы одну инструкцию PowerPC. Разница этих показателей равна количеству дополнительных групп расширения. Упрощенно говоря, CPI можно разделить на рабочую часть - когда процессор выполняет работу (обрабатывает группы) и холостую часть – когда процессор не выполняет инструкции (отношение общего количества тактов к количеству выполненных групп). Холостую часть можно, в свою очередь, разделить на такты с пустым конвейером (GCT empty) и такты с непустым конвейером, когда выполнение останавливается (stall - GCT empty). Такое разделение и наличие нескольких счетчиков дает возможность осуществлять более точный анализ производительности путем сравнения соответствующей статистики для расчета некоторых характеристик производительности, которые процессор не может измерить непосредственно. Таблица 1. Модель разбора CPI
В таблице 1 представлена модель разбора CPI, в которой все такты разделены на три типа: рабочие такты, такты с пустой таблицей выполнения (GCT empty) и холостые такты. Количество рабочих тактов – это количество тактов, необходимых для группировки. Простои, возникающие в противном случае, могут быть отнесены либо к пустой таблице выполнения, либо к холостым тактам. Таблица выполнения становится пустой, когда за такт не выполняется ни одной группы из-за ошибок кэша инструкций или ошибок ветвления. Холостые циклы возникают из-за одной из следующих инструкций: LSU, FXU, длинная FXU (все типы div, mtspr, mfspr), FPU и длинная FPU (все формы fsqrt, fdiv) или таких событий, как ошибки кэша данных, отказы или отказы при трансляции (ошибки ERAT). События являются иерархичными. Простои в блоке загрузки и хранения (LSU) включают в себя ошибки кэша данных и отказы. Простои из-за отказов включают в себя простои при трансляции из-за ошибок преобразования действительных адресов (Effective to Real Address Translation, ERAT). Этот метод фиксирует только последнее условие перед очисткой и не определяет зависимости. Например, блок операций с фиксированной точкой (FXU) добавляет инструкцию, зависящую от инструкции загрузки в той же группе, которая вызывает ошибку в кэше данных, в этом случае в качестве причины простоя будет указан FXU. При одновременном указании на несколько событий в первую очередь имеют приоритет события загрузки и сохранения; также ошибки кэша данных имеют приоритет перед отказами. Как правило, простои, связанные с пустой таблицей выполнения, вызваны ошибками кэша инструкций и ветвления. POWER5 интеллектуально отслеживает эти события, так же как и простои. Подсчет начинается при очистке GCT и прекращается когда в GCT появляется хотя бы одна группа. События производительности, перечисленные в таблице 1, определяются следующим образом:
В таблице 1 приведен разбор компонентов CPI и событий для расчета. Параметры в заштрихованных ячейках измеряются непосредственно оборудованием. Общее число тактов представляет суммарное значение CPI. Значение тактов в каждой категории измеряется счетчиками производительности или вычисляется на основе измеренных значений. Например, значение показателя Тактов с пустой таблицей выполнения <B> в таблице 1 раскладывается на три составляющих: Промахов кэша инструкций <B1>, ошибок ветвления <B2> Других (очисток и т. д.) <B4: (B)-(B1)-(B2)>. <B1> и <B2> являются измеряемыми значениями, а <B4> вычисляется из значений <B>, <B1> и <B2>. Как создать модель разбора CPI Чтобы создать модель разбора CPI для вашей программы, вам необходимо собрать данные счетчиков, рассчитать доли компонентов CPI и заполнить модель значениями CPI. Данные из таблицы 1 собраны следующими 16 счетчиками из семи групп pmcount: 0, 1, 5, 28, 29, 30 и 31. Их описание приведено в таблице 2. Таблица 2. Сбор данных счетчиков производительности
Пример сбора информации счетчиков Для сбора информации счетчиков производительности в AIX используется программа pmcount. В OC Linix, работающей на процессоре POWER, вам понадобится патч ядра. Например, для сбора информации pmcount для группы 0 вы можете использовать следующую команду:
За подробной информацией о программах сбора данных о производительности обратитесь к первой статье серии. CPI и его составляющие можно без труда получить из данных, собранных программой pmcount. В листинге 1 приведен пример данных производительности для группы 0, собранных на многопроцессорной системе. Данные представляют собой количество тактов с соответствующими событиями шести счетчиков: с 1 по 6, информация которых указана в соответствующих столбцах от PMC 1 до PMC 6. Для вычисления значения CPI необходимо подсчитать отношение общего количества тактов к количеству инструкций PPC, выполненных в группе 0, то есть отношение итоговых значений счетчиков PMC 6 и PMC 5 или 302936029042 / 117749670719, что составляет 2,57. Листинг 1. Данные pmcount для группы 0
Для вычисления составляющей CPI, связанной с ошибками кэша инструкций, необходимо подсчитать отношение значений счетчиков PMC 2 / PMC 6 в группе 5 или 2543186641 / 302213025090, что равно 0.0084. Это означает, что выполнение данного кода сопровождалось задержкой 0,84% времени из-за опустошения конвейеров (пустой GCT), вызванного ошибками кэша инструкций. Для вычисления составляющей CPI, связанной с ошибками предсказания ветвления, необходимо подсчитать отношение значений счетчиков PMC 4 / PMC 6 или 14448342651 / 302213025090, что равно 0,0478. Это означает, что выполнение данного кода сопровождалось задержкой 4,78% от общего количества тактов. Данные pmcount для группы 5 приведены в листинге 2. Листинг 2. Данные pmcount для группы 5
Для вычисления составляющей CPI, связанной с холостыми тактами, используйте данные pmcount для группы 30, как показано в листинге 3. Составляющая CPI, связанная с задержками выполнения, вызванными инструкциями FXU, равняется отношению значений счетчиков PMC 2 / PMC 6 или 39341080413 / 303713892054, что равно 0,1295 или 12,9%. Составляющая CPI, связанная с задержками выполнения, вызванными инструкциями DIV, равняется 18279140851 / 303713892054 или 0,0601 или 6,01% от общего значения CPI. Составляющая CPI, связанная с задержками FXU, равняется 0,1295 – 0,0601 или 0,0693 или 6,93% от общего значения CPI. Листинг 3. Данные pmcount для группы 30
После сбора информации pmcount процентное соотношение и отдельные значения составляющих CPI могут быть рассчитаны и заполнены, как показано в таблице 3. Таблица 3. Разбор CPI
Показанное в таблице 3 значение CPI для рассматриваемой рабочей нагрузки составляет 2,57, что немного превышает средний уровень. Если разложить CPI на составляющие, выяснится, что примерно 14% выполненных тактов были затрачены на выполнение работы, а остаток был потрачен на различные задержки. Около 8.7% CPI пришлось на такты с пустой таблицей выполнения, из которых 4.78% были вызваны ошибками ветвления, что можно считать небольшим значением, если сравнить его с ошибками кэша данных - 34.23%. Это наблюдение приводит к выводу, что высокое значение CPI в основном вызвано ошибками кэша данных. В действительности общие задержки инструкций LSU составляют 48.7% в сравнении с задержками инструкций FXU 12.9% и задержками инструкций FPU 2.1%. Причина высоких задержек из-за LSU, вероятно, кроется в подсистеме памяти, включая набор памяти программы, задержку памяти, иерархию памяти, размер кэша или размер TLB. В следующем разделе приведен пример того, как можно использовать CPI для поиска и решения проблем производительности систем на базе POWER5. Тестируемым приложением является программа 179.art из набора тестов вычислений с плавающей точкой пакета SPECcpu2000. Программа 179.art написана на С и осуществляет распознавание объектов в изображении с тепловизора с помощью нейронной сети, работающей по модели ART-2. Объектами являются самолеты и вертолеты. Вначале сеть обучается распознавать объекты. После обучения производится поиск указанных объектов в поле зрения. На вход нейронной сети подается окно с размером, соответствующим указанным объектам, сканируемое по изображению. Нейронная сеть ART2 пытается сопоставить изображение в окне с изученными объектами. Результатом работы является участок изображения с максимальным уровнем соответствия. Подробное описание теста приведено в статье «Характеризация высокопроизводительных нагрузок на POWER5 с поддержкой SMT» (см. раздел Ресурсы). В таблице 4 приведен разбор CPI для данного приложения. Видно, что 0,31 или 13% суммарного CPI затрачивается процессором для выполнения инструкций, а 2,11, или 87%, тратится на различные задержки. При простое конвейера 1,63, или 68%, CPI приходится на блок загрузки и хранения (LSU). Дальнейшее изучение данных показывает, что 1,43 из 1,63, или 88% CPI, расходуется на ошибки кэша данных. Таблица 4. Разбор CPI, анализ 1
Ошибки кэша данных, как правило, влекут за собой очистку содержимого кэша в память. Это действие предусматривает сброс всех строк кэша до его полной очистки. В статье «Мониторинг производительности в микропроцессоре PowerPC 604» (см. раздел Ресурсы) описано, как в системах на базе POWER5 используется аппаратное устройство предварительной выборки для загрузки данных в кэш L1. «Когда инструкция загрузки пропускает последовательно несколько строк кэша по восходящей или нисходящей, устройство предварительной выборки инициирует обращение к строкам кэша, относящимся к будущим инструкциям загрузки. Чтобы добиться того, чтобы необходимые данные находились в нужный момент в кэше данных L1, при обращении инструкции загрузки к данным из новой строки кэша инициируется предварительная выборка данных в кэш L1. Одновременно запрашивается передача строки в кэш L2 из памяти. Так как задержка при загрузке строки из памяти в кэш L2 больше, чем при перемещении ее из кэша L2 в L1, устройство предварительной выборки запрашивает данные из памяти на двенадцать строк вперед от строки, связанной с загружаемой инструкцией. Для каждого процессора поддерживается восемь таких потоков.» В таблице 5 показаны данные статистики очисток, где 96% очистками вызваны накладными расходами LSU. При этом количество инструкций на каждый сброс LSU достаточно мало, а невыровненные загрузки составили 5%, с долей ок. 2% от общего числа. В идеале доля невыровненных загрузок должна была бы стремиться к 0%. Таблица 5. Статистика очисток
Использование выровненного кода является важным для обеспечения производительности, особенно для механизма предварительной выборки данных, использующегося в POWER5. Выше говорилось о том, что оптимизированные ссылки на память выполняются всегда за меньшее количество тактов, чем неоптимизированные, для которых может потребоваться подряд два обращения к передаче данных (см. Ресурсы). Компилятор IBM XL C/C++ Enterprise Edition Version 7.0 для AIX поддерживает параметр –qalign, позволяющий указать правила выравнивания данных и кода. По умолчанию используется группировка Power, при которой элементы векторного типа выравниваются по границе 16 байт, а первый элемент имеет естественное выравнивание. Альтернативой является естественное выравнивание, при котором все элементы имеют естественные границы выравнивания. Например, тип данных float выравнивается по границе 4 байт, тип данных double – по границе 8 байт, тип данных long double – по границе 16 байт, тип данных pointer – по границе 4 байт, и т.д. В таблице 6 показано влияние параметра компилятора -qalign=natural на тестируемое приложение. Процент и коэффициент очисток LSU после перекомпиляции программы с параметром -qalign=natural стали нулевыми. Коэффициент и доля невыровненных загрузок также стали равны нулю. Количество инструкций на очистку LSU возросло почти в 1000 раз, что демонстрирует важность выравнивания инструкций загрузки и сохранения для устройства предварительной выборки POWER5. Таблица 6. Влияние параметра align=natural
В таблице 7 показано влияние параметра компилятора -qalign=natural на результаты разбора CPI. В столбце После приведены значения после перекомпиляции приложения с параметром -qalign=natural. Значение CPI, связанное с ошибками LSU, уменьшилось с 1,63 до 0,32, количество холостых тактов уменьшилось с 2,08 до 0,75, а общее значение CPI стало 1,04 вместо 2,42. Таблица 7. Разбор CPI, анализ 1
В этой статье показано, что анализ CPI может служить как для изучения производительности микропроцессора, так и для настройки программного обеспечения. Благодаря средствам мониторинга производительности, имеющимся в процессоре POWER5, анализ работы программ при помощи разбора CPI становится полезным инструментом для анализа влияния архитектуры системы на производительность. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Просмотров: 1351 | |
Всего комментариев: 0 | |
Операционные Системы
[61]
ОС Open Source
|
Мобильный Linux [26] |
Сравнение ОС [7] |
Статьи о Linux [16] |
Свободное ПО [10] |
Програмирование [6] |
Не для нубов [5] |
Ядро [13] |
Хранилище данных [9] |
Устройства [1] |
Установка/конфигурирование/планиров [16] |
Файловые системы [3] |
Управление, основанное на политиках [1] |
Управление инфраструктурой [0] |
Серверы [5] |
Биографии [6] |
Прочее [25] |