Научная статья на тему 'АНАЛИЗ МЕХАНИЗМОВ СИНХРОНИЗАЦИИ ПОТОКОВ ДЛЯ СИСТЕМ-НА-КРИСТАЛЛЕ С БОЛЬШИМ ЧИСЛОМ ВЫЧИСЛИТЕЛЬНЫХ ЯДЕР'

АНАЛИЗ МЕХАНИЗМОВ СИНХРОНИЗАЦИИ ПОТОКОВ ДЛЯ СИСТЕМ-НА-КРИСТАЛЛЕ С БОЛЬШИМ ЧИСЛОМ ВЫЧИСЛИТЕЛЬНЫХ ЯДЕР Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
64
9
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
МНОГОЯДЕРНЫЕ ПРОЦЕССОРЫ / СИНХРОНИЗАЦИЯ / МАСШТАБИРУЕМОСТЬ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Путря Фёдор Михайлович, Медведев Илья Александрович

Рассмотрен способ синхронизации потоков на основе небольшого объема общей памяти с аппаратной поддержкой примитивов синхронизации для систем-на-кристалле, реализованный в многоядерном DSP-кластере. Предложено решение проблемы масштабируемости, заключающееся в применении распределенного буфера синхронизации, и рассмотрен метод повышения эффективности аппаратной синхронизации, основанный на использовании очередей типа FIFO.The method of synchronization based on a small amount of shared memory with the synchronization primitives hardware support, realized in the multi-core DSP cluster, has been considered. The solution for the typical problem of scalability in the multi-core systems, which is the application of a distributed synchronization buffer, has been proposed and the method of improving the efficiency of the hardware synchronization based on FIFO queues has been considered.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «АНАЛИЗ МЕХАНИЗМОВ СИНХРОНИЗАЦИИ ПОТОКОВ ДЛЯ СИСТЕМ-НА-КРИСТАЛЛЕ С БОЛЬШИМ ЧИСЛОМ ВЫЧИСЛИТЕЛЬНЫХ ЯДЕР»

СХЕМОТЕХНИКА И ПРОЕКТИРОВАНИЕ

УДК 004.272.3

Анализ механизмов синхронизации потоков для систем-на-кристалле с большим числом вычислительных ядер

Ф.М.Путря, И.А.Медведев ГУП НПЦ «ЭЛВИС» (г. Москва)

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

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

Возможность размещать на кристалле все большее число транзисторов на протяжении долгого времени использовалась разработчиками для повышения производительности одного вычислительного ядра процессора. Как правило, это достигалось за счет увеличения тактовой частоты ядра и числа инструкций, исполняемых ядром за такт. Однако несколько лет назад произошел коренной перелом и в силу ряда технологических ограничений и проблем, главная из которых - рассеиваемая кристаллом мощность, основным методом повышения производительности стало наращивание числа вычислительных ядер [1]. Преимущества нового метода заключаются в повышении производительности за счет более эффективного выполнения параллельных вычислений, уменьшении потребляемой мощности при использовании более простых ядер и сокращении производственного цикла в результате повторного использования разработанной аппаратуры [2].

При параллельных вычислениях можно выделить две проблемы: программируемое^ и синхронизация [3]. Под программируемостью понимается наложение распараллеливаемых приложений на многоядерную архитектуру, под синхронизацией - обеспечение корректности параллельного выполнения потоков за счет исполнения зависимостей между командами. Задача распараллеливания достаточно нетривиальна и для ряда алгоритмов практически неразрешима. На сегодня уже имеется большой опыт создания многопоточных приложений для суперкомпьютеров и многопроцессорных вычислительных комплексов, который с учетом специфики однокристальных систем применим и к многоядерным процессорам. Однако потокам, на которые распараллелено некоторое приложение, необходимо взаимодействовать друг с другом, и при отсутствии механизмов синхронизации между такими потоками корректная работа приложения невозможна.

© Ф.М.Путря, И.А.Медведев, 2011

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

Аппаратная поддержка стандартных механизмов синхронизации потоков - необходимый элемент в современных многоядерных системах. Поэтому от эффективности работы механизма синхронизации зависит и производительность всего программно-аппаратного комплекса, реализующего определенную функцию на многоядерном процессоре. Одним из способов синхронизации является организация небольшого объема общей для всех ядер памяти с аппаратной поддержкой примитивов синхронизации. Преимущество такого способа - скорость, достигаемая за счет быстрого доступа к общему участку памяти и синхронизации между потоками, выполняемой всего одной инструкцией обращения к памяти. Данный способ использован в многоядерных ББР-процессорах серии «МУЛЬТИКОР» [4]. Синхронизацию между потоками можно разделить на сильную и слабую. В случае сильной синхронизации аппаратурой гарантируется определенная последовательность выполнения команд различных потоков. При слабой синхронизации не отслеживается последовательность обращения разных потоков к разделяемому ресурсу. В этом случае программист должен быть уверен в том, что последовательность таких обращений не критична, либо дополнительно использовать программные примитивы синхронизации.

Централизованный буфер синхронизации. Проблема масштабируемости. Общая архитектура многоядерных DSP-процессоров серии «МУЛЬТИКОР» представляет собой гетерогенную систему-на-кристалле, состоящую из одного управляющего ядра и многоядерного DSP-кластера. Дальнейший анализ проводится для кластера, содержащего четыре ядра. В таком кластере с точки зрения топологии ядра располагаются в виде двумерной решетки, возможности масштабируемости которой позволяют обобщать результаты исследований на случаи реализации DSP-кластера с большим числом ядер.

В кластере используется метод аппаратной поддержки синхронизации, основанный на использовании небольшого объема доступной всем ядрам памяти. Буфер синхронизации, входящий в состав кластера, представляет собой многопортовый регистровый файл, каждая ячейка которого снабжена дополнительным битом состояния для сохранения информации о типе последней операции. Запись и чтение в регистровый файл производится согласно управляющей модели, которая в зависимости от режима работы буфера синхронизации обеспечивает сильную или слабую зависимость последовательности выполнения операций. При сильной зависимости запись в ячейку буфера возможна только после чтения, и наоборот, чтение из ячейки возможно только после записи. Невозможная операция (например, «чтение после чтения») приводит к блокировке ядра, которое отправило запрос, до тех пор, пока действиями другого ядра данный конфликт не разрешится. При слабой зависимости ограничений на последовательность выполнения операций нет. Оба режима работы буфера позволяют реализовать синхронизацию ядер, но при этом режим слабой зависимости требует более детального анализа программы со стороны программиста.

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

Распределенный буфер синхронизации. Для решения проблемы масштабируемости разработан распределенный буфер синхронизации, который разделен на равные части (почтовые ящики Xmail), каждая из которых помещена рядом с соответствующим ядром и является для него ближней, остальные части - дальними. Можно выделить три основных варианта коммутации между ядрами: коммутация типа «каждый с каждым», однонаправленное кольцо, двунаправленное кольцо (рис.1). Первые два варианта реализованы в виде RTL-модели и для них проведен анализ производительности.

Рис.1. Распределенный буфер синхронизации: а - «каждый с каждым»; б - однонаправленное кольцо; в - двунаправленное кольцо

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

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

зрения времени доступа.

Рис. 2. Схема маршрутизации однонаправленного кольца

рованный запрос должен сохраняться в том ядре, в котором он был заблокирован. Для этого в коммутационной логике введены специальные буферные элементы, содержащие регистры flip-flop (на рисунке обозначены буквами «ff»).

Анализ производительности. Для анализа производительности использовались RTL-модели для следующих проектов: централизованный буфер синхронизации, распределенный буфер с коммутацией «каждый с каждым», распределенный буфер с коммутацией в виде однонаправленного кольца. Набор тестов состоит из алгоритма быстрого преобразования Фурье (БПФ) и тестов на передачу управления. Результаты выполнения тестов получены путем моделирования RTL-моделей средствами САПР. Тест БПФ представляет собой вариант распараллеливания путем разбиения на параллельные потоки, тесты на передачу управления - вариант программной конвейеризации.

Исходный тест БПФ показал логичное падение производительности для распределенных вариантов буфера синхронизации, вызванное простоями ядер при обращениях к дальним частям буфера. Поэтому код теста был оптимизирован. Оптимизация проводилась под однонаправленную кольцевую архитектуру распределенного буфера синхронизации таким образом, чтобы большая часть обращений к регистрам буфера синхронизации приходилась на регистры ближней для данного ядра части буфера и в результате минимизировалось время простоя ядра при обращениях к дальним регистрам буфера. Результаты представлены для двух вариантов теста: неоптимизированного и оптимизированного. Время выполнения теста БПФ при кольцевой архитектуре X-буфера существенно сокращается после оптимизации теста (рис.3).

В

■ II I I II I

DSPl DSP2 а

и и ■ I

Рис.3. Время выполнения основной части теста БПФ: а - неоптимизи-рованная программа; б - оптимизированная (■ - централизованный; ■ - «каждый с каждым»; ■ - однонапрвленное кольцо)

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

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

70

DSPO DSPI DSP2 DSP3 DSPO DSP1 DSP2 DSP3 а б

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

Рассмотрим два варианта данного теста (для определенности обозначим их соответственно A и Б). Алгоритм передачи управления в тесте А можно описать следующей схемой: DSP0 ^ DSP1 ^ DSP2 ^ DSP3. В данном тесте интервалы, через которые ядра предают управление, одинаковы. Алгоритм передачи управления в тесте Б идет по схеме: DSP0 ^ DSP1 ^ DSP3; DSP0 ^ DSP2 ^ DSP3. В этом случае, если ядра DSP0 и DSP3 выполняют Т операций перед передачей управления, то ядра DSP1 и DSP2 выполняют один и тот же этап, но на него необходимо в два раза больше операций - 2Т. Для каждого теста конвейерный алгоритм выполняется для большого числа входных блоков данных.

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

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

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

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

Литература

1. Путря Ф.М. Архитектурные особенности процессоров с большим числом вычислительных ядер // Информационные технологии. - 2009. - № 4. - С. 2-7.

2. Held J., Bautista J., Koehl S. From a few cores to many: A tera-scale computing research overview // Intel White Paper. - 2006. - URL: ftp://download.intel.com/research/platform/terascale/terascale_ove.

3. Shaoshan L., Gaudiot J.-L. Synchronization Mechanisms on Modern Multi-core Architectures // Advances in Computer Systems Architecture / Computer Systems Architecture Conference. - 2007. -P. 290-303.

4. http://www.multicore.ru (дата обращения 21.01.10)

Статья поступила 24 ноября 2010 г.

Путря Фёдор Михайлович - кандидат технических наук, старший научный сотрудник ГУП НПЦ «ЭЛВИС» (г. Москва). Область научных интересов: организация подсистемы памяти в многоядерных процессорах, аппаратные механизмы синхронизации вычислительных ядер в многоядерных системах, механизмы обмена данными между ядрами/процессами; методы тестирования систем-на-кристалле и многоядерных процессоров.

Медведев Илья Александрович - инженер ГУП НПЦ «ЭЛВИС» (г. Москва). Область научных интересов: аппаратные механизмы синхронизации вычислительных ядер в многоядерных системах, сихронизация потоков в многопоточных приложениях; масштабируемость многоядерных систем. E-mail: imedvedev@elvees.com

Рис.5. Сравнительный анализ производительности тестами на передачу управления (♦ - централизованный; ■ - «каждый с каждым»; ▲ - однонаправленное кольцо)

i Надоели баннеры? Вы всегда можете отключить рекламу.