Open-Club.Net Проект полностью ориентирован на Open Source-подход(изучаем, настраиваем, устанавливаем и общаемся о Linux).
Мы в соц. сетях:
Главная » Статьи » Програмирование [ Добавить статью ]

Анализ CPI процессора POWER5: Часть 2. Введение в модель анализа CPI

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

Процессор POWER5 способен выполнять одну группу команд за такт (в группе может быть до пяти инструкций). Некоторые инструкции PowerPC раскладываются на несколько IOPS (число выполненных инструкций PowerPC) во время декодирования и могут охватывать несколько групп. Блок мониторинга производительности (PMU) процессора POWER5 может подсчитывать как общее количество выполненных групп, так и количество групп, содержащих хотя бы одну инструкцию PowerPC. Разница этих показателей равна количеству дополнительных групп расширения. Упрощенно говоря, CPI можно разделить на рабочую часть - когда процессор выполняет работу (обрабатывает группы) и холостую часть – когда процессор не выполняет инструкции (отношение общего количества тактов к количеству выполненных групп). Холостую часть можно, в свою очередь, разделить на такты с пустым конвейером (GCT empty) и такты с непустым конвейером, когда выполнение останавливается (stall - GCT empty).

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


Таблица 1. Модель разбора CPI
Всего тактов
<количество тактов>
Выполненных тактов
<A:тактов с выполнением групп>
Рабочих тактов PowerPC
<A1: Одна или несколько инструкций PowerPC выполнено за такой такт>
Накладные расходы на расщепление/микропрограммирование и группировку
<A2:(A)-(A1)>
Тактов с пустой таблицей выполнения (GCT empty)
<B>
Промахов кэша инструкций
<B1>
Ветвлений (ошибок ветвления)
<B2>
Других (очисток и т .д.)
<B4: (B)-(B1)-(B2>
Выполненных холостых тактов
<C: всего -(A)-(B)>
Простоев из-за инструкций в блоке LSU
<C1>
Простоев из-за отказов
<C1A>
Простоев при трансляции (отказы из-за ошибок ERAT)
<C1A1>
Других отказов
<C1A2: (C1A)-(C1A1)>
Отказы из-за промахов D-кэша
<C1B>
Простоев из-за задержек LSU, накладные расходы на очистку LSU
<C1C: (C1)-(C1A)-(C1B)>
Простоев из-за инструкций в блоке FXU
<C2>
Простоев из-за инструкций DIV/MTSPR/MFSPR
<C2A>
Простоев из-за задержек FXU
<C2C: (C2)-(C2A)>
Простоев из-за инструкций в блоке FPU
<C3>
Простоев из-за инструкций FDIV/FSQRT
<C3A>
Простоев из-за задержек FPU
<C3B: (C3)-(C3A)>
Другие (простои из-за инструкций BRU/CRU, накладные расходы на очистку (кроме очистки LSU) и т.д.)
<C4: (Выполненных холостых тактов)-(C1)-(C2)-(C3) >

В таблице 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, определяются следующим образом:

  • Всего тактов = PM_CYCLES
  • Выполненных тактов = PM_GRP_CMPL
  • Выполненных тактов = PM_INST_CMPL (SCOMx360 настроено с битами 0-10 = 0 00 0000 0000)
  • Рабочих тактов PowerPC = PM_PPC_CMPL (или PMC 5)
  • Накладных расходов на расщепление/микропрограммирование = PPC_Completion_Cycles - PPC_Base_Completion_Cycles
  • Тактов с пустой таблицей выполнения (GCT empty) = PM_GCT_EMPTY
  • Промахов кэша инструкций = PM_GCT_EPMTY_IC_MISS
  • Ошибок ветвления = PM_GCT_EMPTY_BR_MPRED
  • Других ошибок GCT = GCT_Empty - Промахов кэша инструкций - Ошибок ветвления
  • Выполненных холостых тактов = Total cycles - Completion cycles - GCT empty
  • Простоев инструкций в блоке LSU = PM_CMPLU_STALL_LSU
  • Отказов в блоке LSU = PM_CMPLU_STALL_REJECT
  • Отказов трансляции в блоке LSU = PM_CMPLU_STALL_ERAT_MISS
  • Других простоев в блоке LSU = Stall by LSU Reject - Stall by LSU Translation Reject
  • Ошибок кэша данных в блоке LSU = PM_CMPLU_STALL_DCACHE_MISS
  • Простоев из-за задержек LSU = Stall by LSU Instruction - Stall by LSU Reject- Stall by LSU Dcache miss
  • Простоев из-за инструкций в блоке FXU = PM_CMPLU_STALL_FXU
  • Простоев из-за инструкций DIV,MTSPR или MFSPR = PM_CMPLU_STALL_DIV
  • Простоев из-за задержек FXU = Stall by FXU Instruction - Stall by DIV,MTSR, or MFSPR
  • Простоев из-за инструкций в блоке FPU = PM_CMPLU_STALL_FPU
  • Простоев из-за инструкций FDIV или FSQRT = PM_CMPLU_STALL_FDIV
  • Простоев из-за задержек FPU = Stall by FPU Instruction - Stall by FDIV,FSQRT
  • Других простоев = Completion Stall cycles - Stall by LSU Instruction - Stall by FXU Instruction - Stall by FPU Instruction

В таблице 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. Сбор данных счетчиков производительности

№ счетчика№ события№ группыОписание
Выполнено тактов:

2710PM_INST_CMPL – Количество выполненных инструкций PowerPC (iops)

50ЛюбойPM_INST_CMPL - Количество выполненных инструкций PowerPC

60ЛюбойPM_RUN_CYC – Количество процессорных тактов, заблокированных защелкой выполнения

3491PM_GRP_CMPL – Количество выполненных групп
Выполнено тактов с пустой таблицей выполнения (GCT empty):

1605PM_GCT_NOSLOT_CYC – Такты без выделения слотов GCT

2595PM_GCT_NOSLOT_IC_MISS – Отсутствует слот в GCT из-за промаха кэша инструкций

3465PM_GCT_NOSLOT_SRQ_FULL - Отсутствует слот в GCT из-за переполнения SRQ

4515PM_GCT_NOSLOT_BR_MPRED - Отсутствует слот в GCT из-за ошибки ветвления
Выполнено холостых тактов:

21328PM_CMPL_STALL_LSU – Задержка выполнения, вызванная инструкцией LSU

41028PM_CMPL_STALL_REJECT – Задержка выполнения, вызванная очисткой

21029PM_CMPL_STALL_DCACHE_MISS - Задержка выполнения, вызванная промахом кэша данных

4829PM_CMPL_STALL_ERAT_MISS - Задержка выполнения, вызванная ошибкой ERAT

21230PM_CMPL_STALL_FXU - Задержка выполнения, вызванная инструкцией FXU

4730PM_CMPL_STALL_DIV - Задержка выполнения, вызванная инструкцией DIV

21131PM_CMPL_STALL_FDIV - Задержка выполнения, вызванная инструкциями FDIV или FQRT

4931PM_CMPL_STALL_FPU - Задержка выполнения, вызванная инструкцией FPU

Пример сбора информации счетчиков

Для сбора информации счетчиков производительности в AIX используется программа pmcount. В OC Linix, работающей на процессоре POWER, вам понадобится патч ядра. Например, для сбора информации pmcount для группы 0 вы можете использовать следующую команду:

pmcount -kuny -G 0 workload >> pmcount_ku.out

За подробной информацией о программах сбора данных о производительности обратитесь к первой статье серии.

Расчет составляющих CPI

CPI и его составляющие можно без труда получить из данных, собранных программой pmcount. В листинге 1 приведен пример данных производительности для группы 0, собранных на многопроцессорной системе. Данные представляют собой количество тактов с соответствующими событиями шести счетчиков: с 1 по 6, информация которых указана в соответствующих столбцах от PMC 1 до PMC 6.

Для вычисления значения CPI необходимо подсчитать отношение общего количества тактов к количеству инструкций PPC, выполненных в группе 0, то есть отношение итоговых значений счетчиков PMC 6 и PMC 5 или 302936029042 / 117749670719, что составляет 2,57.


Листинг 1. Данные pmcount для группы 0
pmcount -kun -G 0 sleep 5 
Processor name: POWER5
*** Configuration for all CPUs :
kernel: runlatch enabled;
Mode = user, kernel; Process tree = off; Thresholding = off
Thresholding multiplier: 1, 32, 64
MMCR0[400c003] MMCR1[0] MMCR1[a02121e] MMCRA[0]
regs mode [0]
sregs: MMCRA[4000000] mode [40000000]
Group 0: pm_utilization Name: CPI and utilization data
Counter 1, event 190: PM_RUN_CYC
Counter 2, event 71: PM_INST_CMPL
Counter 3, event 56: PM_INST_DISP
Counter 4, event 12: PM_CYC [shared]
Counter 5, event 0: PM_INST_CMPL
Counter 6, event 0: PM_RUN_CYC

*** All CPU data:
cpu PMC 1 PMC 2 PMC 3 PMC 4 PMC 5 PMC 6
==== ======== ======== ======== ======== ======== ========
[ 0] 9480159805 3627365099 4399841370 9562151386 3627365196 9480160495
[ 1] 9479204529 3652180319 4422613553 9562559351 3652180416 9479204595
[ 2] 9485236988 3621234799 4390923166 9563162485 3621234936 9485237345
[ 3] 9476339229 3703301514 4483370620 9563799360 3703301651 9476343842
.
.
.
[ALL] 302936012787 117749668145 142731148496 306273117094 117749670719 302936029042
All done

Для вычисления составляющей 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
pmcount -kun -G 5 sleep 5 
Processor name: POWER5
*** Configuration for all CPUs :
kernel: runlatch enabled;
Mode = user, kernel; Process tree = off; Thresholding = off
Thresholding multiplier: 1, 32, 64
MMCR0[400c003] MMCR1[40000000] MMCR1[8380838] MMCRA[0]
regs mode [0]
sregs: MMCRA[2000000] mode [40000000]
Group 5: pm_gct_empty Name: GCT empty reasons
Counter 1, event 60: PM_GCT_NOSLOT_CYC
Counter 2, event 59: PM_GCT_NOSLOT_IC_MISS
Counter 3, event 46: PM_GCT_NOSLOT_SRQ_FULL
Counter 4, event 51: PM_GCT_NOSLOT_BR_MPRED
Counter 5, event 0: PM_INST_CMPL
Counter 6, event 0: PM_RUN_CYC

*** All CPU data:
cpu PMC 1 PMC 2 PMC 3 PMC 4 PMC 5 PMC 6
==== ======== ======== ======== ======== ======== ========
[ 0] 812182509 78693417 83 444722215 3558607561 9448261358
[ 1] 816986288 77820762 53 446641392 3567264412 9446647500
[ 2] 817819375 76560140 38 448521089 3574674746 9453831148
[ 3] 828622714 78542730 51 452914994 3636947915 9466769676
.
.
.
[ALL] 26489520676 2543186641 1764 14448342651 115642620104 302213025090
All done

Для вычисления составляющей 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 -kun -G 30 sleep 5 
Processor name: POWER5
*** Configuration for all CPUs :
kernel: runlatch enabled;
Mode = user, kernel; Process tree = off; Thresholding = off
Thresholding multiplier: 1, 32, 64
MMCR0[400c003] MMCR1[40000008] MMCR1[22320232] MMCRA[1]
regs mode [0]
sregs: MMCRA[2000001] mode [40000000]
Group 30: pm_fxu_stall Name: FXU Stalls
Counter 1, event 68: PM_GRP_IC_MISS_BR_REDIR_NONSPEC
Counter 2, event 12: PM_CMPLU_STALL_FXU
Counter 3, event 55: PM_INST_CMPL
Counter 4, event 7: PM_CMPLU_STALL_DIV
Counter 5, event 0: PM_INST_CMPL
Counter 6, event 0: PM_RUN_CYC

*** All CPU data:
cpu PMC 1 PMC 2 PMC 3 PMC 4 PMC 5 PMC 6
==== ======== ======== ======== ======== ======== ========
[ 0] 498611452 1202471828 3611765439 554313577 3611765535 9505036884
[ 1] 500444149 1210730985 3627920945 560516353 3627921041 9503526335
[ 2] 499069721 1215432409 3622917629 561661375 3622917725 9483176391
[ 3] 500842376 1212605068 3621113502 562567343 3621113598 9497993084
.
.
.
[ALL] 16193491341 39341080413 117465600498 18279140851 117465602898 303713892054
All done






Создание таблицы анализа CPI

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


Таблица 3. Разбор CPI
Разбор CPI % CPI Доля CPI
Всего тактов Рабочих тактов Рабочих тактов PowerPC 7.77 0.20
Накладные расходы на расщепление/микропрограммирование и группировку 6.23 0.16
Тактов с пустой таблицей выполнения (GCT empty) Промахов кэша инструкций 0.84 0.02
Ошибок ветвления 4.78 0.12
Других (очисток и т .д.) 3.14 0.08
Холостых тактов Простоев из-за инструкций в блоке LSU Простоев из-за отказов Простоев при трансляции 1.28 0.03
Других отказов 3.75 0.10
Простоев из-за ошибок кэша данных 34.23 0.88
Простоев из-за задержек LSU 9.50 0.25
Простоев из-за инструкций в блоке FXU Простоев из-за инструкций Div/MTSPR/MFSPR 6.02 0.16
Простоев из-за задержек FXU 6.93 0.18
Простоев из-за инструкций в блоке FPU Простоев из-за инструкций FDIV/FSQRT 0.03 0.00
Простоев из-за задержек FPU 2.10 0.05
Других простоев 13.39 0.35
CPI
2.57

Показанное в таблице 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

В следующем разделе приведен пример того, как можно использовать 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

CPI
Рабочих тактов Рабочих тактов Рабочих тактов PowerPC 0.31
Накладные расходы на расщепление 0.00
Максимальное значение группировки 0.00
Всего рабочих тактов 0.31
Тактов с пустой таблицей выполнения Ошибок кэша инструкций 0.02
Ошибок ветвления 0.00
Ошибок сохранения 0.00
Других (очисток и т .д.) 0.01
Всего тактов с пустой таблицей выполнения 0.03
Холостых тактов (CSC) Простоев из-за инструкций в блоке LSU Простоев из-за отказов Простоев при трансляции 0.00
Других отказов 0.09
Простоев из-за ошибок кэша данных
1.43
Простоев из-за задержек LSU
0.10
Всего простоев из-за инструкций в блоке LSU 1.63
Простоев из-за инструкций в блоке FXU Простоев из-за инструкций Div/MTSPR/MFSPR
0.00
Простоев из-за задержек FXU
0.03
Всего простоев из-за инструкций в блоке FXU 0.03
Простоев из-за инструкций в блоке FPU Простоев из-за инструкций FDIV/FSQRT
0.00
Простоев из-за задержек FPU
0.40
Всего простоев из-за инструкций в блоке FPU 0.40
Других простоев

0.02
Всего холостых тактов 2.08
Общее значение CPI 2.42

Ошибки кэша данных, как правило, влекут за собой очистку содержимого кэша в память. Это действие предусматривает сброс всех строк кэша до его полной очистки. В статье «Мониторинг производительности в микропроцессоре PowerPC 604» (см. раздел Ресурсы) описано, как в системах на базе POWER5 используется аппаратное устройство предварительной выборки для загрузки данных в кэш L1.

«Когда инструкция загрузки пропускает последовательно несколько строк кэша по восходящей или нисходящей, устройство предварительной выборки инициирует обращение к строкам кэша, относящимся к будущим инструкциям загрузки. Чтобы добиться того, чтобы необходимые данные находились в нужный момент в кэше данных L1, при обращении инструкции загрузки к данным из новой строки кэша инициируется предварительная выборка данных в кэш L1. Одновременно запрашивается передача строки в кэш L2 из памяти. Так как задержка при загрузке строки из памяти в кэш L2 больше, чем при перемещении ее из кэша L2 в L1, устройство предварительной выборки запрашивает данные из памяти на двенадцать строк вперед от строки, связанной с загружаемой инструкцией. Для каждого процессора поддерживается восемь таких потоков.»

В таблице 5 показаны данные статистики очисток, где 96% очистками вызваны накладными расходами LSU. При этом количество инструкций на каждый сброс LSU достаточно мало, а невыровненные загрузки составили 5%, с долей ок. 2% от общего числа. В идеале доля невыровненных загрузок должна была бы стремиться к 0%.


Таблица 5. Статистика очисток
Очистка загрузок 5%
Доля невыполненных загрузок 5%
Коэффициент невыполненных загрузок 2%
Доля невыполненных сохранений 0%
Коэффициент невыполненных сохранений 0
Коэффициент очисток LSU 2%
Процент очисток из-за LSU 96%
Количество инструкций на каждую очистку LSU 47.86
Коэффициент очисток LRQ 0
Количество инструкций на каждую очистку LRQ 24694.53
Коэффициент очисток SRQ 0
Количество инструкций на каждую очистку SRQ 1354.2

Использование выровненного кода является важным для обеспечения производительности, особенно для механизма предварительной выборки данных, использующегося в 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

До После
Очисток загрузки 5% 0%
Доля невыровненных загрузок 5% 0%
Коэффициент невыровненных загрузок 2% 0%
Доля невыровненных сохранений 0% .
Коэффициент невыровненных сохранений 0 .
Коэффициент очисток LSU 2% 0%
Процент очисток из-за LSU 96% 0%
Количество инструкций на очистку LSU 47.86 45485.87
Коэффициент очисток LRQ 0 0
Количество инструкций на очистку LRQ 24694.53 531303.18
Коэффициент очисток SRQ 0 0
Количество инструкций на очистку SRQ 1354.2 49469.69
Количество попыток загрузки данных на одну ошибку 0.96 1.74
Количество объединений LMQ на одну ошибку 0.7 0.59
Количество отказов LMQ на одну ошибку 1.95 6.24
Количество отказов SRQ LHS на одну загрузку 0.01 0.04
Количество отказов LSU CDF на одну ссылку 0.29 0.08

В таблице 7 показано влияние параметра компилятора -qalign=natural на результаты разбора CPI. В столбце После приведены значения после перекомпиляции приложения с параметром -qalign=natural. Значение CPI, связанное с ошибками LSU, уменьшилось с 1,63 до 0,32, количество холостых тактов уменьшилось с 2,08 до 0,75, а общее значение CPI стало 1,04 вместо 2,42.


Таблица 7. Разбор CPI, анализ 1

Before After
Рабочих тактов Рабочих тактов Рабочих тактов PowerPC 0.31 0.29
Накладные расходы на расщепление 0.00 0.00
Максимальное значение группировки 0.00 0.00
Всего рабочих тактов 0.31 0.29
Тактов с пустой таблицей выполнения Промахов кэша инструкций 0.02 0.00
Ошибок ветвления 0.00 0.00
Ошибок сохранения 0.00 0.00
Других (сбросов и т .д.) 0.01 0.01
Всего тактов с пустой таблицей выполнения 0.03 0.00
Холостых тактов (CSC) Простоев из-за инструкций в блоке LSU Простоев из-за отказов Простоев при трансляции 0.00 0.00
Других отказов 0.09 0.06
Простоев из-за ошибок кэша данных
1.43 0.32
Простоев из-за задержек LSU
0.10 0.07
Всего простоев из-за инструкций в блоке LSU 1.63 0.45
Простоев из-за инструкций в блоке FXU Простоев из-за инструкций Div/MTSPR/MFSPR
0.00 0.00
Простоев из-за задержек FXU
0.03 0.01
Всего простоев из-за инструкций в блоке FXU 0.03 0.01
Простоев из-за инструкций в блоке FPU Простоев из-за инструкций FDIV/FSQRT
0.00 0.00
Простоев из-за задержек FPU
0.40 0.27
Всего простоев из-за инструкций в блоке FPU 0.40 0.27
Других простоев

0.02 0.02
Всего холостых тактов 2.08 0.75
Общее значение CPI 2.42 1.04





Заключение

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

Категория: Програмирование | Добавил: Root (11.11.2008)
Просмотров: 1351 | Рейтинг: 0.0/0
Похожие материалы:
Всего комментариев: 0
ComForm">
avatar
Профиль
Поиск
Категории раздела
Участвуйте в опросе
Ваша компания готова к переходу на ПО с открытым исходным кодом?
Всего ответов: 18
Статистика

Яндекс.Метрика

Онлайн всего: 7
Гостей: 7
Пользователей: 0

Нас уже: 1302 Линуксоидов
Сегодня нас посетили следующие Линуксоиды -