Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

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

Обзор показателей производительности

Команда разработчиков STG Systems Performance, разработчики, Systems Documentation, Inc. (SDI)
Над этой статьей совместно работали Дьюк Вианни (Duc Vianney), Алекс Мерикас (Alex Mericas), Билл Мэрон (Bill Maron), Томас Чен (Thomas Chen), Стив Кункель (Steve Kunkel) и Брет Ольшевски (Bret Olszewski) - участники команды IBM Systems & Technology Group Systems Performance.

Описание:  Модель разбора CPI, основанная на показателях, рассмотренных в первой части, позволяет существенно усовершенствовать анализ производительности. Научитесь анализировать данные специальных счетчиков производительности, полученные во время профилирования, для учета статистики событий, о которых процессор не может сообщить непосредственно.

Больше статей из этой серии

Дата:  10.10.2008
Уровень сложности:  средний
Активность:  1287 просмотров
Комментарии:  


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


Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Об авторе

Над этой статьей совместно работали Дьюк Вианни (Duc Vianney), Алекс Мерикас (Alex Mericas), Билл Мэрон (Bill Maron), Томас Чен (Thomas Chen), Стив Кункель (Steve Kunkel) и Брет Ольшевски (Bret Olszewski) - участники команды IBM Systems & Technology Group Systems Performance.

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=345211
ArticleTitle=Анализ CPI процессора POWER5: Часть 2. Введение в модель анализа CPI
publish-date=10102008
author1-email=dwpower@us.ibm.com
author1-email-cc=

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).