Архитектура ЭВМ

Высокопроизводительные системы

Разбить на страницы
Показывать лекцию целиком

Примеры вычислительно сложных задач; системы с общей памятью, системы с изолированной памятью; многопоточность и распределённые вычисления; облачные вычисления с использованием виртуальных серверов Amazon EC2, Microsoft Azure.

ВЫЧИСЛИТЕЛЬНО СЛОЖНЫЕ ЗАДАЧИ

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

  • Моделирование физических процессов в гидро- и аэродинамике, ядерной физике, механике, что позволяет обойтись без дорогостоящих и опасных экспериментов.
  • Анализ экспериментальных данных в астрономии, метеорологии, гидро- и аэродинамике.
  • Задачи биоинформатики, в частности геномики, которые требуют исполнения алгоритмов на очень больших объёмах входных данных (речь идёт о сотнях гигабайт); при этом данные алгоритмы имеют существенную вычислительную сложность.
  • Решение криптографических задач, которые требуют полного перебора большого количества случайных решений, например, майнинг криптовалюты.
  • В начале курса рассказывалось про закон Мура, согласно которому производительность ЭВМ со временем растёт экспоненциально. Также указывалось, что из-за физических ограничений дальнейшее наращивание производительности процессоров невозможно выполнить за счет более "плотного" размещения транзисторов на одной кремниевой пластине. Напомним, что так происходит потому, что размеры транзисторов становятся сопоставимы с размерами отдельных атомов, а скорость их взаимодействия ограничена скоростью света. Дальнейшим перспективным направлением увеличения производительности является распараллеливание.

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

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

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

    СИСТЕМЫ С ОБЩЕЙ ПАМЯТЬЮ

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

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

    Рассмотрим следующие способы организации таких систем:

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

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

  • использование ядрами общего канала обмена данными с памятью и общей кэш-памятью является простым, но неэффективном решением;
  • использование отдельных каналов для работы с памятью и отдельной кэш-памяти для каждого ядра является сложным, но эффективным решением, которое приближает многоядерный процессор к многопроцессорным системам.
  • Пример устройства кэш-памяти многоядерного процессора Intel Core i7, который мы приводили выше, как раз иллюстрирует сложности, возникающие при поиске описанного компромисса.

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

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

    Многопроцессорные компьютеры появились в 1960-х годах. Одними из первых были компьютеры Borrougs, а также некоторые модели System/360. Многие процессоры семейства Intel x86, начиная с Pentium (1993 год), можно использовать для создания многопроцессорного вычислительного комплекса. В настоящее время ситуация с многопроцессорными компьютерами такова.

  • На рынке имеются двухпроцессорные рабочие стации, которые используются для высокопроизводительных задач, без привлечения кластеров и суперкомпьютеров, например, для научных вычислений или видеомонтажа.
  • При необходимости обеспечения высокопроизводительных серверов (например, в дата-центрах) используются двух- четырехпроцессорные компьютеры (например, на базе процессора Intel Xeon). Это бывает необходимо для масштабирования веб-сервисов и баз данных, для расширения возможностей виртуализации и т.д.
  • Специализированные многопроцессорные вычислительные системы, на базе которых создаются вычислительные кластеры и суперкомпьютеры.
  • Многие современные многопроцессорные рабочие станции и сервера относятся к классу архитектур NUMA (Non-Uniform Memory Access, неоднородный доступ к памяти). В этих архитектурах у каждого процессора имеется собственная оперативная память, соответственно, к ней процессор имеет быстрый доступ, а доступ к оперативной памяти другого процессора осуществляется через специальную шину. Операционная система при этом позволяет отобразить адресное пространство процесса, выполняющегося на каком-либо процессоре, на память другого процессора. Как и в случае с виртуальной памятью, это делается прозрачно для прикладных программ, но неизменно сказывается на производительности, что следует учитывать при написании программ для таких архитектур.

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

    СИСТЕМЫ С ИЗОЛИРОВАННОЙ ПАМЯТЬЮ

    Теперь рассмотрим другой способ организации параллельных вычислительных систем - системы с изолированной памятью.

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

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

    Суперкомпьютеры - это крупные вычислительные кластеры. Исторически суперкомпьютером называли любую ЭВМ (не обязательно кластер) с очень высокой производительностью. В качестве примера можно привести суперкомпьютер CDC 6600 компании Cray Research, созданный в 1963 году. Иногда в суперкомпьютер для повышения производительности добавляются специализированные вычислительные средства, например, для быстрого умножения больших матриц или для эффективной параллельной обработки массивов с целочисленными данными. Примером современного суперкомпьютера является вычислительный кластер суперкомпьютерного центра Санкт-Петербургского Политехнического университета им. Петра Великого (). На текущий момент этот суперкомпьютер имеет в своём составе 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.
  • Страницы:

    Примеры вычислительно сложных задач; системы с общей памятью, системы с изолированной памятью; многопоточность и распределённые вычисления; облачные вычисления с использованием виртуальных серверов Amazon EC2, Microsoft Azure.

    ВЫЧИСЛИТЕЛЬНО СЛОЖНЫЕ ЗАДАЧИ

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

  • Моделирование физических процессов в гидро- и аэродинамике, ядерной физике, механике, что позволяет обойтись без дорогостоящих и опасных экспериментов.
  • Анализ экспериментальных данных в астрономии, метеорологии, гидро- и аэродинамике.
  • Задачи биоинформатики, в частности геномики, которые требуют исполнения алгоритмов на очень больших объёмах входных данных (речь идёт о сотнях гигабайт); при этом данные алгоритмы имеют существенную вычислительную сложность.
  • Решение криптографических задач, которые требуют полного перебора большого количества случайных решений, например, майнинг криптовалюты.
  • В начале курса рассказывалось про закон Мура, согласно которому производительность ЭВМ со временем растёт экспоненциально. Также указывалось, что из-за физических ограничений дальнейшее наращивание производительности процессоров невозможно выполнить за счет более "плотного" размещения транзисторов на одной кремниевой пластине. Напомним, что так происходит потому, что размеры транзисторов становятся сопоставимы с размерами отдельных атомов, а скорость их взаимодействия ограничена скоростью света. Дальнейшим перспективным направлением увеличения производительности является распараллеливание.

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

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

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

    СИСТЕМЫ С ОБЩЕЙ ПАМЯТЬЮ

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

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

    Рассмотрим следующие способы организации таких систем:

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

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

  • использование ядрами общего канала обмена данными с памятью и общей кэш-памятью является простым, но неэффективном решением;
  • использование отдельных каналов для работы с памятью и отдельной кэш-памяти для каждого ядра является сложным, но эффективным решением, которое приближает многоядерный процессор к многопроцессорным системам.
  • Пример устройства кэш-памяти многоядерного процессора Intel Core i7, который мы приводили выше, как раз иллюстрирует сложности, возникающие при поиске описанного компромисса.

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

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

    Многопроцессорные компьютеры появились в 1960-х годах. Одними из первых были компьютеры Borrougs, а также некоторые модели System/360. Многие процессоры семейства Intel x86, начиная с Pentium (1993 год), можно использовать для создания многопроцессорного вычислительного комплекса. В настоящее время ситуация с многопроцессорными компьютерами такова.

  • На рынке имеются двухпроцессорные рабочие стации, которые используются для высокопроизводительных задач, без привлечения кластеров и суперкомпьютеров, например, для научных вычислений или видеомонтажа.
  • При необходимости обеспечения высокопроизводительных серверов (например, в дата-центрах) используются двух- четырехпроцессорные компьютеры (например, на базе процессора Intel Xeon). Это бывает необходимо для масштабирования веб-сервисов и баз данных, для расширения возможностей виртуализации и т.д.
  • Специализированные многопроцессорные вычислительные системы, на базе которых создаются вычислительные кластеры и суперкомпьютеры.
  • Многие современные многопроцессорные рабочие станции и сервера относятся к классу архитектур NUMA (Non-Uniform Memory Access, неоднородный доступ к памяти). В этих архитектурах у каждого процессора имеется собственная оперативная память, соответственно, к ней процессор имеет быстрый доступ, а доступ к оперативной памяти другого процессора осуществляется через специальную шину. Операционная система при этом позволяет отобразить адресное пространство процесса, выполняющегося на каком-либо процессоре, на память другого процессора. Как и в случае с виртуальной памятью, это делается прозрачно для прикладных программ, но неизменно сказывается на производительности, что следует учитывать при написании программ для таких архитектур.

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

    СИСТЕМЫ С ИЗОЛИРОВАННОЙ ПАМЯТЬЮ

    Теперь рассмотрим другой способ организации параллельных вычислительных систем - системы с изолированной памятью.

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

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

    Суперкомпьютеры - это крупные вычислительные кластеры. Исторически суперкомпьютером называли любую ЭВМ (не обязательно кластер) с очень высокой производительностью. В качестве примера можно привести суперкомпьютер CDC 6600 компании Cray Research, созданный в 1963 году. Иногда в суперкомпьютер для повышения производительности добавляются специализированные вычислительные средства, например, для быстрого умножения больших матриц или для эффективной параллельной обработки массивов с целочисленными данными. Примером современного суперкомпьютера является вычислительный кластер суперкомпьютерного центра Санкт-Петербургского Политехнического университета им. Петра Великого (). На текущий момент этот суперкомпьютер имеет в своём составе 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.
  • Вернуться к учебному плану