В преддверии второй волны многоядерных технологий: процессоры с асимметричными (неоднородными) ядрами

Создать новую статью

01.06.2009 00:00


Резюме

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

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

Краткий обзор

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

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

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

Преимущества асимметричной многоядерной архитектуры

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

Наряду с другими направлениями совершенствования микроархитектуры в сторону более энергоэффективных технологий, решению указанных проблем способствовал переход к многоядерным процессорам. Несколько вычислительных ядер могут работать одновременно на сравнительно небольшой тактовой частоте, обеспечивая высокую производительность при низком потреблении энергии и меньшем выделении тепла. Тем не менее, оценивая будущие перспективы симметричных многоядерных процессоров, можно заметить признаки новой тенденции «убывающих доходов» [4], в том смысле, что увеличение частоты и количества транзисторов в процессорном ядре в конечном итоге будет неадекватно приросту производительности.

Следует учитывать тот факт, что по мере уменьшения размеров технологического процесса (например, с 65 нм до 45 нм в семействе Nehalem процессоров Intel® Xeon®), транзисторы становятся все быстрее и транзисторов на единицу площади кристалла приходится все больше. С другой стороны, производительность других элементов микроархитектуры, таких как кэша, по мере уменьшения физических размеров возрастает медленнее, чем в линейном масштабе [4]. Таким образом, чрезмерная плотность элементов в чипе будет все в большей степени становиться ограничивающим фактором производительности процессора.

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

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

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

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

Особенности асимметричной архитектуры с точки зрения программирования

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

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

Функциональная асимметрия между процессорными ядрами также может выражаться в различиях на уровне архитектуры набора команд (instruction set architecture, ISA). В процессоре могут присутствовать ядра общего назначения с различиями в поддержке определенных наборов команд; например, в целях уменьшения сложности и размеров кристалла имеет смысл предусмотреть ядра с поддержкой набора команд SSE4 наряду с более простыми ядрами, не имеющими такой поддержки.

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

Во многих отношениях принципы программирования для функционально асимметричных многоядерных процессоров основываются на существующих наработках в области такого оборудования, как графические ускорители, программируемые логические матрицы (field-programmable gate arrays, FPGA), и специализированные интегральные схемы (application specific integrated circuits, ASIC), используемые в качестве сопроцессоров. В частности, значительное внимание привлекли возможности использования графических процессоров для вычислений общего характера (General-purpose programming for GPUs), как возможный способ существенного увеличения производительности в приложениях с большим объемом вычислений с плавающей запятой.

Нетрудно представить, что комплексный подход к программированию даст возможность одновременно использовать широкий ряд специализированных процессорных ядер, по аналогии с тем, как разработанная компанией NVIDIA унифицированная вычислительная архитектура (Compute Unified Device Architecture, CUDA) может применяться для переноса определенной нагрузки на специализированное оборудование. В таком случае, выбор наиболее подходящего для той или иной операции оборудования может даже определяться с учетом таких условий, как приоритетность нагрузки или параметры управления электропитанием [3].

Распределение нагрузки в асимметричных системах

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

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

В целях преодоления этих и других трудностей, специалистами Intel® Systems Technology Lab был разработан AMPS – пакет средств асимметричной мультипроцессорной обработки задач, который улучшает производительность при выполнении задач на многоядерных процессорах, имеющих асимметрию на уровне производительности [5]. Помимо повышения производительности, AMPS также обеспечивает стабильное распределение потоков между соответствующими ресурсами по принципу приоритетности, позволяя добиться предсказуемых и воспроизводимых результатов. Следует отметить, что для работы с AMPS не требуется вносить изменения в приложения, а для операционной системы Linux* потребуются лишь незначительные изменения, что создает опытно-экспериментальную базу для реализации упрощенной поддержки асимметричного оборудования.

AMPS распределяет нагрузку между ядрами в соответствии с их индивидуальными характеристиками, назначая задачи таким образом, чтобы обеспечить высокий общий коэффициент полезного использования ЦП. В этом обработчике используется приоритезация по принципу «более быстрое ядро в первую очередь», что помогает задействовать самые производительные из доступных ядер. В архитектурах с неоднородным доступом к памяти (non-uniform memory access, NUMA) AMPS помогает преодолеть дополнительные затруднения, связанные, например, с миграцией потоков между неодинаковыми ядрами, соединенными с разными контроллерами памяти. По мере развития асимметричных многоядерных процессоров, такие разработки как AMPS предоставят основу для создания программного обеспечения, поддерживающего эту технологию.

В рамках других подходов, программную поддержку асимметричного оборудования предполагается реализовать на уровне приложения. Хотя такой подход повлечет за собой неизбежное усложнение стоящих перед программистом задач, независимость от операционной системы может стать существенным преимуществом, например, в условиях среды с закрытым исходным кодом. В частности, архитектура среды потоковой обработки множества команд (Multiple Instruction Stream Processing, MISP) позволяет программным путем представить процессорные ядра в качестве абстракций, которые могут управляться прикладным программным обеспечением [2]. Программная архитектура и модель программирования EXOCHI расширяет возможности MISP, добавляя поддержку ядер, основанных на отличной от x86 архитектуре, а также предоставляя особую среду программирования C/C++ для реализации этих возможностей [9].

Экспериментирование с асимметричной многоядерной средой

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

Существует ряд способов эмулирования асимметричного набора ядер в рамках одного процессора. Например, путем отключения блоков вычислений с плавающей запятой в ряде ядер, можно добиться того, что для инструкций с плавающей точкой на таких ядрах будут возвращаться ошибки типа «устройство не обнаружено» (device not present). Аналогичным образом, на отдельных ядрах могут быть заблокированы и другие функции, что породит ошибки, обусловливающие передачу нагрузки на другие ядра.

Другой подход заключается в использовании многопроцессорной системы с установкой неодинаковых процессоров в различные сокеты, в результате чего, в частности, могут быть доступны ресурсы с разным набором поддерживаемых инструкций, тактовой частотой, размером кэша и т.п. За счет модификации ядра операционной системы можно реализовать нестандартные алгоритмы обработки ошибок, что позволит перераспределять потоки с ядер, в которых отсутствуют (или отключены) необходимые функции [6].

В экспериментах с асимметричной архитектурой также может учитываться наличие или отсутствие в процессорных ядрах поддержки одновременных многопоточных вычислений. Принимая во внимание недавнее повторное включение этой функции в процессоры Intel Xeon и Itanium®, приобретает актуальность еще один аспект распределения задач. Потоки, совместно обрабатываемые на одном ядре с поддержкой одновременных многопоточных вычислений, взаимодействуют между собой и используют ресурсы процессора совершенно иным образом, чем потоки, распределяемые между отдельными ядрами [4]. Важным соображением является то, что в одних и тех же условиях одновременной обработки множества потоков одни комбинации потоков выполняются эффективнее, чем другие [8], что открывает путь к повышению производительности не только за счет интеллектуального назначения многопоточным ядрам определенных потоков, но и за счет оптимального группирования потоков.

Заключение

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

Благодарности

Автор хотел бы выразить благодарность Тонгу Ли (Tong Li) из Intel Labs за его участие и помощь, без которой данная публикация вряд ли была возможна.

Литература

[1]   S. Balakrishnan, R. Rajwar, M. Upton, and K. Lai. The impact of performance asymmetry in emerging multicore architectures. In Proceedings of the 32nd Annual International Symposium on Computer Architecture, pages 506–517, June 2005.
[2]   R. Hankins, G. Chinya, J. Collins, P. Wang, R. Rakvic, H. Wang, and J. Shen. Multiple Instruction Stream Processor. In Proceedings of the 33rd International Symposium on Computer Architecture, June 2006.
[3]   R. Kumar, K. I. Farkas, N. P. Jouppi, P. Ranganathan, and D. M. Tullsen. Single-ISA heterogeneous multi-core architectures: The potential for processor power reduction. In Proceedings of the 36th Annual IEEE/ACM International Symposium on Microarchitecture, pages 81–92, Dec. 2003.
[4]   R. Kumar, D. M. Tullsen, P. Ranganathan, N. P. Jouppi, and K. I. Farkas. Single-ISA heterogeneous multi-core architectures for multithreaded workload performance. In Proceedings of the 31st Annual International Symposium on Computer Architecture, pages 64–75, June 2004.
[5]   Tong Li, Dan Baumberger, David A. Koufaty, and Scott Hahn. Efficient Operating System Scheduling for Performance-Asymmetric Multi-Core Architectures. In Proceedings of Supercomputing 07, November 2007.
[6]   Tong Li, Paul Brett, Barbara Hohlt, Rob Knauerhase, Sean D. McElderry, and Scott Hahn. Operating System Support for Shared-ISA Asymmetric Multi-core Architectures. In Proceedings of the Fourth Annual Workshop on the Interaction between Operating Systems and Computer Architecture (WIOSCA '08), pages 19-26, June 2008.
[7]   R. Ramanathan, R. Curry, S. Chennupaty, R. L. Cross, S. Kuo, and M. J. Buxton. Extending the world’s most popular processor architecture. White Paper, Intel Corporation, 2007.
[8]   A. Snavely and D. Tullsen. Symbiotic jobscheduling for a simultaneous multithreading architecture. In Eighth International Conference on Architectural Support for Programming Languages and Operating Systems, Nov. 2000.
[9]   P. H. Wang, J. D. Collins, G. N. Chinya, H. Jiang, X. Tian, M. Girkar, N. Y. Yang, G.-Y. Lueh, and H. Wang. EXOCHI: Architecture and programming environment for a heterogeneous multi-core multithreaded system. In Proceedings of the ACM SIGPLAN 2007 Conference on Programming Language Design and Implementation, pages 156–166, June 2007.

Дополнительные ресурсы

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

Портал Intel® Multi-Core Technology and Research Portal предоставляет доступ к широкому спектру ресурсов, посвященных текущим разработкам Intel в области многоядерных технологий, а также перспективным направлениям дальнейших исследований.

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

Книга Multi-Core Programming: Increasing Performance through Software Multithreading, опубликованная издательством Intel Press, поможет разработчикам программного обеспечения в написании высокопроизводительного многопоточного кода.

Об авторе

Мэтт Джиллеспи (Matt Gillespie) – независимый автор и редактор технических публикаций. Он работает в Чикаго и специализируется на новых технологиях в сфере компьютерного оборудования и программного обеспечения. Перед тем, как начать самостоятельную деятельность, Мэтт занимался подготовкой учебных курсов для разработчиков в Intel Corporation, а также работал в отделе технического обслуживания и сетевых технологий Федерального банка Калифорнии. В начале своей карьеры он был составителем и редактором публикаций в области финансов и нейробиологии.

Загрузить PDF

В преддверии второй волны многоядерных технологий: процессоры с асимметричными (неоднородными) ядрами [PDF 82 Кб]

Охраняется авторским правом © 2008 Intel Corporation. Все права защищены.



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