Чем векторный процессор отличается от обычного
Они оба могут обрабатывать несколько инструкций одновременно, но я полагаю, что есть фундаментальное различие, объясняющее, почему есть два имени, и мы не всегда просто переключаемся на использование суперскалярных?
Кроме того, если я правильно понял, в современном процессоре присутствуют как скалярные, так и векторные инструкции, поэтому я полагаю, что эти два не являются взаимоисключающими (скалярные инструкции, такие как mov или add, будут выполняться суперскалярно и, например, скалярное произведение будет вычисляться как вектор - в какой-то особой чёрной магии-образе)?
Принимая во внимание отрицательные и отрицательные голоса, объяснение будет приветствоваться. Мне кажется, что этот вопрос является конкретным и достаточно ясным, и реальным вопросом, с которым я столкнулся в отношении программного или аппаратного обеспечения, в соответствии с указаниями. Luke 5 лет назад 1
Потоковые процессоры и GPU
Следующим шагом в развитии идеи SIMD стали потоковые мультипроцессоры (Streaming Multiprocessor, SM), в которых имеются массивы, состоящие из отдельных процессорных устройств, каждое со своим набором регистров размером с машинное слово — все процессоры автономны, но работают синхронно, выполняя одну и ту же команду над различным содержимым регистров [4].
Рис. 1. Потоковый процессор |
Потоковые мультипроцессоры (рис. 1) были разработаны в Стэнфордском университете исключительно для медийных приложений, а исследования финансировались агентством DARPA. Сразу после первых публикаций в судьбе SM произошел поворот — обнаружилось их новое применение в графических процессорах (Graphicsl Processing Unit, GPU), используемых для игр, хотя в первых публикациях разработчики вообще не упоминали игры как потенциальные сферы приложений.
Первые потоковые GPU на основе SM, Nvidia GeForce 8 и ATI FireStream, переименованного в AMD Stream Processor, вышли на рынок в 2006 году. Сначала появилась возможность создавать программируемые GPU, давшие заметный импульс игровой индустрии и, как следствие, большие прибыли, что открыло возможности для быстрого развития GPU — удвоение их производительности происходит сейчас каждые полгода. Вскоре открылась перспектива применения GPU и для вычислений, это дало жизнь новому направлению, известному как графические процессоры универсального назначения (General-Purpose Graphics Processing Unit, GPGPU).
Этапы развития GPU
Историю GPU можно условно разделить на семь поколений, появлению которых предшествовала некоторая предыстория. Начиная с 1979 года компания Ikonas выпускала мелкими сериями графические ускорители, предназначенные для полетных тренажеров. Тогда еще не было мощных тиражируемых микропроцессоров, поэтому такие системы были доступны только для специальных приложений. А первые дешевые ускорители графики появились в составе персональных компьютерах Atari и Amiga, на которых работали шейдеры. Для IBM PC была создана карта IBM Professional Graphics Controller (PGA) на процессоре Intel 8088.
Поколение 1. В 1993 году компания SGI выпустила графическую плату RealityEngine, а вскоре компании 3DFX, Nvidia, ATI и Matrox начали производить графические контроллеры 2D и 3D для популярных в то время игр Quake и Doom.
Поколение 2. В 1996 году компания 3DFX, купленная позже Nvidia, выпустила первую игровую карту Voodoo, а в 1999-м появились ее аналоги — GeForce256 от Nvidia и Radeon 7500 от ATI.
Поколение 3. Раньше других в 2001 году программируемый конвейер был внедрен в Nvidia GeForce 3, в котором появились небольшие ядра, программируемые на языке, подобном Ассемблеру. То же самое появляется в ATI Radeon 8500 и Microsoft X Box.
Поколение 4. В 2002 году на рынок были выпущены первые полностью программируемые карты Nvidia GeForce FX и ATI Radeon 9700.
Поколение 5. В 2004 году выпущены GPU GeForce 6 и Radeon X800 с интерфейсом PCI-Express и возможностью программировать на языках высокого уровня Brook и Sh, которые до сих пор существуют в виде открытого ПО.
Поколение 6. В 2006 году Nvidia GeForce 8 стал первым GPU с массовым параллелизмом — его справедливо будет назвать потоковым или GPU общего назначения с поддерживаемым языком программирования CUDA (Compute Unified Device Architecture). С небольшим отставанием появился процессор ATI Stream.
Поколение 7. К 2010 году усилилась тенденция к программируемости GPU — процессоры становятся похожи на CPU, выпускается Nvidia Fermi GPU, предназначенный для GPGPU, а GTX480 Fermi имеет 15 потоковых процессоров по 32 ядра в каждом, то есть всего 480 ядер CUDA. Компания AMD ответила линейкой Fusion, «ускоренное процессорное устройство» (Advanced Processing Unit, APU) которого сочетает в себе CPU и GPU, а корпорация Intel выпустила процессор Larrabee.
Основы SM
Функционирование SM основывается на двух «слонах»: локализация (locality), или привязка к вычислительным узлам (к программным операциям), и согласованный между узлами параллелизм действия (concurrency). Локализация и параллелизм воплощены в программной модели потока (Stream Programming Model, SPM), а сама SPM строится на разделении приложений на две составляющие: на потоки — записи из данных одного типа (числа и более сложные структуры) и ядра — операции, выполняемые над входными потоками. SPM работает на процессоре предельно упрощенной архитектуры (рис. 2), который отличается от традиционного CPU наличием набора регистров для потоков данных (Stream Register File, SRF) и устройства для исполнения ядер (Kernel Execution Unit, KEU). В архитектуре SM локализация и параллелизм поддерживаются непосредственно на уровне набора команд, а SRF служит средством коммуникации между потоками KEU и памятью.
Рис. 2. Архитектура потокового процессора |
Процессор приложений (Application Processor) имеет собственный набор команд, архитектурно напоминает RISC и служит для управления прохождением потоков — для этого имеются интерфейсы с SRF, KEU и памятью. Команды, обращенные к памяти, позволяют загрузить (load_stream) и сохранить (store_stream) поток, а обращенные к KEU — загрузить ядро (load_kernel) и выполнить ядро (run_kernel). После того как ядро загружено, KEU обрабатывает поток с использованием своего собственного набора команд. Этот набор команд тоже аналогичен RISC, но управляет только функциональностью, которая находится внутри KEU.
Над потоками могут быть выполнены следующие типы операций:
- Map-Apply («отобразить и применить») — применяется ко всем элементам потока;
- Gather and Scatter («собрать и распределить») — применяется к адресуемой с помощью вектора части потока;
- Reduce («сократить») — выделение потока меньшей мощности из большего по размерам потока;
- Filter («фильтровать») — выделение части потока по какому-то признаку;
- Sort («сортировать») — превращение потока в упорядоченный набор данных;
- Search («искать») — выделение определенных элементов потока.
В SPM есть два типа локальности: ядерная (kernel locality) и локализация связи между источником и получателем данных (producer-consumer locality). Локальность — ключ к желаемому параллелизму. При ядерной локализации ссылки на переменные ограничены только ядром, за исключением чтения входного потока и записи в выходной поток. Локализация связи распространяется на обмен данными между ядрами — для того чтобы SM мог работать, необходимо, чтобы поток, порожденный ядром-поставщиком, был немедленно поглощен ядром-потребителем. Исполнение локализовано в ядрах, а передача потоков осуществляется через связи между парами ядер. Наличие локализации гарантирует три типа коммуникаций: местные — скалярные внутри ядра; потоковые — между ядрами; глобальные — обмен с устройствами ввода-вывода.
Описанные подходы к локализации данных и их обработке открывают возможности для нескольких типов параллелизма:
- на уровне команд (Instruction Level Parallelism): параллельное выполнение скалярных операций в ядре;
- параллелизм данных (Data Parallelism): одни и те же шаблоны вычислений применяются параллельно к различным элементам потоков;
- параллелизм задач (Task Parallelism): традиционное распараллеливание вычислений.
Первым SM был медийный процессор Imagine Media Processor, разработанный в Стэнфорде и изготовленный компанией Texas Instruments в 2001 году. В Imagine было восемь KEU, собранных в кластер, работающий в режиме SIMD. Каждый из KEU состоит из шести устройств для выполнения операций с плавающей точкой, в их числе три сумматора, два устройства умножения и одно — для деления и извлечения квадратного корня. В отличие от идеальной схемы (рис. 2), в нем нет встроенного процессора приложений — Imagine был задуман как сопроцессор. При такой схеме за выполнение скалярных команд отвечает хост-процессор, а потоковые команды передаются через потоковый контроллер в Imagine. Все входные и выходные потоки передаются через SRF.
Система программирования для Imagine Media Processor состоит из двух Cи-подобных языков KernelC и StreamC, каждый из них имеет свой собственный компилятор. Таким образом обеспечивается управление исполнением и управление потоками данных. Ядро, написанное на KernelC, оперирует содержимым потоков, образованным вычислительным циклом с итерацией, обрабатывающим входной поток и создающим выходной поток. Управляющая потоками программа пишется на StreamC. Однако система программирования из двух связанных языков программирования не может быть жизнеспособной, поэтому в Лаборатории машинной графики Стэнфордского университета в 2003 году был разработан язык BrookGPU, ставший родоначальником современных потоковых языков программирования. Под влиянием Imagine были созданы экспериментальные компьютеры Merrimac и 64-битный FT64. Особо стоит отметить IBM Cell, в котором внутренний кластер собран из полноценных CPU, что позволяет им обрабатывать разные потоки.
В результате коммерциализации проекта Imagine в 2007 году была создана компания Stream Processors, выпустившая семейство процессоров Storm-1, рассчитанное на системы для обработки цифровых сигналов (Digital Signal Processing, DSP). И примерно тогда же началось постепенное заимствование идей потоковой обработки двумя основными производителями GPU, компаниями AMD и Nvidia.
2 ответа на вопрос
Суперскалярная процессор способен выполнять несколько команд в рамках одной программы параллельно. Это делается путем анализа потока команд, чтобы определить, какие инструкции не зависят друг от друга, и наличия нескольких исполнительных блоков в процессоре для одновременной работы (например, нескольких ALU ). Как правило, поддержка компилятора не требуется для оптимизации кода для суперскалярных процессоров, поскольку функциональные возможности, как правило, полностью реализованы на аппаратном уровне. 1
Векторный процессор содержит инструкции, специально предназначенные для работы на целых группах нескольких значений данных одновременно (называемые массивы или векторах ). Большинство современных высокопроизводительных процессоров содержат некоторую форму векторной обработки; например; SSE ADDPS инструкции доступны в большинстве процессоров x86 вычисляет сумму двух векторов каждая из которых содержит четыре с одинарной точностью значения. Компилятор, разработчик и операционная система обычно требуют использования векторных инструкций, и не каждый процессор, даже в нынешних поколениях, поддерживает самые передовые векторные инструкции (например, процессоры Intel Celeron и Pentium, даже в Kaby Lake, не поддерживают AVX). ).
В этом ответе содержится дополнительная техническая информация о том, как современные процессоры достигают высокой производительности .
1 Альтернативный и довольно необычный подход к проектированию состоит в том, чтобы иметь несколько исполнительных блоков, но позволить компилятору определять, какие инструкции выдавать каждому исполнительному блоку для каждого тактового цикла. Это называется очень длинным командным словом и обычно встречается только на специализированных процессорах.
Поскольку никто не придумал ответ, я думаю, что я понял это за это время.
Скалярный процессор - это обычный процессор, выполняющий скалярные инструкции, которые работают над одним числом одновременно. Ничего особенного.
Суперскаляр - это термин, используемый для обозначения конкретной оптимизации, позволяющей скалярным инструкциям выполняться параллельно на разных «обычных» исполнительных блоках (например, нескольких ALU). Он делит инструкции на несколько «потоков» (я только что придумал этот термин), которые затем выполняются одновременно.
Так чем же они отличаются от своих векторных аналогов? Скалярные инструкции не предназначены для выполнения таким образом . Существует множество возможных опасностей, которые могут возникнуть и предотвратить полностью параллельное выполнение, например, данные или процедурные зависимости. В этом случае выполнение этой инструкции должно будет ждать удовлетворения ее зависимостей, приостанавливая выполнение этого «потока». Процессор должен позаботиться обо всех зависимостях, чтобы избежать повреждения данных, поэтому следует соблюдать особую осторожность при оптимизации выполнения таким образом.
Он также не вводит никаких новых инструкций - все выглядит как обычная скалярная работа процессора. С другой стороны, векторные процессоры имеют специальные инструкции для векторных операций. Основное отличие состоит в том, что для векторных операций программист (или, вернее, компилятор) должен заботиться о данных, и поскольку нет одновременного вмешательства в разные регистры (помните, что все значения упакованы в широкие регистры), различные опасности избегать С другой стороны, суперскалярные процессоры делают все возможное, чтобы выяснить, какие инструкции не зависят друг от друга, и выполнять их одновременно.
Заметьте, как я никогда не говорил, что какие-либо категории являются взаимоисключающими? Это не так. Векторные блоки будут выполнять векторные инструкции, а процессор попытается найти лучший способ распараллеливания скалярных. Фактически, все современные процессоры поддерживают как векторные инструкции (SSE *, 3DNow !, AVX, . ), так и скалярные (x86), которые будут выполняться «суперскалярным» способом.
Великое объяснение. После полного понимания вашего объяснения мой вопрос заключается в том, что, если процесс поддерживает суперскалярные инструкции, как я могу убедиться, что моя программа на C использует суперскалярные инструкции, если я, например, выполняю умножение матриц. Что-то сделано компилятором, если поддерживается суперскалярная инструкция? Whoami 3 года назад 0
Часть компьютера,которая позволяет ему функционировать, выполняя указания различных программ — центральный процессор (Процессор).Центральный процессор,также называемый процессор, это программа которая получает инструкции,декодирует эти инструкции,разбивая их на отдельные части,выполняет данные инструкции и делает отчеты о результатах,записывая их обратно в память.Процессор поставляется в одном из двух основных типов: векторные и скалярные процессоры.Разница между ними в том, что скалярные процессоры работают только на одну точку данных одновременно,в то время как векторные процессоры работают на массив данных.
Скалярный процессор самый простой тип процессора.Этот процесс имеет по одному объекту,как правило,целые числа или числа с плавающей точкой,которые являются числами слишком большими или малыми,что бы быть представлены целыми числами. Так как каждая команда обрабатывается последовательно,основная скалярная обработка может занять некоторое время.Большинство современных компьютеров имеют тип скалярного процессора.
В отличие от этого, векторный процессор работает на массив точек данных.Это означает,что вместо обработки каждого элемента по отдельности,векторный процессор обрабатывает сразу несколько элементов,имеющих одинаковые инструкции,которые могут быть обработаны одновременно.Это может сэкономить время по сравнению с скалярной обработкой,но также добавляет сложности к системе,которая может замедлить другие функции.Векторная обработка данных работает лучше всего, когда есть большой объем данных,подлежащих обработке групп,которые могут обрабатываться одной инструкцией.
Векторные и скалярные процессоры различаются также и в их времени запуска.Векторный процессор зачастую требует длительной загрузки компьютера,поскольку он выполняет много задач,которые нужно выполнить.Скалярные процессоры запускают компьютер в гораздо более короткий промежуток времени, поскольку выполняются только одна задача.
Суперскалярный процессор имеет элементы каждого типа и объединяет их для еще более быстрой обработки.Использование параллелизма на уровне инструкций,позволяет суперскалярную обработку выполнять за несколько операций одновременно.Это позволяет процессору выполнять гораздо быстрее задачи,чем обычный скалярный процессор,без дополнительных сложностей и других ограничений векторного процессора.Но с этим типом процессора могут быть проблемы,так как он должен определить, какие задачи могут выполняться параллельно,которые зависят от других задач, на стадии завершения первой задачи.
Векторные и скалярные процессоры по прежнему используются на ежедневной основе.Некоторые игровые приставки, например,используют сочетание обоих и векторных и скалярных процессоров.Векторная обработка данных рассматривается в перспективе при работе с мультимедийными задачами, в которой одна команда может решить большой объем данных, необходимых для видео и аудио.
[share-locker locker_id=»ead8c8d037f1fbbd8″ theme=»blue» message=»Если Вам понравилась эта статья,нажмите на одну из кнопок ниже.СПАСИБО!» facebook=»true» likeurl=»CURRENT» vk=»true» vkurl=»CURRENT» google=»true» googleurl=»CURRENT» tweet=»true» tweettext=»» tweeturl=»CURRENT» follow=»true» linkedin=»true» linkedinurl=»CURRENT» ][/share-locker]
Векторный процессор является одним из двух различных типов компьютерных процессоров: векторные и скалярные.Векторный процессор отличается от скалярного процессора в том,что он выполняет вычисления вектора в целом.Вектор-это одномерный массив, или один ряд значений,таких как список номеров. Скалярный процессор работает с каждым из чисел по отдельности;он может делать разные вещи с многими разными номерами.Векторный процессор,с другой стороны,выполняет ту же самую процедуру для всех сразу номеров.
Этот тип процессора,является более специализированным,чем скалярный процессор,что делает его менее популярным выбором для среднего компьютера.Средний компьютер выполняет широкий спектр задач,и самый быстрый способ сделать много разных типов задач с помощью скалярных процессоров.Это потому, что процессор может переключаться между задачами гораздо быстрее.Векторный процессор используется в высококвалифицированной специализированной электронике,такой как супер-компьютеры.Эти процессоры являются гораздо более эффективными,когда используются для крупномасштабных проблем.Небольшие задачи,такие как открытие документа word или воспроизведение видео,могут быть выполнены с помощью скалярного процессора быстрее, чем векторный процессор.
Помимо суперкомпьютеров,есть и другое широкое применение для векторных процессоров.Векторные процессоры используются в военных целях.Они очень хороши для кодирования и декодирование ультразвуковых локаторов и радарных сигналов и, как правило,могут обработать сигнал гораздо быстрее,чем скалярный процессор.Эти процессоры также хорошо симулируют различные события,такие,как тип погоды,физические тесты,и всё остальное,для чего требуется огромное количество скорости выполнения задач.
Часто существует большое количество векторных процессоров,которые используются в сочетании.Эти процессоры хорошо работают вместе,и с большим количеством процессоров, для решения же задач,при этом затраченное время резко сокращается. Такая работа как супер-ЭВМ имеет огромное количество процессоров соединённых вместе, чтобы решить общие проблемы.
Векторные процессоры являются примером того,как специализированные устройства работают над конкретной задачей, чем многофункциональное устройство. Векторный процессор был специально построен для обработка больших объёмов данных и является очень эффективным в этом.Улучшения в скалярной технологии,особенно с точки зрения микропроцессоров влечёт за собой общее снижение в использовании векторных процессоров, даже в супер-компьютерах.
[share-locker locker_id=»4161e690f6eaad9ad» theme=»blue» message=»Если Вам понравилась эта статья,нажмите на одну из кнопок ниже.СПАСИБО!» facebook=»true» likeurl=»CURRENT» vk=»true» vkurl=»CURRENT» google=»true» googleurl=»CURRENT» tweet=»true» tweettext=»» tweeturl=»CURRENT» follow=»true» linkedin=»true» linkedinurl=»CURRENT» ][/share-locker]
Для работы с большими потоками данных, поступающими в реальном времени, требуются гетерогенные процессоры, сочетающие в себе возможности CPU и GPU.
- Ключевые слова / keywords:
- Data-Intensive Computing
- GPGPU
- GPU
- Streaming Multiprocessor
- потоковые процессоры
- Платформы
Для работы с большими потоками данных, поступающими в реальном времени, требуются гетерогенные процессоры, сочетающие в себе возможности CPU и GPU.
Символами нового времени становятся Интернет вещей, взаимодействие машин (Machine-to-Machine, M2M), киберфизические системы, многочисленные формы цифрового искусства, геоинформационные системы, аналитика во всех ее видах и многое другое. Миллиарды устройств по всему миру генерируют, собирают и распределяют огромное количество данных в режиме 24x7 — мы становимся свидетелями такого невиданного прежде явления, как конвергенция цифрового и физического миров. Основным средством, обеспечивающим соприкосновение этих миров, станут, конечно, компьютеры, но не те, какими они были на протяжении предшествующих семидесяти лет; теперь их главная способность будет состоять в возможности справляться с большими потоками поступающих из внешней среды данных.
Какими будут эти компьютеры? Для решения проблем, порожденных конвергенцией миров, на компьютеры из Top500 надежды нет. Одна из возможных альтернатив — Data-Intensive Computing (DIC) [1], которые отличаются такими качествами, как связь с окружающей средой и работа в ее контексте. Поэтому DIC еще называют Context-Aware Computing (CAC) [2], имея в виду способность компьютеров воспринимать извне большие объемы данных, поступающих по сетям и от разнообразных датчиков. К компьютерам, поддерживающим CAC, предъявляется ряд требований, среди которых способность обрабатывать в параллельном режиме большие потоки входных данных и энергетическая эффективность.
А на каких процессорах можно построить такие компьютеры? На данный момент одним из важнейших компонентов процессорной базы систем DIC могут стать графические процессоры. Благодаря прибыльности индустрии развлечений, за более чем тридцатилетнюю историю они прошли путь от простых графических ускорителей до полноценных потоковых процессоров, сменив векторные процессоры, более 40 лет использовавшиеся в высокопроизводительных системах.
Литература
В связи с появлением векторных процессоров NEC SX-Aurora и гибридных вычислительных систем TSUBASA на их основе обострилась дискуссия о противостоянии традиционных процессоров и ускорителей различного типа, включая и GPU.
- Ключевые слова / keywords:
- HPC
- HPC
- NEC
- Графические процессоры
- GPU
- Суперкомпьютеры
Гибридные вычислительные системы NEC TSUBASA на базе новых векторных процессоров SX-Aurora представлены в диапазоне от рабочих станций до суперкомпьютеров и отличаются не только высокой производительностью, но и эффективной работой с памятью, что позволяет их использовать не только для высокопроизводительных вычислений, но и для обработки больших данных и решения задач искусственного интеллекта, где уже применяются специализированные акселераторы, включая GPU.
Еще со времен первых систем Cray в суперкомпьютерах применяются векторные операции, а поддержка коротких векторов реализована уже и в ПК, что сегодня возможно благодаря применению в x86-процессорах Intel технологии AVX512, обеспечивающей работу с векторами длиной 512 бит (8 чисел с плавающей запятой двойной точности, DP). При поддержке распространенных в HPC-приложениях команд типа «умножить-и-сложить» каждое соответствующее исполнительное устройство в процессоре архитектуры Intel Skylake дает 16 DP-результатов за такт. Новые процессоры NEC SX-Aurora (SX-10+) поддерживают работу с более длинными векторами и с более расширенной функциональностью.
Процессоры SX-10+, именуемые в NEC также Vector Engine (VE), имеют 8 ядер, состоящих из скалярного и векторного блока. В каждом ядре содержится по 64 векторных регистра длиной по 256 DP-элементов, имеющих по 64-разряда. Соответственно, суммарная емкость регистров в каждом ядре составляет 128 Кбайт. В эти регистры помещаются исходные данные для выполнения векторных команд и результаты.
Ядра SX-10+ поддерживают выполнение векторных команд «умножить-и-сложить», для чего у них имеется по три устройства FMA (Floating Point Multiply Add) [1, 2], однако на каждом такте из векторных регистров в FMA поступает по 32 DP-элемента (е) векторов и формируется 32 DP-числа результата (рис. 1). Общая операция над 256 DP-элементами векторов завершается за 8 тактов. Таким образом, пиковая производительность ядра за такт составляет 32 x 2 x 3 = 192 FLOPS. Для сравнения, поддерживающие технологию AVX512 ядра процессоров Skylake дают за такт по 32 FLOPS, как и ядра процессоров-акселераторов KNL (Xeon Phi семейства x200 содержат до 72 ядер) [3], а в Tesla V100 используются 80 потоковых мультипроцессоров, содержащих по 32 DP-устройства (ядра), которые выдают по два результата, или 64 FLOPS за такт, для одного потокового мультипроцессора и, соответственно, 5120 FLOPS на весь V100.
Производительность VE при работе с 32-разрядными числами одинарной точности вдвое выше, чем при работе с DP [1], однако большинство HPC-приложений работают с DP, поэтому далее все обсуждаемые результаты относятся именно к DP.
Кроме FMA-устройств, каждое ядро SX-10+ имеет устройство для выполнения деления и извлечения квадратного корня, дающих существенный вклад в полное время расчета (например, в приложениях молекулярной механики или молекулярной динамики), однако эти операции при расчете пиковой производительности не учитываются. Ядра VE содержат также устройства для выполнения операций над числами с фиксированной запятой и логических операций. Все эти устройства работают с векторными регистрами [2].
Очень важной для обеспечения эффективной работы с векторами является поддержка пошаговой загрузки векторных регистров из памяти и соответствующей записи из них в память. Кроме того, в SX-Aurora имеются еще и более сложные команды сборки/разборки векторных регистров с непрямым доступом к памяти типа работы с элементами массивов, имеющих двухуровневую индексацию a (index (i)), в синтаксисе языка Fortran. Эти команды поддерживались и в предыдущем поколении векторных процессоров NEC SX-ACE.
Другой кардинально важный для обеспечения высокой производительности компонент архитектуры VE — подсистема памяти. В VE применяется стандарт памяти с высокой пропускной способностью — High Bandwidth Memory (HBM2), трехмерная память стековой организации, интегрированная с процессором на кристалле посредством соединительной подложки (технология «silicon interposer»). Кроме NEC, созданием подложки для VE занимались также компании TSMC и Broadcom. Эта память состоит из блоков, содержащих 4 или 8 «матриц» емкостью по 1 Гбайт, а всего VE имеет шесть блоков HBM2 (рис. 2). Таким образом, общая емкость HBM2 в VE составляет 24 или 48 Гбайт. Канал доступа к каждому блоку имеет пропускную способность 200 Гбайт/с, что дает 1,2 Тбайт/с общей производительности памяти для VE. Для сравнения, в KNL ускоренная память MCDRAM имеет емкость 16 Гбайт при 490 Гбайт/с, а в V100 применяется HBM2 емкостью 16 Гбайт с 900 Гбайт/с, что свидетельствует о преимуществах SX-Aurora.
Важнейшая особенность SX-Aurora, обеспечивающая высокую эффективность работы с памятью, — «интерфейс» между HBM2 и ядрами, представляющий собой общий для них программно управляемый кэш LLC (Last Level Cache). Гранулярность записи данных в LLC cоставляет 8 байт, а гранулярность по доступу к памяти в SX-10+ — 128 байт. Кэш имеет емкость 16 Мбайт (по 2 Мбайт на ядро) и состоит из двух частей по 8 Мбайт (рис. 2). Пропускная способность канала от ядра к кэшу составляет 384 Гбайт/с, а от ядра к памяти — 153,6 Гбайт/с при общей пропускной способности памяти LLC около 3 Тбайт/с. Для связи между двумя частями LLC, как и для связи между ядрами, используется «межсоединение» 2D mesh, концептуально аналогичное применяемому в KNL и Skylake. В LLC поддерживается технология обратной записи, что обеспечивает когерентность кэша и возможность применения традиционного для систем с общей памятью распараллеливания программ посредством OpenMP [1, 2].
Процессоры SX-Aurora — это развитие векторных процессоров NEC SX-ACE, в которых также поддерживались механизмы работы с памятью, обеспечивающие внеочередной доступ: программно управляемый буфер ADB (Assignable Data Buffer) и специальные регистры MSHR (Miss Status Handling Registers) [4]. В SX-Aurora буфер ADB входит в LLC.
Емкость LLC можно сопоставить с емкостью кэшей старшего уровня в процессорах Intel KNL (кэш L2 в моделях Xeon Phi x200 имеет емкость по 0,5 Мбайт на ядро и максимальную емкость 36 Мбайт). Такие же показатели имеет кэш L2 в Xeon Phi архитектуры Knights Mill (модели x205). В серверных процессорах Skylake — Xeon Scalable Processor, в классе Gold емкость кэша L3 в расчете на ядро также существенно ниже, чем у SX-10+, — 1,375 Мбайт. Соответственно, у старших 20-ядерных моделей Intel Xeon 6154 этого класса общая емкость L3 равна 24,75 Мбайт.
Важная особенность вычислительных систем NEC TSUBASA — гибридная архитектура. Эти системы представляют собой серверы под управлением ОС Linux, а процессоры SX-Aurora служат к ним дополнением, однако, в отличие от акселераторов, включая и GPU, приложения выполняются на SX-Aurora полностью, а не отдельными частями. Например, на GPU от Nvidia выполняются только те части приложения, где может быть обеспечена высокая производительность с плавающей запятой, а другие части выполняются на сервере-хосте стандартной архитектуры, тогда как в SX-Aurora приложение выполняется целиком, включая операции ввода-вывода. Запрос на ввод-вывод передается от VE к серверу-хосту стандартной архитектуры, для которого в NEC используется термин Vector Host (VH). VE работает с VH через шину PCIe 3.0 x16, которая применяется и для коммуникаций VE между собой [2].
В реализации NEC SX-10+ применена технология 16 нм FinFET (Fin Field Effect Transistor — «техпроцесс с вертикально расположенным затвором»), что позволило сделать процессор компактным — его размеры всего 33 x 14,96 мм против 76,0 x 56,5 мм у 20-ядерного процессора Xeon Gold 6148. У Nvidia V100 площадь — 815 кв. мм.
Производитель предлагает три модели процессоров SX-10+: 10A, 10B и 10С, отличающихся емкостью памяти HBM2 и тактовыми частотами 1,4 или 1,6 ГГц. Это близко к применяемым в KNL — 1,3–1,5 ГГц, однако для процессоров Intel тактовая частота при работе с технологией AVX (и, соответственно, при подсчете пиковой производительности) ниже, чем базовая. Hапример, у KNL она ниже базовой на 200 МГц, а для Xeon Gold 6148 при базовой частоте 2,4 ГГц частота для AVX512 составляет 1,6 ГГц. Тактовая частота NEC 10A равна 1,6 ГГц, чему соответствует пиковая производительность одного ядра 307,2 GFLOPS, а всего процессора 10A — 2,45 TFLOPS. Для сравнения, максимальная пиковая производительность KNL близка к 3 TFLOPS, а V100 при увеличенной частоте 1,53 ГГц — 7,8 TFLOPS. Модель 10B отличается от 10A только тактовой частотой в 1,4 ГГц, а 10С от 10B — уменьшенной с 48 до 24 Гбайт емкостью HBM2.
Средняя пропускная способность работы с памятью каждого ядра 10A и 10B составляет 150 Гбайт/с против 94 Гбайт/с в 10C, а всего процессора — 1,2 Тбайт/с и 0,75 Тбайт/с соответственно. Потребляемая мощность платы SX-Aurora TSUBASA не превышает 300 Вт против 150 Вт для TDP одного процессора Xeon Gold 6148 и 260 Вт у Xeon Phi 7290F. Процессоры 10A предполагают работу только с водяным охлаждением, 10B — еще и с воздушным, а 10С — только с воздушным; для него VE имеет специальную плату.
Диапазон систем TSUBASA простирается от рабочих станций A100 до стоечных суперкомпьютеров A500 (см. таблицу).
Модели TSUBASA, кроме типа и количества используемых VE, отличаются также разными VH. Во всех VH в качестве x86-процессоров используются Intel Xeon микроархитектуры Skylake, входящие в семейства Silver 4100 или Gold 6100 с памятью DDR4/2666 МГц. Так, в A100-1 и A300-2 доступно максимум по 6 DIMM общей емкостью 192 Гбайт, а в A300-4 и A300-8 доступно вдвое больше памяти. Старшая модель A500-64, которую NEC относит к суперкомпьютерам, представляет собой стойку, содержащую до 64 VE и 8 VH. С применением процессоров 10A эта модель достигает максимальной пиковой производительности 157,3 TFLOPS. С учетом энергопотребления A500-64 в 30 кВт, понятно, что на его основе можно легко построить суперкомпьютерный кластер петафлопсной производительности.
Для построения кластеров, системы TSUBASA обеспечивают работу со 100-гигабитным межсоединением Infiniband EDR 4x.
В качестве базовой операционной системы для VH используется дистрибутив RHEL 7.3, а на VE работает своя ОС, минимизирующая взаимодействие с ядром Linux для снижения накладных расходов. Поскольку приложения полностью выполняются на VE, их можно транслировать с оптимизирующими под SX-10+ компиляторами от NEC, поддерживающими языки программирования Fortran 2003 (c расширениями от Fortran 2008), Cи 11 и C++ 14. Эти компиляторы обеспечивают векторизацию и автоматическое распараллеливание. Наряду с этим предоставляются средства OpenMP 4.5 и MPI 3.1, а также оптимизированные математические библиотеки [1, 2]. Важно, что MPI-операции выполняются напрямую между VE через PCIe, без обращения к VH. Кроме того, NEC предлагает собственную систему пакетных очередей NQSV, распределенную параллельную файловую систему ScaTeFS и др.
Преимущества NEC SX-Aurora (высокая производительность с плавающей запятой при низком энергопотреблении и отличные характеристики используемой памяти) еще нужно научиться использовать при работе с реальными приложениями — на данный момент единственные доступные показатели реальной производительности приводятся в [1] и относятся к стандартным тестам памяти STREAM/triad и тесту HPL. Результаты работы на процессоре 10B сопоставлены с данными для Nvidia Tesla V100, Intel KNL и Xeon Skylake (двухпроцессорная система с Xeon Gold 6148 (SKL)). На тесте STREAM пропускная способность памяти у VE почти в пять раз выше, чем у SKL, и существенно выше по сравнению и с KNL, и с V100. А на тесте HPL процессор VE показал производительность, близкую к SKL, но лучше, чем у KNL. Однако наивысшие результаты теста HPL достигнуты на V100: вдвое выше, чем у VE. По отношению пропускной способности памяти к стоимости процессор NEC VE в пять раз превосходит Intel SKL и также кардинально лучше, чем KNL и V100. А по отношению HPL-производительности к стоимости VE близок к SKL и превосходит KNL, однако этот показатель у V100 лучше, чем у VE.
По производительности на тесте HPL процессоры VE и Intel SKL демонстрируют близкие результаты, включая и данные по отношению производительность/стоимость, что позволяет сделать вывод и о сравнимой стоимости (можно оценить процессор 10B на уровне 6 тыс. долл., однако прямых указаний по стоимости аппаратных средств c SX-Aurora производитель не приводит).
Процессоры NEC SX-10+ — это потенциальная альтернатива GPU, особенно на фоне недавнего объявления Intel о прекращении развития линии процессоров Xeon Phi KNL. Однако полноценной заменой KNL процессоры VE считать нельзя — они работают только в гибридных вычислительных системах, включающих x86-процессоры. Вместе с тем высокие характеристики пропускной способности памяти расширяют потенциальные сферы применения TSUBASA — кроме HPC-приложений, компания NEC указывает и на такие области, как обработка больших данных, задачи искусственного интеллекта, включая и задачи машинного обучения. При разработке приложений автоматическая векторизация в компиляторах NEC проще, чем распараллеливание вручную, однако работа с длинными векторами может оказаться не так эффективна. Компания NEC активизировала работы по развитию программного инструментария для разработки приложений, например для операций с разреженными матрицами, что актуально не только для машинного обучения, но и, например, для классических для HPC-задач квантовой химии.
GPGPU и гетерогенность
С появлением шестого и седьмого поколений GPU произошла полная конвергенция потоковых и графических процессоров (показательно, что ведущий разработчик графического процессора Imagine, профессор Стэнфордского университета Уильям Далли занял пост главного ученого Nvidia) в объединенное направление универсальных вычислений на графических процессорах.
Успех GPU на поле универсальных вычислений оказал серьезное влияние на гетерогенные системы, состоящие из более чем одного типа процессоров — к CPU добавляют графические процессоры, сигнальные процессоры DSP, программируемые логические матрицы FPGA, процессоры с фиксированными функциями, например видеодекодеры и еще какие-либо ускорители.
Еще совсем недавно одинаковые шансы на признание были у двух разных гетерогенных систем — наиболее перспективными казались асимметричные мультипроцессоры (Asymmetric Multiprocessing, AMP) и FPGA. Самым ярким образцом AMP был процессор Cell, разработанный альянсом Sony, Toshiba и IBM. Проект стартовал в марте 2001 года и обошелся почти в полмиллиарда долларов, а в 2009 году, когда стала ясна бесперспективность 32-разрядных процессоров, работы над начальной версией Cell приостановились, хотя IBM утверждает, что на уровне исследований они продолжаются. FPGA задумывались как платформа для специальных процессоров, но с появлением межпроцессорных соединений QuickPath Interconnect и Hyper-Transport стало возможным использовать FPGA в качестве ускорителей для процессоров x86-архитектуры. Сегодня FPGA занимают определенную нишу с монопольным положением Xilinx и Altera, а еще пять-шесть компаний сосредоточены на производстве специализированных массивов. После 2010 года все внимание в сфере гетерогенных процессоров сосредоточилось исключительно на GPU.
Сегодня гетерогенность становится одним из важнейших направлений развития индустрии. Важно подчеркнуть, что гетерогенность не достигается формальным суммированием в одной установке сотен ядер CPU с тысячами ядер GPU, как это делается в суперкомпьютерах типа Tianhe-2, — каким бы большим ни был суперкластер, он остается группой машин, связанных между собой, но при этом работающих по классической схеме SISD. Гетерогенные компьютеры отличаются от кластеров тем, что все их процессоры должны иметь доступ к унифицированной общей памяти. Однако при решении этой задачи возникают сложности, поскольку принципы, по которым организован доступ к памяти CPU и GPU, радикально различаются. В первых компьютерах арифметико-логическое устройство общалось непосредственно с памятью, содержимое ячеек загружалось в регистры и обратно, в 70-е годы возникла идея кэш-памяти, которая расширялась, и в современных CPU применяются многоуровневые кэши, обеспечивающие эффективное использование тракта CPU — память. GPU умеют работать с ограниченным объемом данных, предварительно загруженных в локальную графическую память процессора. Сегодня используются два подхода к унификации памяти для GPGPU — Nvidia в CUDA 6 предлагает программное решение, а AMD применяет аппаратное решение hUMA (heterogeneous Uniform Memory Access).
К 2014 году завершился двадцатилетний период эволюции потоковых и графических процессоров и сложились условия для полноценного развития GPGPU на базе гетерогенных архитектур, позволяющих строить системы обработки в реальном времени больших потоков данных.
Векторные процессоры
Идея о возможности обработки одной командой более чем одного машинного слова далеко не нова — еще в 60-е годы компанией Westinghouse был начат проект Solomon, переросший в ILLIAC IV, в котором предполагалось 256 арифметико-логических устройств, хотя реально было 64. В 70-е годы Сеймур Крей сначала в CDC, а затем в собственной компании создавал векторные суперкомпьютеры, такие как Thinking Machines CM-2, которая могла за один такт умножать 64 тыс. пар чисел. В СССР под руководством Михаила Карцева примерно в то же время создавались машины М-9 и М-10 с векторной архитектурой, способные конкурировать, например, с CDC-7600. Попытка Intel вывести на рынок SIMD-процессор Intel i860 оказалась неудачной — процессор явно опередил время. В дальнейшем элементы SIMD появились в системах векторных команд ряда популярных процессоров: VIS в UltraSPARC I, MDMX в MIPS, MMX/SSE в x86 и AltiVec в PowerPC. При объединении в кластеры машин на базе многоядерных процессоров образуются системы класса много потоков команд, много потоков данных (Multiple Instruction Multiple Data, MIMD), и любой современный настольный компьютер попадает в категорию машин MIMD, способных выполнять команды типа SIMD над короткими векторами.
Отдельную страницу истории занимают транспьютеры. В 80-е годы под руководством Тони Хоара была разработана теория ускоренных параллельных вычислений на базе приборов, способных быстро обмениваться данными и производить вычисления (само слово transpute образовано от transmit и compute). Для поддержки транспьютеров были разработаны язык Occam и операционные системы Minix и Idris. Привлекшая к себе на короткий момент широкое общественное внимание, транспьютерная инициатива сошла на нет по экономическим причинам: рентабельное производство полупроводниковых приборов не может быть мелкосерийным. Кроме этого, были и сугубо технические причины: низкая эффективность последовательного обмена данными и сложность программирования транспьютеров.
Векторные процессоры и команды в стандартных центральных процессорах (Central Processing Unit, CPU) могут работать только с массивами, состоящими из единообразных компонентов, последовательно хранимых в памяти. Векторы считываются из памяти порциями данных с регулярным интервалом. Теоретически возможно расширить возможности векторных систем, принудительно записывая данные в регистры, но это долго, неудобно и ко всем данным, размещенным в регистрах, применяется одна и та же команда. Эти ограничения дают основание утверждать, что векторные процессоры остаются по сути теми же CPU, но с расширенными способностями арифметико-логического устройства.
Стоит отдельно отметить терминологическую коллизию — архитектуру SIMD не следует путать с одновременной многопоточностью (simultaneous multithreading), реализованной в большинстве современных CPU [3]. В первом случае речь идет о множестве потоков данных, а во втором — о разбиении потока команд на несколько меньших по мощности потоков.
Литература
Читайте также: