Здравствуйте! Когда появится возможность сдать экзамен на сертификат? |
Высокопроизводительные системы
Примеры вычислительно сложных задач; системы с общей памятью, системы с изолированной памятью; многопоточность и распределённые вычисления; облачные вычисления с использованием виртуальных серверов Amazon EC2, Microsoft Azure.
ВЫЧИСЛИТЕЛЬНО СЛОЖНЫЕ ЗАДАЧИ
Большинство людей сейчас привыкли пользоваться компьютерами для выполнения производственных и личных канцелярских задач, а также для развлечения. Однако на протяжении всей истории вычислительной техники для решения сложных вычислительных задач были востребованы и продолжают оставаться необходимыми высокопроизводительные ЭВМ. С развитием вычислительных возможностей ЭВМ, а также прогрессом науки и индустрии, расширялся и класс этих задач. Перечислим некоторые из таких задач, актуальные на данный момент.
- Моделирование физических процессов в гидро- и аэродинамике, ядерной физике, механике, что позволяет обойтись без дорогостоящих и опасных экспериментов.
- Анализ экспериментальных данных в астрономии, метеорологии, гидро- и аэродинамике.
- Задачи биоинформатики, в частности геномики, которые требуют исполнения алгоритмов на очень больших объёмах входных данных (речь идёт о сотнях гигабайт); при этом данные алгоритмы имеют существенную вычислительную сложность.
- Решение криптографических задач, которые требуют полного перебора большого количества случайных решений, например, майнинг криптовалюты.
В начале курса рассказывалось про закон Мура, согласно которому производительность ЭВМ со временем растёт экспоненциально. Также указывалось, что из-за физических ограничений дальнейшее наращивание производительности процессоров невозможно выполнить за счет более "плотного" размещения транзисторов на одной кремниевой пластине. Напомним, что так происходит потому, что размеры транзисторов становятся сопоставимы с размерами отдельных атомов, а скорость их взаимодействия ограничена скоростью света. Дальнейшим перспективным направлением увеличения производительности является распараллеливание.
Распараллеливание - это организация программ и средств их выполнения в виде набора параллельных взаимодействующих активностей.
Важно отметить, что как сама программа может быть реализована с использованием различных конструкций параллельного программирования (например, с помощью средств многопоточности), так и выполняться она может на различных параллельных архитектурах, например, в облачной инфраструктуре, с использованием различного количества вычислительных узлов.
Отметим также, что часто под распараллеливанием понимают добавление параллелизма для уже реализованного алгоритма/программы, исходно реализованных последовательно. Таким образом термин "распараллеливание" отражает тот факт, что создавать параллельные программы непросто, и это требует специальных усилий.
СИСТЕМЫ С ОБЩЕЙ ПАМЯТЬЮ
В этом разделе мы рассмотрим типичные подходы к созданию параллельных вычислительных систем. Вначале остановимся на системах с общей памятью.
Система с общей памятью - это вычислительная система, в которой параллельно выполняемые вычислительные процессы могут одновременно работать с одними и теми же данными, считывая и изменяя их.
Рассмотрим следующие способы организации таких систем:
- многоядерные процессоры,
- многопроцессорные компьютеры.
Многоядерные процессоры. Мы уже рассматривали многоядерные процессоры выше, здесь же сделаем акцент на использование многоядерных процессоров для высокопроизводительных вычислений.
Основная проблема, с которой сталкиваются инженеры при проектировании многоядерных процессоров, заключается в обеспечении согласованной работы ядер. Последние одновременно работают с общими данными в оперативной памяти, что является источником ошибок. При этом приходится искать компромисс между следующими решениями:
- использование ядрами общего канала обмена данными с памятью и общей кэш-памятью является простым, но неэффективном решением;
- использование отдельных каналов для работы с памятью и отдельной кэш-памяти для каждого ядра является сложным, но эффективным решением, которое приближает многоядерный процессор к многопроцессорным системам.
Пример устройства кэш-памяти многоядерного процессора Intel Core i7, который мы приводили выше, как раз иллюстрирует сложности, возникающие при поиске описанного компромисса.
Многопроцессорные компьютеры. На аппаратном уровне, в рамках многопроцессорного компьютера, аппаратный параллелизм реализуется посредством набора процессоров, которые, подобно ядрам, могут работать параллельно. Такой подход позволяет в известной степени преодолеть технологические ограничения по количеству ядер, которые удаётся разместить на одной кремниевой пластине процессора и ещё более увеличить производительность системы.
В многопроцессорных компьютерах "узким местом" являются шины, используемые для доступа процессоров к общей оперативной памяти. Также при проектировании шин многопроцессорных компьютеров возникают сложные задачи синхронизации разных процессоров и обеспечения когерентности (согласованности) их кэш-памяти. Важно понимать, что многопроцессорные компьютеры имеют весьма сложное устройство, решая те же проблемы, что и многоядерные процессоры, но в большем масштабе. И решать их приходится уже на уровне системной шины, а иногда - на уровне особого устройства оперативной памяти.
Многопроцессорные компьютеры появились в 1960-х годах. Одними из первых были компьютеры Borrougs, а также некоторые модели System/360. Многие процессоры семейства Intel x86, начиная с Pentium (1993 год), можно использовать для создания многопроцессорного вычислительного комплекса. В настоящее время ситуация с многопроцессорными компьютерами такова.
- На рынке имеются двухпроцессорные рабочие стации, которые используются для высокопроизводительных задач, без привлечения кластеров и суперкомпьютеров, например, для научных вычислений или видеомонтажа.
- При необходимости обеспечения высокопроизводительных серверов (например, в дата-центрах) используются двух- четырехпроцессорные компьютеры (например, на базе процессора Intel Xeon). Это бывает необходимо для масштабирования веб-сервисов и баз данных, для расширения возможностей виртуализации и т.д.
- Специализированные многопроцессорные вычислительные системы, на базе которых создаются вычислительные кластеры и суперкомпьютеры.
Многие современные многопроцессорные рабочие станции и сервера относятся к классу архитектур NUMA (Non-Uniform Memory Access, неоднородный доступ к памяти). В этих архитектурах у каждого процессора имеется собственная оперативная память, соответственно, к ней процессор имеет быстрый доступ, а доступ к оперативной памяти другого процессора осуществляется через специальную шину. Операционная система при этом позволяет отобразить адресное пространство процесса, выполняющегося на каком-либо процессоре, на память другого процессора. Как и в случае с виртуальной памятью, это делается прозрачно для прикладных программ, но неизменно сказывается на производительности, что следует учитывать при написании программ для таких архитектур.
Следует отметить, что в настоящее время в персональных компьютерах массово используется не многопроцессорность, а многоядерность, что обусловлено, во многом, рыночной целесообразностью.