Читайте также: |
|
Для организации параллельных вычислений используются следующие четыре подхода:
1. Добавление специальных библиотек численного анализа к языкам последовательного программирования, обеспечивающих параллельное выполнение библиотечных процедур. Недостаток этого подхода состоит в том, что параллельные вычисления происходят только в этих библиотечных процедурах, а сама программа выполняется сугубо последовательно.
2. Добавление в специальные библиотеки процедур, обеспечивающих передачу сообщений и управление вычислениями, чтобы программист мог создавать параллельные процессы и управлять их выполнением.
3. Расширение языка программирования за счет введения в язык специальных конструкций, позволяющих создавать параллельные процессы, в том числе параллельно выполнять операции над векторами и матрицами.
4. Создание нового языка программирования, обеспечивающего параллельную обработку данных. Очевидное преимущество такого языка – эффективность параллельного программирования, но недостаток этого подхода связан с необходимостью изучения нового языка.
В настоящее время существует большое количество библиотек, расширений языков для параллельного программирования, которые создают широкие возможности для использования параллельной обработки данных.
Фундаментальный вопрос организации программ – сколько можно создать потоков управления: один или несколько. Один поток управления предполагает наличие одной программы, в которой все команды выполняются одна за другой в соответствии со значением единственного счетчика команд. Ясно, что в этом случае можно обрабатывать параллельно только векторы и матрицы на параллельных арифметико-логических устройствах. Другая модель предполагает наличие нескольких потоков управления, каждый из которых может выполняться параллельно во времени за счет наличия нескольких программ, нескольких счетчиков команд, своих локальных переменных. Каждый поток управления выполняет свою собственную программу над своими данными, но при этом каждый поток управления может в какие-то моменты взаимодействовать с другими потоками управления. Существует много вариантов взаимодействия потоков управления, которые формируют разные способы параллельной обработки.
Параллельная обработка данных может осуществляться на следующих уровнях: на уровне блоков, на уровне процедур, на уровне потоков и на уровне процессов.
Параллелизм на уровне блоков позволяет программисту указывать, какие блоки могут выполняться только последовательно, а какие могут выполняться параллельно. Например, в языке Algol - 68 используются выражения двух типов:
begin pro1; pro2; pro3 end
и
begin pro1, pro2, pro3 end,
где первая строка требует последовательного выполнения процедур pro1, pro2 и pro3, а вторая строка – параллельного выполнения тех же процедур. С помощью правильного размещения точек с запятой, запятых и разграничителей begin … end можно было записать произвольную комбинацию процедур для последовательного или параллельного выполнения.
Параллелизм на уровне процедур означает, что программа может вызвать процедуру и не заставлять вызывающую программу ждать завершения этой процедуры. Это значит, что вызывающая программа и вызванная процедура будет работать параллельно. Если блок вызывающей программы находится в цикле, который вызывает процедуру при каждом вхождении и не ждет завершения этих процедур, то большое число параллельных процедур запускается одновременно.
Параллелизм на уровне потоков связан с созданием и порождением для процесса нескольких потоков, каждый из которых работает в пределах адресного пространства этого процесса. Каждый поток имеет свой счетчик команд, но разделяет все остальное адресное пространство со всеми другими потоками. Потоки работают независимо друг от друга на разных процессорах. В одних параллельных системах операционная система располагает информацией обо всех потоках и осуществляет планирование потоков; в других системах каждый пользовательский процесс сам выполняет планирование потоков и управляет потоками, а операционной системе об этом ничего неизвестно.
Параллелизм на уровне процессов используется для нескольких независимых процессов, которые вместе работают над решением одной задачи. В отличие от потоков независимые процессы не разделяют общее адресное пространство, поэтому задача
должна быть разделена на довольно большие куски, по одному на каждый процесс.
Дата добавления: 2015-07-20; просмотров: 145 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Мультипроцессорные и мультикомпьютерные системы | | | Коммуникационные системы |