Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

Параллельное программирование

Особенности параллельного программирования

Определение 1

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

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

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

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

  1. В поставленной задаче нужно иметь достаточный объём работы для распараллеливания, чтобы покрыть издержки самого процесса распараллеливания.
  2. Необходимо грамотно определить размер отдельных подзадач и их общее количество. Так, если их будет слишком много, то образуются очереди к ядрам процессора, и решение оказывается неоптимальным. И наоборот, если количество подзадач будет очень малым, то некоторые ядра процессора будут просто без работы, что также снижает общую производительность системы.
  3. Должна быть правильно выстроена балансировка нагрузки между отдельными ядрами процессора, что зачастую автоматически реализуется в применяемых инструментах для параллельного программирования.
  4. Требуется хорошая организация по выделению памяти и сборке мусора. Поскольку области памяти компьютера, выделяемые для параллельных вычислений, не должны перекрывать друг друга, то здесь важны вопросы о синхронизации всех одновременно выполняемых программой процессов. При очищении памяти возникают достаточно серьёзные временные затраты, плюс затрудняется распараллеливание задачи во время такой постоянной очистки.
  5. Минимизация проблем, связанных с кэшированием. Например, бывает так, что одно из ядер записывает значение в определённую область памяти, расположенную в кэше другого ядра. Или же различные ядра записывают значения хотя и в разные области памяти, но, допустим, находящиеся в одной строке кэша. Всё это значительно снижает производительность программы. Для того, чтобы уменьшить вероятность появления таких ситуаций, нужно определённым образом проектировать структуры данных, сохраняя в алгоритме решения задачи локальность обрабатываемых данных относительно общего потока.
«Параллельное программирование» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Технологии для создания параллельных программ

В настоящее время существует достаточно большое количество инструментов, позволяющих организовать параллельные вычисления для решения объёмных задач, например, таких как проведение различных научно-инженерных расчётов на вычислительных кластерах и в сетях. Среди них есть такие технологии как MPI, OpenMP, CUDA, HPF, DVM и т. д.

Замечание 1

Любой язык, подходящий для параллельного программирования, должен предоставлять:

  • средства для создания параллельных потоков;
  • возможности по взаимодействию параллельных процессов между собой;
  • конструкции для их синхронизации.

Интерфейс MPI

Определение 2

MPI (от англ. Message Passing Interface – интерфейс передачи сообщений) – это одна из распространённых технологий для параллельного программировании, основанная на том, что параллельные процессы взаимодействуют друг с другом при помощи обмена сообщениями.

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

Технология MPI поддерживается такими языками программирования, как Fortran и Си. Сам интерфейс MPI включает в себя описание более 125 процедур и функций, причём их программная реализация особо сильно не зависит от выбранного языка программирования.

Так как MPI представляет собой библиотеку, то для успешной компиляции программы необходимо подключить соответствующие библиотечные модули. В начале любой программы, использующей технологию MPI, должна быть выполнена команда include 'mpif.h' или include "mpi.h" (для языков Фортран и Си, соответственно). С помощью неё мы включаем в программу базовый файл с описанием интерфейса MPI.

Затем исполняемый файл нужно будет запустить на требуемом количестве процессоров. Для этого обычно используется команда mpirun, задающая подключение MPI-приложения:

mpirun –np N {программа с аргументами}, где N – число процессов, допустимое в данной системе для решения одной задачи.

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

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

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

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

Дата написания статьи: 28.07.2021
Получи помощь с рефератом от ИИ-шки
ИИ ответит за 2 минуты
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot