Д А Недзельский - Исследование эффективности многоядерных вычислительных систем - страница 1

Страницы:
1  2  3  4 

УДК 681.3.07

Недзельский Д.А.

ИССЛЕДОВАНИЕ ЭФФЕКТИВНОСТИ МНОГОЯДЕРНЫХ ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ

Рассмотрены особенности многоядерных процесоров. Разработана методика определения коэффициента ускорения многоядерных вычислительных систем аналитическим методом. Приведены сравненния аналитических результатов с результатами тестов. рис. 1, таб. 4, лит. ист. 3.

Основным направлением увеличения производительности вычислительных систем в последние годы стала многоядерность, причем все ядра (2, 4, 6, 8, 12) и необходимая инфраструктура реализуются в одной микросхеме.

Эффективное использование большого числа ядер в вычислительной системе является актуальной задачей как разработчиков многоядерных процессоров и вычислительных систем на их основе, так и разработчиков программного обеспечения (как прикладного, так и системного).

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

Настоящая статья посвящена исследованию эффективности структур многоядерных вычислительных систем фирм AMD (семейство Opteron) и Intel (семейство Xeon со структурой Nehalem) с использованием аналитических методов.

Особенности многоядерных процессоров

Структура одного 4-х ядерного процессора фирмы AMD приведена на рис. 1. Основные особенности современных многоядерных процессоров следующие: все ядра реализованы в одном кристалле; подсистема кэш-памяти трехуровневая;

кэш-памяти первого и второго уровня являются принадлежностью ядер;

кэш-память третьего уровня является общим ресурсом для всех ядер в одном процессоре;

контроллер нескольких каналов оперативной памяти реализован в процессоре;

в процессоре реализованы от одного до четырех контроллеров внешних связей для объединения нескольких процессоров в систему;

связь между кэш-памятью L3 и всеми контроллерами осуществляется через коммутатор.

Основным фактором, который снижает производительность многоядерной вычислительной системы (МВС), являются конфликты, возникающие при обращениях к общим ресурсам МВС (общей кэш-памяти третьего уровня, общей оперативной памяти) и простои ядер из-за этих конфликтов.


Ядрої

Ядро2

ЯдроЗ

Ядро4

Кэши L1, L2

Кэши L1, L2

Кэши

L1,L2

Кэши L1, L2

Коммутатор 1

Кэш-память L3

Коммутатор 2

Контроллер ОП

Канал ОП1

Канал ОП 2

Контроллер внешних связей 1

Контроллер внешних связей 2

Контроллер Внешних связей 3

 

1

2

 

3

1

 

 

 

1

 

Рис. 1. Структура 4-х ядерного процессора фирмы AMD

Количество таких конфликтов зависит от типов выполняемых программ (частоты обращений к общим ресурсам в этих программах, выполнения свойств как временной, так и простраственной локальности), количества ядер, параметров кэш-памятей и т.п.

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

В качестве критерия эффективности n-ядерной системы используется коэффициент ускорения s, равный отношению времени выполнения некоторого объема работы в одноядерной системе к времени выполнения этого же объема работы в n-ядерной системе.

В идеальном случае, когда в n-ядерной системе конфликты отсутствуют, производительность n-ядерной системы увеличивается в n раз по сравнению с одноядерной системой.

Реальная производительность n-ядерной системы из-за простоев, вызванных конфликтами при обращениях к общим ресурсам, может быть существенно меньше чем n.

Модель выполнения программы в ядре

При   выполнении   программы   в   вычислительной   системе   протекают параллельно следующие процессы:

читаются и подготавливаются к выполнению команды;

работает кэш-память первого уровня;

работает кэш-память второго уровня;

работает кэш-память третьего уровня;

работают функциональные устройства в каждом ядре;

работает оперативная память.

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

Однако, времена выполнения ряда процессов невозможно предсказать. В частности, не зная точной структуры выполняемой программы (какие команды за какими следуют, какие команды зависят от результатов предшествующих команд, сколько условных переходов, какое количество команд каждого вида и т.п.) нельзя предсказать времена выполнения команд в функциональных устройствах.

Общее время выполнения программы будет не меньше времени выполнения самогого длительного этапа из параллельно выполняемых.

Ядро   с некоторой интенсивностью (среднее значение интервала между соседними

запросами TL) при выполнении команд обращения в память обращается в кэш-память первого

ср

уровня. При удачном обращении с вероятностью PL1D запрос обслуживается за время tL1D и команда завершается. В случае неудачи в кэш-памяти первого уровня с вероятностью (1 PLlD) генерируется запрос к кэш-памяти второго уровня. При удачном обращении с вероятностью PL2 запрос обслуживается кэш-памятью второго уровня за время tL2 и команда завершается.

В случае неудачи в кэш-памяти второго уровня с вероятностью (1 PL1D PL2)

генерируется запрос к кэш-памяти третьего уровня. Если буфер заявок в кэш-память третьего уровня заполнен, то ядро блокируется (прекращает генерировать заявки).

Кеш-память третьего уровня, общая для всех ядер, при условии, что она свободна, в соответствии с некоторой дисциплиной выбирает заявку из одного входного буфера.

При удачном обращении с вероятностью PL3 запрос обслуживается кэш-памятью

третьего уровня за время tL3 и команда завершается.

В     случае     неудачи     в     кэш-памяти     третьего     уровня     с вероятностью

(1 PL1D PL2) * (1 PL3) генерируется запрос к коммуникационной подсистеме (коммутатору

2) и помещается в его входной буфер. Если же буфер заявок к коммутатору 2 заполнен, то кэш-память третьего уровня блокируется (прекращает выполнять заявки).

При отсутствии заявок во входных буферах кэш-память третьего уровня простаивает.

Коммутатор 2, общий ресурс для кэш-памяти третьего уровня и всех контроллеров внешних связей при условии, что он свободен,   в соответствии с некоторой дисциплиной выбирает заявку из

одного входного буфера и передает ее в заданный   буфер за время tK0M, при условии, что этом

буфере есть место.

При отсутствии заявок во входных буферах коммутатор 2 простаивает.

После обслуживания заявки оперативной памятью или одним из контроллеров внешних

связей за время ton (или tBHCB) данные (если это команда чтения) заносятся в соответствующий

буфер коммутатора.

При отсутствии заявок во входном буфере оперативная память (или контроллер внешних связей) простаивает.

Поток запросов из ядра в кэш-память первого уровня L1D случайный. Закон распределения интервалов между запросами может быть произвольным. Случайность потока запросов определяется влиянием многих факторов: типом программы (количеством команд обращения в память, их порядком следования в программе, временем выполнения программы, параметрами компонентов ядра и всей вычислительной системы, свойствами локальности программы и т.п.).

Известно, что если случайный процесс это сумма n случайных процессов без явного преобладания одного из них, то он является простейшим с показательным законом распределения промежутков времени между очередными событиями уже при n =4-5. Поэтому, принято, что процесс обращений в кэш-память первого уровня является простейшим с показательным законом распределения времени между заявками.

Известно также, что использование показательного закона распределения времени между очередными запросами, является одним из «тяжелых» режимов работы. Показатели эффективности в этом случае будут минимальными. При других законах распределения они будут не меньшими, а даже лучшими. Это означает, что в результате будут известны нижние границы показателей эффективности системы.

Примем, что известно:

в конкретной программе количество команд обращения в память NLD;

времена обслуживания на каждом уровне кэш-памяти; время обслуживания в оперативной памяти; времена обслуживания коммутаторов;

вероятности удачных обращений к каждому уровню кэш-памяти.

Обозначим общее время выполнения программы в ядре через   Тобщ . Времена занятости соответствующих уровней составят: TL1D = NLD *tL1D - время занятости кэш-памяти первого уровня;

TL2 = NLD *(1 PL1D)*tL2 - время занятости кэш-памяти второго уровня;

TL3 = NLD *(1 PL1D PL2)*tL3 - время занятости кэш-памяти третьего уровня; ТК0М - время занятости коммутатора;

Ton = NLD * (1 PL1D) * (1 PL2) * (1 PL3) * ton  - время занятости канала оперативной

памяти.

tL1D,tL2,tL3ton - времена обслуживания одного запроса кеш-памятями первого, второго,

третьего уровней и канала оперативной памяти, соответственно.

PL1D,PL2,PL3 - вероятности удачных обращений в кэш-памяти первого, второго и третьего

уровней, соответственно.

Определим   коэффициент   использования   (нагрузки)   кэш-памяти   первого уровня следующим образом

T

a    = о    = ±L1D

тОБЩ

Посредством использования коэффициента aL1D  можно моделировать выполнение

различных типов  программ. Например, задав   a L1D = 0.2 определяется программа, в которой

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

Интенсивность генерации заявок одним ядром к:

кэш-памяти первого уровня

N       a    * N a

X       = 1  ld   = ull\d     ly ld _ "lId ;

L1D    T t    * N t

кэш-памяти второго уровня

a

X  =X   *(1 P   ) = al1d *(1 P )

l1d

коммутатору 1 и, соответственно, кэш-памяти третьего уровня

XK0M1 = XL3 ;

= Xl 2*(1 Pl 2) = aa1D *(1Pl1d    Pl2) ;

t T

VL3      'VL 2

ll1d

коммутатору 2

ХкОМ 2 =Xl3*(1 Pl3) *(1 Pl1d Pl2)*(1 P^) \

Страницы:
1  2  3  4 


Похожие статьи

Д А Недзельский - Исследование эффективности многоядерных вычислительных систем

Д А Недзельский - Исследование эффективности одноядерных суперскалярных вычислительных систем

Д А Недзельский - Эффективность мвс с процесорами со структурой core 2