Samara Portal Technology, Computers

Самарский портал "Технологии, компьютеры"

Галопом по вычислительным Европам. Часть 5. Память.

Выводы и кое-что о путях дальнейшего роста производительности

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

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

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

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

Первые поползновения в виде процессоров и ASIC на периферийных устройствах, исполнявших некоторые управляющие операции появились уже давно, а в настоящее время можно говорить уже о формировании совершенно нового класса интеллектуальных периферийных устройств. Итак, встречайте Приложение 0: Data Processor Unit[1].

Приложение 0: Что такое DPU или нецентральные процессоры

Хорошо, с CPU что-то более-менее прояснили, но единственный ли это процессор в современном компьютере? Еще каких-то лет 30 назад я бы сказал «да», но сегодня ответ, совершенно точно, будет «нет» - что интересно, «нет» как и 40+ лет назад. В самом простейшем современном компьютере есть не меньше трех отдельных процессоров (часто больше). Итак, поехали по порядку: давным-давно, для снижения нагрузки от операций ввода-вывода на центральный процессор у больших компьютеров появился специальный сопроцессор ввода-вывода, он же канал ввода-вывода, он же контроллер ввода-вывода. Центральный процессор выдавал задание на ввод-вывод в обобщенной форме, а конкретное управление устройствами ввода-вывода (дисковыми накопителями, ленточными стойками, АЦПУ и всем остальным) осуществлял уже процессор канала. Ситуация изменилась с появлением микропроцессоров — их быстродействие позволяло CPU самостоятельно управлять периферийными устройствами, периодически прерывая текущую работу и выполняя специальную подпрограмму при поступлении определенного сигнала (прерывания). Соотношение нагрузок от «главной задачи» и от ввода-вывода (даже если говорить о прямом управлении дисками с интерфейсом ST506/412) было таким, что сильно «главной задаче» не мешало.

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

Я думаю, что все видели такую аббревиатуру, GPU? Казалось бы, почти CPU с небольшим хвостиком, но это уже graphics processing unit. То самое устройство, которое ведает формированием выводимой на экран картинки. Почему понадобился какой-то особенный процессор, и почему бы не поставить на видеоадаптер просто «еще один процессор»? Понадобился он потому, что снять с CPU специфическую фиксированную задачу «рисования картинки» вместе с отображением элементов интерфейса, возложив ее на специализированное устройство, которое ничем другим не озабочено, умеет только это, но уж это умеет хорошо — идея абсолютно разумная.

Исторически, первые видеоакселераторы середины 90, такие как S3 Trio представляли собой ASIC с аппаратной реализацией нескольких алгоритмов с небольшим объемом памяти на самом адаптере для этих операций. Эффект же в плане производительности был очень ощутимым: по моему опыту, работа на системе с Pentium 133 и ускорителем WD Paradise 24 была гораздо комфортнее, чем на Pentium 166MMX с простым адаптером SVGA.

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

Галопом по вычислительным Европам. Часть 6. Спецпроцессоры. Статья Ильи Вайцмана. 15.03.2023 г.
Видеоадаптер SPEA Fire с 2D ускорителем на EPIC процессоре i860.

Почему? Потому что, в отличие от нашей сложной, непредсказуемой и внезапно ветвящейся «главной задачи», которую мы обсуждали выше — задача формирования картинки (сначала хотя бы ускорения 2D, а затем и формирования трехмерной картинки), как раз, распараллеливается прекрасно. И, более того, эта[2] задача абсолютно предсказуема и, соответственно, поддается предварительной оптимизации кода и даже раскладке данных, а стало быть, и железо[3] с ПО можно для этого оптимизировать почти идеально.

Да, 2-3 команды параллельно хорошо — но мало. Задачка-то распараллеливается на гораздо большее количество потоков, так что ограничиваться 2-3 командами смысла нет. Можно больше, причем, настолько больше, насколько нам позволит технология производства.

Поэтому, вместо 2-4-8-16 могучих ядер CPU, способных быстро обрабатывать практически любые алгоритмы и данные (со всеми своими сверхсложными системами динамической оптимизации, многоуровневым кэшированием и сложной архитектурой исполнительных устройств) — в GPU мы видим, как правило, сотни и даже тысячи простеньких счетчиков, работающих параллельно, и отрисовывающих [опять же, очень грубо говоря] свой кусочек картинки. Причем, памятуя про квадратичную зависимость нагрева от частоты — видеоадаптеры можно назвать «более широкими, чем быстрыми»[4]. 500, 1000, 2000 и более простеньких параллельных[5] процессоров на частоте раза в два ниже, чем у современных им CPU. Плюс к тому, практически сразу появились варианты объединения двух и более видеоадаптеров для ускорения расчета вывода, потому что нет никакой принципиальной разницы, распараллеливать вычисления внутри одного видеоадаптера или между несколькими видеоадаптерами.

Видеоадаптеры разделяются, глобально, на интегрированные в CPU и внешние (дискретные). С внешними все понятно: они могут себе позволить гораздо больше, чем встроенные — они только сами по себе потребляют, иногда, сотни ватт и имеют поэтому, собственные огромные системы охлаждения и свою память (часто тоже специфическую, архитектурно заточенную на задачу формирования картинки[6]), а вот с интегрированными сложнее. Конечно, они медленнее дискретных — все-таки, при размещении в одном кристалле с CPU, на видео накладываются серьезные ограничения по количеству транзисторов и энергопотреблению. Но самое неприятное у встроенных видеоадаптеров — совместное с CPU использование оперативной памяти. Мало того, что это отнимает часть ее объема, так еще и при более-менее высокой нагрузке GPU просто начинает мешать центральному процессору, отъедая часть ПСП и увеличивая среднюю латентность, отчего скорость исполнения программ снижается. Конечно, кэши в процессоре спасают, но далеко не полностью.

Процесс идет, и идея вынесения стандартных задач, глобально не зависящих ни от самой задачи, ни от даже операционной системы, на отдельные вычислительные устройства, разгружающие CPU от вспомогательных задач вполне себе овладевает массами, создав новый класс устройств, обобщенно называемых DPU (GPU, как вы понимаете, теперь представляют собой частный случай обобщенного класса DPU). Где еще бывают собственные процессоры? Практически везде. В лазерных принтерах[7], где они появились как бы не раньше, чем в видеоадаптерах, например.

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

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

Поэтому RAID-контроллеры появились на PC-рынке практически одновременно с первыми PC-серверами, и с тех пор они эволюционируют совместно и параллельно. Отдельного рассказа заслуживают DPU в NAS, дисках и отдельных твердотельных накопителях, потому что там происходит сегодня уже настоящая обработка данных, а не «просто ввод/вывод».

Продолжение следует...

[1]Data Processor Unit, аппаратно обособленное устройство, берущее на себя выполнение части вспомогательных задач по обработке данных. [Intel использует название IPU (Infrastructure Processing Unit)]

[2]Из GPU естественным образом выросли ускорители для систем ИИ, потому что задачи, в частности, машинного обучения тоже идеально распараллеливаются. Изначально (да и сейчас) для них использовались обычные видеоадаптеры, впоследствии появились и специальные системы. Что? Да, и майнинг параллелится…

[3]Вот вам и пример применимости статической оптимизации: видеоадаптер SPEA Fire с EPIC/VLIW процессором i860, который в качестве процессора общего назначения не состоялся. Для своего времени решение очень мощное. К нему есть еще дочерняя плата, удваивающая мощность системы, с таким же процессором, но без DAC и выхода на монитор.

[4]Так, например, Nvidia Titan RTX имеет 4608 шейдерных процессоров с частотой 1,77 GHz, и несет на борту 24 гигабайта памяти, потребляя при этом 280 ватт.

[5]Впоследствии оказалось, что такие структуры гораздо лучше, чем классические CPU подходят и для систем машинного обучения — сами алгоритмы несложные, параллелятся идеально, так что можно «взять числом».

[6]Напр., память GDDR5 обеспечивает в видеоадаптерах скорость передачи до 176 GB/s по 256-разрядной шине. Круто? Еще как. Но (а) это только на коротких проводках от впаянной памяти и (б) с произвольной выборкой у GDDR5 все очень негладко. Читать из нее можно только огромными последовательными блоками, что годится только для вывода графики. Хуже только у HBMe2, тоже изначально придуманной для видеоадаптеров и ИИ.

[7]Как DPU следует сегодня рассматривать и процессоры, появившиеся в лазерных принтерах еще 30+ лет назад. В них устанавливались и устанавливаются сегодня довольно мощные процессоры с собственной оперативной памятью, снижающие нагрузку на CPU (кроме младших моделей для домашнего использования, управляемых «прямо из Windows» ресурсами CPU).

Ссылки на все 10 статей цикла «Галопом по вычислительным Европам»:

Галопом по вычислительным Европам. Часть 1. Что такое процессор.

Галопом по вычислительным Европам. Часть 2. Пути повышения IPC.

Галопом по вычислительным Европам. Часть 3. Оптимизация.

Галопом по вычислительным Европам. Часть 4. Как накормить процессор.

Галопом по вычислительным Европам. Часть 5. Память.

Галопом по вычислительным Европам. Часть 6. Спецпроцессоры.

Галопом по вычислительным Европам. Часть 7. Ввод-вывод.

Галопом по вычислительным Европам. Часть 8. Хранение данных.

Галопом по вычислительным Европам. Часть 9. Параллельные миры и техпроцессы.

Галопом по вычислительным Европам. Часть 10. Китайский путь и персональная безопасность.

----

«Альфа Конфа» в Самаре

«Альфа Конфа» в Самаре. Статья Владислава Боярова. 05.03.2024 г.

Blood, Sweat & Tears, или Кровь, пот и слёзы – часть четвёртая

Blood, Sweat & Tears, или Кровь, пот и слёзы – часть четвёртая. Статья Владислава Боярова. 12.03.2024 г.

«Домашний компьютер». Конкурс в Самаре.

«Домашний компьютер». Конкурс в Самаре.

Blood, Sweat & Tears, или Кровь, пот и слёзы – часть третья, объединительная

Галопом по вычислительным Европам. Часть 10. Китайский путь и персональная безопасность.

Галопом по вычислительным Европам. Часть 10. Китайский путь и персональная безопасность. Статья Ильи Вайцмана. 11.12.2023 г.