Описание процессора Larrabee
Общая информация
История разработки
Larrabee изначально задумывался как конкурент дискретным графическим решениям от NVidia и AMD. Поскольку когда начиналась его разработка, графические платформы уже активно использовались для высокопроизводительных вычислений, Larrabee с самого начала создавался как параллельная архитектура общего назначения.
В 2007 году стали известны некоторые детали о Larrabee:
- Larrabee будет использовать ядра с модифицированной архитектурой x86;
- Количество ядер не будет фиксированным, а будет изменяться в различных моделях одного и того же семейства, как количество конвейеров в современных ГПУ;
- Larrabee будет использоваться не только как дискретное графическое решение, но и как набор графических ядер, встроенных в обычный многоядерный процессор;
- В отличие от современных ГПУ, Larrabee для выполнения большинства задач визуализации, например, растеризации, использует свои ядра. Современные ГПУ используют для этого специализированные аппаратные решения, которые не являются программируемыми.
Детализированное описание архитектуры Larrabee было опубликовано в журнале ACM Transactions on Graphics в 2008 году. По этой статье был доклад на конференции SIGRRAPH 2008. В настоящее время это основной источник сведений об архитектуре Larrabee.
Планы на будущее
В соответствии с планами Intel, первые образцы чипов Larrabee появятся в конце 2008 года. Графические решения на основе Larrabee появятся в 2009 или 2010 году. Ожидается, что графически карты на основе Larrabee для верхнего ценового сегмента будут иметь 32 ядра, производиться по 45-нм техпроцессу и иметь пиковую производительность 2 TFlop/s на операциях с одинарной точностью. Позднее планируется переход на 32-нм техпроцесс.
Ссылки
- Статья Intel о Larrabee в журнале ACM Transactions for Graphics. В настоящее время основной источник информации о Larrabee. Авторы статьи рассматривают архитектуру и приводят обоснование принятых архитектурных решений. Также анализируется производительность Larrabee в ряде компьютерных игр.
- Статья о Larrabee в Wikipedia. Приводятся общие сведения, а также сравнения с некоторыми другими архитектурами.
Архитектура
Общая схема
Общая схема архитектуры Larrabee приведена на следующем рисунке.
Как можно видеть из рисунка, основными компонентами архитектуры Larrabee являются вычислительные ядра, устройства кэша 2-го уровня, текстурные устройства и контроллер доступа к памяти. Они соединены внутренней кольцевой шиной (ВКШ), которая имеет ширину 1024 бит (по 512 бит в каждую сторону) и обеспечивает связь компонент по топологии кольца.
Вычислительное ядро
При разработке вычислительного ядра за основу был взят процессор P54C с архитектурой x86. Из него исключили функциональность исполнения программы с внеочередным выполнением команд, поскольку это позволило значительно сократить площадь, занимаемую на кристалле одним ядром. Это позволяет разместить на кристалле большее число ядер и повысить общую производительность системы.
Общая схема одного вычислительного ядра Larrabee приведена на следующем рисунке.
Скалярное вычислительное устройство имеет архитектуру x86. Это означает, что существующие программы могут использовать Larrabee как многоядерный процессор для многопоточной обработки без изменения кода. Larrabee поддерживает возможности, характерные для современных процессоров на базе архитектуры x86, в частности, 64-разрядные расширения и команды для эффективной работы с кэшем. Поддерживаются также некоторые специальные команды, например, команда побитового сканирования содержимого регистра с определением первого бита со значением 1.
Ядра Larrabee поддерживают аппаратную многопоточность, по аналогии с технологией Hyper Threading. Это решение характерно для современных ГПУ и позволяет частично решить проблему дисбаланса производительности памяти и процессора. Если один из потоков простаивает, выполняя операцию с памятью или кэшем, исполняются команды другого потока, таким образом сокращается время простоя центрального процессора. Одно ядро Larrabee поддерживает одновременно до 4-х аппаратных потоков, каждый из которых имеет свой набор регистров.
Скалярное вычислительное устройство Larrabee имеет два конвейера. Как и во многих других процессорах компании Intel, в которых используется такое решение, первый конвейер может выполнять любые команды, а второй - только часть команд. Задача выбора правильного порядка команд возлагается на компилятор, поскольку Larrabee не поддерживает внеочередное выполнение команд. Выбор подмножества команд для второго конвейера был обусловлен, с одной стороны, минимизацией площади второго конвейера на чипе, с другой стороны, минимизацией нагрузки на компилятор по правильному упорядочиванию команд.
Векторное функциональное устройство
Основным отличием ядра Larrabee от других процессоров Intel является использование векторных команд с обработкой большого числа данных. Один операнд векторной команды имеет размер 512 бит, или 16 вещественных чисел с одинарной точностью. Такой же размер имеют векторные регистры. Более традиционные процессоры Intel поддерживают векторные команды с обработкой 4-х значений с одинарной точностью (128 бит). Более широкий размер операнда векторной команды позволяет повысить производительность исполнения шейдеров при снижении общей площади ядра на кристалле. Поскольку именно векторное ФУ дает наибольший вклад в вычислительную мощность ГПУ Larrabee, его использование является ключевым для достижения высокой производительности на реальных задачах.
Общая схема векторного ФУ (ВФУ) приведена на следующем рисунке.
Большинство векторных команд является трехадресными, при этом один из операндов может находиться в оперативной памяти. При передаче операндов из памяти поддерживается преобразование типов и заполнение. При этом преобразование может проходить не только между стандартными типами, но и с более специальными, например, 16-битными вещественными числами. Заполнение позволяет "заполнить" операнд копиями одного и того же элемента данных, не занимая при этом явно регистр. Для операндов из векторных регистров поддерживается перестановка различных компонент регистра.
ВФУ содержит регистр маски. Традиционно для ОКМД-архитектур, регистр маски может использоваться для временного отключения обработки по части компонент. В ряде случаев это позволит избежать использования условных команд и повысить производительность.
Система команд ВФУ включает команды с целыми типами данных, а также с вещественными типами данных с одинарной и двойной точностью. Одно векторное ФУ способно исполнять до двух команд за такт.
Введена также команда векторной загрузки данных из памяти. Эта команда трактует свой операнд как векторный регистр, каждый компонент которого задает 32-разрядный адрес в памяти, и загружает данные по этим адресам. В случае когерентности адресов это позволяет значительно сократить накладные расходы на доступ к памяти. Подобная команда очень полезна для программ, использующих сложные и неравномерные структуры данных. На тестах, проведенных Intel, использование этой команды позволяло достигать троекратного увеличения производительности при работе с нерегулярными структурами данных.
С учетом системы команд ВФУ, одно ядро может использоваться для одновременной обработки нескольких (до 16) логических шейдерных потоков одновременно, при этом управляющие структуры могут моделироваться при помощи регистра маски. Альтернативный вариант - рассматривать Larrabee как векторный процессор и использовать его соответствующим образом.
Кэш
В Larrabee имеется кэш первого и второго уровня. Кэш первого уровня входит в состав ядра. На один аппаратный поток приходится 8 КБ кэша команд и 8 КБ кэша данных; таким образом, размер кэша одного ядра составляет 64 КБ.
Кэш второго уровня расположен отдельно от ядер и разделен на разделы, по одному на ядро. Каждое ядро имеет быстрый доступ к своему разделу кэша второго уровня. Кроме того, все кэши второго уровня соединены внутренней кольцевой шиной, которая используется для обеспечения когерентности данных при записи.
Как и в современных процессорах Intel, в Larrabee поддерживаются специальные команды для эффективной работы с кэшем. Они включают команды предвыборки (prefetching), т.е. явной загрузки данных из ОЗУ в кэш 1-го или 2-го уровня, а также команды смены приоритета кэш-линии. Последнее может использоваться при последовательной обработке массивов. Снижение приоритета вновь загруженных данных позволяет избежать замусоривания кэша и повысить производительность.
Использование традиционной схемы кэширования, в отличие от явно адресуемой памяти, как в CELL, было вызвано двумя причинами. Во-первых, это позволит использовать кэш в алгоритмах с более сложными схемами доступа к памяти, например, трассировке лучей. Во-вторых, использование кэша позволит не терять производительность на уже существующих программах.
Текстурные устройства
При дизайне архитектуры Larrabee было принято решение не реализовывать этапы алгоритма визуализации аппаратно, если их можно было эффективно реализовать программно. По этой причине растеризация треугольников и большинство других этапов алгоритмов визуализации выполняется программно. Однако выборку из текстур с последующей фильтрацией было решено реализовать аппаратно по следующим соображениям:
- Фильтрация текстур в основном работает с 8-разрядными значениями, в то время как ВФУ Larrabee оптимизирован для работы с 32-разрядными значениями;
- Декодирование прочитанных из памяти значений эффективнее производить аппаратно;
- Аппаратная реализация от 12 до 40 раз быстрее программной, что может быть критично в ряде приложений.
Используемые аппаратные текстурные устройства в целом похожи на те, что используются в других современных ГПУ. В частности, каждое текстурное устройство содержит 32 КБ кэша первого уровня, а также логику для реализации различных алгоритмов декодирования и фильтрации. Для выдачи текстурных команд используется кэш второго уровня, а для обмена с памятью - контроллер памяти, доступный через внутреннюю кольцевую шину.
Сравнение с существующими архитектурами
Имеет смысл проводить сравнение с одной стороны, с традиционными многоядерными архитектурами (x86), с другой стороны - с нетрадиционными архитектурами, в частности, ГПУ и процессором CELL.
Сравнение с традиционными многоядерными архитектурами
И Larrabee, и традиционные многоядерные процессоры имеют архитектуру x86. И те, и другие имеют более одного ядра, поддерживают аппаратную многопоточность (Hyper Threading), кроме того, поддерживают специальные команды для работы с кэшем. Многопоточные приложения, не использующие SSE, могут исполнять на Larrabee и x86 один и тот же программный код.
Однако в случае Larrabee инженеры пошли значительно дальше в плане приспособления процессора для высокопроизводительных вычислений, так что, несмотря на общую поддержку x86, различий между двумя архитектурами больше, чем сходств:
- В то время как архитектура многоядерных процессоров ориентирована на небольшое фиксированное число ядер (до 8), в архитектуре Larrabee число ядер по определению масштабируемо между различными моделями семейства. Соответственно, создаваемое программное обеспечение должно быть масштабируемо на большое число ядер;
- Ядра Larrabee не поддерживают внеочередное выполнение команд. Это позволяет сократить размер ядра и повысить общую производительность системы;
- Larrabee поддерживают векторные операции с 512-разрядными операндами. С одной стороны, это позволяет повысить общую производительность системы, с другой - предъявляет больше требований к компиляторам и программистам для создания эффективных программ;
- Larrabee содержит ряд новых команд, в частности, команду выборки данных из памяти по вектору адресов;
- Larrabee имеет аппаратную поддержку декодирования и фильтрации текстур;
- Larrabee использует трехадресные векторные команды, как и современные ГПУ.
Сравнение с существующими ГПУ
И Larrabee, и существующие ГПУ предназначены прежде всего для решения задачи построения изображений трехмерных сцен в реальном времени. Однако при разработке Larrabee была учтена тенденция использования ГПУ для высокопроизводительных вычислений. Поэтому Larrabee больше похож на традиционный многоядерный процессор, чем современные ГПУ. Их основные отличия:
- Современные ГПУ аппаратно реализуют большую часть конвейера визуализации, в частности, растеризацию, сборку примитивов, пиксельные операции и т.д. Larrabee аппаратно реализует только фильтрацию текстур, все остальное выполняется полностью программно;
- Современные ГПУ могут одновременно выполнять только один шейдер. Larrabee может выполнять различные шейдеры на каждом ядре. Понятие "ядра" в Larrabee очень похоже на понятие мультипроцессора в ГПУ NVidia. Ядро или мультипроцессор - это минимальная единица, в рамках которой все конвейеры выполняют одну и ту же операцию; различные ядра и мультипроцессоры могут работать независимо;
- Современные ГПУ поддерживают значительно большее количество аппаратных потоков, чем Larrabee;
- Высокая производительность Larrabee достигается за счет использования \ векторных команд большого размера. С другой стороны, современные ГПУ ориентированы либо на векторные команды малого размера (AMD), либо на скалярные команды (NVidia);
- Средства синхронизации в Larrabee более развиты, чем в ГПУ.
Сравнение с CELL
Из существующих архитектур Larrabee больше всего напоминает процессор CELL. Между ними имеется ряд сходств:
- Оба процессора можно условно назвать "нетрадиционными многоядерными архитектурами";
- Они имеют сходное внутреннее устройство - набор независимых компонент, связанных общей шиной;
- Обе архитектуры ориентированы на использование как в качестве основного процессора, в качестве дополнительных ядер, так и в качестве вспомогательного процессора;
- Обе архитектуры строились на основе других, уже существующих и активно используемых.
Однако между ними имеется ряд различий:
- Larrabee использует значительно больший размер вектора (512 бит) по сравнению с CELL (128 бит), что требуется учитывать при написании эффективных программ;
- Larrabee поддерживает аппаратную многопоточность, в отличие от CELL;
- Работа с памятью в Larrabee менее детерминирована, чем в CELL. Larrabee содержит традиционную схему кэшей первого и второго уровня, в то время как CELL использует полностью детерминированную схему работы с памятью. С другой стороны, на CELL возможна программная реализация кэша, в то время Larrabee содержит команды для быстрой работы с кэшем, которые позволяют имитировать схему работы с детерминированной памятью.
Средства программирования
Средством программирования нижнего уровня для Larrabee является система Larrabee Native. Она состоит из следующих компонент:
- Компилятор C/C++ Larrabee Native. Он компилирует код на языке C++ в код для процессора Larrabee. Для программирования векторных устройств Larrabee поддерживаются встроенные функции (intrinsic) для векторных операций и вставки ассемблерного кода для Larrabee. В ряде случаев компилятор также в состоянии выполнять автоматическую векторизацию циклов. Имеется поддержка директив OpenMP;
- Потоковая библиотека времени выполнения предназначена для управления потоками на Larrabee. Она представляет собой расширение библиотеки P-Threads. В частности, добавлена возможность задавать привязку потока к определенному ядру. Имеется также интерфейс для программирования легковесных задач, схожий с Intel Thread Building Blocks;
- Связь с основным процессором. Процессор на основе Larrabee может либо устанавливаться как дополнительные ядра в основной процессор, либо как отдельный процессор на плате в слот расширения. В обоих случаях управление осуществляется драйвером ОС. Любая программа, исполняемая на Larrabee, связана с программой, исполняемой на основном процессоре. Имеется интерфейс быстрой передачи данных между двумя процессорами на основе передачи сообщений. Исполнение некоторых стандартных функций C++, например, ввода-вывода, делегируется на основной процессор.
Дополнительные модели программирования реализуются поверх низкоуровневой модели и используют ее API для реализации своей функциональности. К таким моделям программирования относятся:
- Язык программирования Ct;
- Различные прикладные библиотеки, к примеру, Intel MKL;
- Модели программирования, типичные для ГПУ, например, шейдеры OpenGL.
© Лаборатория Параллельных
информационных технологий НИВЦ МГУ