Весь комплекс подготовительных действий, вызванный разработкой и исполнением вычислительных задач в многомашинной вычислительной среде, с целью достижения максимально быстрого решения громоздкой задачи получил название “параллельное программирование”. При этом предельное время вычислений, которое стремиться получить программист, должно быть обратно пропорционально числу задействованных процессоров.
Подготовка вычислительных задач от момента их постановки до записи параллельных программ проходит несколько нетривиальных этапов. Основные шаги такой подготовки отображены на рисунке 1.1.
Рисунок 1.1. Основные этапы подготовки параллельной программы.
После распределения процессов по процессорам выполняется традиционное программирование всех модулей.
Традиционное программирование сложных задач для одного процессора тоже начинается с математической постановки вычислительной задачи, тоже требует расчленения исходной задачи на обособленные блоки и фрагменты вплоть до отдельных операторов. Однако размещение операторов в тексте программы строго подчинено принципу последовательной во времени, принудительной выборки машинных команд для выполнения операций независимо от готовности значений соответствующих операндов. По этой причине вся ответственность за своевременную подготовку значений операндов лежит на программисте, который и задает нужный порядок выборки команд, субъективно определяя тем самым на оси абсолютного непрерывно текущего времени фиксированные моменты выполнения действий. Положение этих дискретных моментов времени, отсчитываемых от момента начала вычислительного процесса, кратно периодам (квантам времени) тактового генератора процессора.
Два вычислительных процесса, порожденные одной и той же программой в один и тот же момент времени, но на разных процессорах с разными частотами тактовых генераторов, будут выполнять одни и те же команды в разные моменты естественного непрерывного времени. Если одинаковые процессы, развертываемые в процессорах циклические, то с каждым циклом моменты времени исполнения одних и тех же команд будут с каждым циклом смещаться относительно друг друга. Это смещение определяется разностью частот тактовых генераторов и является непрерывной функцией времени и не кратно ни одному из периодов двух тактовых генераторов. В таких случаях говорят, что два процесса асинхронны. На рисунке 1.2 показана асинхронная временная развертка двух одинаковых циклических процессов, протекающих на разных процессорах.
Отмеченные выше понятия асинхронных процессов касаются не только временных разверток одинаковых по выполняемым командам процессов. Помеченные тем или иным способом моменты действий отдельных наблюдаемых команд двух одновременно протекающих циклических процессов, порожденных разными программами на разных процессорах, из-за различия длительностей циклов и/или тактовых частот генераторов точно так же, как показано на рисунке 1.2, будут непрерывно смещаться (“плыть”) относительно друг друга.
В описанных ситуациях естественно ожидать совпадения в заранее не предсказуемых фазах интервалов, в течение которых выполняются помеченные действия. В правом верхнем углу рисунка 1.2 двумя толстыми протяженными отрезками на оси текущего времени (t) изображены интервалы медленного (М) и быстрого (Б) процессов в двух фазах: интервал “Б” начинается раньше интервала “М” или интервал “(Б)” начинается позже
Рисунок 1.2. Временная развертка двух циклических процессов с
различными квантами времени.
Смещение конкретных действий в одновременно идущих процессах может привести к неожиданным результатам, если эти действия направлены на преобразование или видоизменение одного и того же объекта. В этом случае можно говорить о взаимодействии двух процессов.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.