Опубликован: 08.11.2022 | Доступ: свободный | Студентов: 60 / 0 | Длительность: 06:05:00
Лекция 15:

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

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

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

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

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

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

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

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

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

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

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

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

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

  • многоядерные процессоры,
  • многопроцессорные компьютеры.

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

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

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

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

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

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

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

  • На рынке имеются двухпроцессорные рабочие стации, которые используются для высокопроизводительных задач, без привлечения кластеров и суперкомпьютеров, например, для научных вычислений или видеомонтажа.
  • При необходимости обеспечения высокопроизводительных серверов (например, в дата-центрах) используются двух- четырехпроцессорные компьютеры (например, на базе процессора Intel Xeon). Это бывает необходимо для масштабирования веб-сервисов и баз данных, для расширения возможностей виртуализации и т.д.
  • Специализированные многопроцессорные вычислительные системы, на базе которых создаются вычислительные кластеры и суперкомпьютеры.

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

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

Наталья Ра
Наталья Ра

Здравствуйте! Когда появится возможность сдать экзамен на сертификат?