Здравствуйте! Когда появится возможность сдать экзамен на сертификат? |
Высокопроизводительные системы
СИСТЕМЫ С ИЗОЛИРОВАННОЙ ПАМЯТЬЮ
Теперь рассмотрим другой способ организации параллельных вычислительных систем - системы с изолированной памятью.
Системы с изолированной памятью - это такие вычислительные системы, в которых параллельные активности работают лишь с собственными данным, а взаимодействие между ними реализуется посредством обмена сообщениями.
Высокопроизводительные вычислительные системы с изолированной памятью организуются в виде вычислительных кластеров. На аппаратном уровне, в рамках вычислительных кластеров и суперкомпьютеров, распараллеливание реализуется объединением компьютеров в единую систему с помощью высокоскоростной локальной сети. Как и в случае с шинами в многопроцессорных компьютерах, в вычислительных кластерах "узким местом" является синхронизация и взаимодействие вычислительных узлов.
Суперкомпьютеры - это крупные вычислительные кластеры. Исторически суперкомпьютером называли любую ЭВМ (не обязательно кластер) с очень высокой производительностью. В качестве примера можно привести суперкомпьютер CDC 6600 компании Cray Research, созданный в 1963 году. Иногда в суперкомпьютер для повышения производительности добавляются специализированные вычислительные средства, например, для быстрого умножения больших матриц или для эффективной параллельной обработки массивов с целочисленными данными. Примером современного суперкомпьютера является вычислительный кластер суперкомпьютерного центра Санкт-Петербургского Политехнического университета им. Петра Великого (http://research.spbstu.ru/skc/). На текущий момент этот суперкомпьютер имеет в своём составе 668 2-х процессорных узлов с 14-ядерными процессорами. Он занимает несколько крупных помещений и потребляет электроэнергии до 640 КВт (для сравнения напомним, что современная городская квартира потребляет, в среднем, менее 1 кВт).
ТЕХНОЛОГИИ РЕАЛИЗАЦИИ ВЫСОКОПРОИЗВОДИТЕЛЬНЫХ ВЫЧИСЛЕНИЙ
Многопоточность. На программном уровне системы с общей памятью могут быть реализованы с помощью многопоточности, то есть использования в программе параллельных потоков (threads), работающих в рамках одного процесса и совместно использующих данные программы и прочие доступные ресурсы. При этом разные потоки программы операционная система естественным образом распределяет по параллельно работающим ядрам процессора. Многопроцессорные компьютеры также позволяют использовать многопоточное программирование.
Для упрощения разработки многопоточных программ для многопроцессорных систем имеются специальные языки программирования. Один из известных современных примеров таких языков - появившийся в 1997 году OpenMP. Это язык, который можно встраивать в другие языки программирования (чаще всего - в С и Fortran) для распараллеливания программного кода, в основном, выполняющего математические вычисления.
Фактически, OpenMP является встроенным предметно-ориентированным языком программирования. В настоящее время тема предметно-ориентированных языков программирования является очень популярной, поскольку такие языки позволяют достичь многочисленных выгод и создаются не только для специфических областей, но также и для отдельных больших программных проектов и линеек продуктов. Имеются также специальные средства для создания инфраструктуры для таких языков - продукт JetBrains под названием MPS, открытая технология xtext из мира Eclipse и др. Поверхностно-встроенные языки - это такие предметно-ориентированные языки, которые можно использовать совместно с обычными языками.
Распределённые вычисления. На программном уровне распараллеливание может осуществляться при помощи распределённых вычислений: прикладная программа реализует использование и синхронизацию компьютеров вычислительного кластера, управляя тем, какие операции и над какими данными будет выполнять каждый из них, а также то, как они этими данными будут обмениваться. Распределённые вычисления, позволяют, например, одновременно обрабатывать на разных компьютерах разные порции данных, или, организовав из компьютеров кластера вычислительный конвейер, распределить на них разные стадии обработки данных.
Одной из популярных технологий организации распределённых вычислений является библиотека Message Passing Interface (MPI), предназначенная для организации распределённой работы программ на вычислительных кластерах. MPI позволяет параллельно запустить несколько экземпляров программы (10, 100, 500) на различных процессорах кластера и синхронизировать работу этих экземпляров с общими данными. Функциональность библиотеки MPI описана в одноименном стандарте. Существует значительное число различных реализаций стандарта MPI, например, MPICH, OpenMPI и др.
ОБЛАЧНЫЕ ВЫЧИСЛЕНИЯ
Одно и то же программное приложение может быть размещено и исполняемо на различном количестве вычислительных узлов. Это бывает нужно для параллельных приложений с целью повысить их пропускную способность (например, для клиент-серверных приложений или приложений Интернета вещей). С другой стороны, вычислительные ресурсы стоят дорого, и их увеличение для данного приложения должно быть оправданным.
Кроме этого, необходимо отметить, что вычислительный кластер (любой, который даже не является суперкомпьютером) оказывается дорогим в приобретении и обслуживании. Отдельным исследователям, небольшим лабораториям и организациям обычно выгоднее арендовать вычислительные мощности по мере необходимости, а не приобретать такое оборудование. В последнее десятилетие для решения подобных задач часто применяются сервисы облачных вычислений.
Сервис облачных вычислений позволяет выделять вычислительные ресурсы (виртуальные машины) в количестве, необходимом пользователю в данный момент, и настраивать сетевые соединения между ними. В итоге пользователь на время получает доступ к кластеру нужной мощности и конфигурации. Широко известны такие облачные сервисы как Amazon EC2 или Microsoft Azure.
Технологии облачных вычислений позволяют клиентам получить доступ к серверам в требуемом количестве. Это количество можно по желанию быстро варьировать, но тем не менее, как и в случае с реальными серверами, эти виртуальные сервера необходимо настраивать и сопровождать. Это является сложной задачей системного администрирования, несмотря даже на наличие большого количества специализированных программных утилит для синхронного управления парком серверов.
Организация параллельных облачных вычислений упрощается при использовании вычислительных сервисов класса " Функция, как услуга" ("Function as Service"). Наиболее известными представителями этого класса являются платформы Amazon AWS Lambda, Microsoft Azure Functions и Google Cloud Functions. Они предоставляют пользователю программный интерфейс, позволяющий передать сервисам программный код и входные данные. Пользователь реализует функции на одном из поддерживаемых языков программирования (поддерживаются популярные высокоуровневые языки программирования, такие, как Java, C#, Python и ряд других) и передаёт ссылки на эти функции в библиотеку, которая, в свою очередь, передаёт код этих функций на сервера Amazon, Microsoft или Google и инициирует их удалённое выполнение. Сервисы решают самостоятельно, каким образом распределить вычисления по реальным серверам. Такой подход избавляет от необходимости "вручную" настраивать сервера, но лишает пользователя гибкости в настройке параллельных вычислений.
Вопросы
- Приведите примеры современных вычислительно сложных задач.
- Сформулируйте закон Мура.
- Что такое распараллеливание?
- Что такое параллельные вычислительные системы с общей памятью?
- Назовите виды параллельных вычислительных систем с общей памятью.
- Какие средства программирования применяются для систем с общей памятью?
- Почему стали массово популярны многоядерные процессоры, а не многопроцессорные компьютеры?
- Что такое параллельные вычислительные системы с изолированной памятью?
- Какие средства программирования применяются для систем с изолированной памятью?
- Какие возможности открывает многопоточное программирование?
- Назовите самую трудно обнаружимую и "дорогую" ошибку многопоточного программирования.
- Что такое распределённые вычисления?
- Расскажите про облачные вычисления.
- Что такое вычислительные сервисы класса "Функция как услуга"?
- Какие известные платформы для этих сервисов Вы можете назвать?
Литература
- MPI: A Message-Passing Interface Standard Version 3.1. Message Passing Interface Forum. June , 2015. 868 p.
- Бурова И. Г., Демьянович Ю. К. Алгоритмы параллельных вычислений и программирование. СПбГУ, 2007. 207 с.
- Немнюгин С. А. Параллельное программирование для многопроцессорных вычислительных систем. БХВ-Петербург, 2002. 400 с.
- Малявко А., Менжулин С. Суперкомпьютеры и системы. Построение вычислительных кластеров. ЛитРес, 2019. 96 с.
- Таненбаум Э., Бос Х. Современные операционные системы. 4-е изд. СПб.: Питер, 2015. 1120 с.
- Таненбаум Э., Остин Т. Архитектура компьютера. 6-е изд. СПб.: Питер, 2013. 816 с.
- Орлов С.А., Цилькер Б.Я. Организация ЭВМ и систем: Учебник для вузов. 2-е изд. СПб.: Питер, 2011. 688 с.
- Roberts M. Serverless Architectures. 2016. http://martinfowler.com/articles/serverless.html