Механизмы параллельных вычислений в Windows. Разработка справочной системы
Рефераты >> Программирование и компьютеры >> Механизмы параллельных вычислений в Windows. Разработка справочной системы

СОДЕРЖАНИЕ

Введение

1. Механизмы параллельных вычислений в Windows

1.1. Особенности организации параллельных вычислений .

1.1.1. Оптимизация параллельных вычислений

1.2. Модели параллельных вычислений

1.2.1. Модель процесс/канал .

1.2.2. Модель обмен сообщениями

1.2.3. Модель параллелизм данных .

1.2.4. Модель общая память

1.3. Система параллельного программирования Linda .

2. Разработка справочной системы

2.1. Вызов справки

2.2. Рисование графических примитивов .

2.3. Интерфейс программы .

2.4. Требования к ПК

Вывод

Список используемых источников

Приложение А .

Приложение Б

РАЗДЕЛ 1

МЕХАНИЗМЫ ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛЕНИЙ В WINDOWS

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

Нейронная сеть — это сеть с конечным числом слоев из однотипных элементов — аналогов нейронов с различными типами связи между слоями. Элементарным строительным блоком нейронной сети является нейрон, осуществляющий взвешенное суммирование поступающих на его вход сигналов. Результат такого суммирования образует промежуточный выходной сигнал, который преобразуется активационной функцией в выходной сигнал нейрона. Среди основных преимуществ нейронной сети: инвариантность методов ее синтеза к размерности пространства признаков и размерам нейронной сети, адекватность перспективным технологиям, отказоустойчивость в смысле монотонного, а не катастрофического изменения качества решения задачи в зависимости от числа вышедших из строя элементов [1-3].

Нейрокомпьютер — это вычислительная система с параллельными потоками одинаковых команд и множественным потоком данных. Для большей ясности будем считать, что нейросетевые системы, реализованные программно на типовых ПК, относятся к нейроэмуляторам, на программном уровне реализующим типовые нейрооперации (взвешенное суммирование и нелинейное преобразование). Нейросетевые системы, реализованные в виде плат расширения стандартных вычислительных систем, будем называть нейроускорителями (взвешенное суммирование, как правило, реализуется аппаратно, например, на основе трансверсальных фильтров, а нелинейные преобразования — программно). Системы, реализованные в виде функционально законченных специализированных вычислительных устройств, следует относить к нейрокомпьютерам. Нейрокомпьютеры являются вычислительными системами с высоким параллелизмом, реализуемым на основе специализированной элементной базы, ориентированной на выполнение нейросетевых операций в нейросетевом логическом базисе.

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

1.1. Особенности организации параллельных вычислений

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

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

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

1.1.1. Оптимизация параллельных вычислений

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

Пусть требуется вычислить величины

Y1 = A * B + C * D Y2 = (A + B) * C + D.

При использовании одного процессора Y1 и Y2 будут вычислены за одинаковое время 3T. При использовании двух процессоров Y1 может быть вычислено за время 2T, т.к. операции умножения могут быть выполнены параллельно. А вычисление Y2 не может быть ускорено, т.к. сама формула не допускает параллельного выполнения операций.

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

Теперь обратим внимание на то, что в рассмотренном примере были проигнорированы затраты времени на пересылки данных между процессорами. Это отчасти правомерно, если процессоры используют общую память (следует отметить, что все процессоры имеют индивидуальную регистровую память гораздо более быстродействующую, чем ОЗУ). Если же процессоры работают с данными, хранящимися в индивидуальных ОЗУ, то обмен данными между этими ОЗУ снижает эффект от распараллеливания вычислений вплоть до того, что этот эффект может стать отрицательным. Отсюда следует, что при оптимизации распараллеливания вычислений нужно учитывать время, затрачиваемое на обмен данными между процессорами. И вообще при прочих равных условиях уменьшение числа и объемов сообщений, которыми обмениваются параллельно работающие процессоры, как правило, приводит к сокращению общего времени решения задачи. Поэтому желательно распараллеливать вычислительный процесс на уровне как можно более крупных блоков алгоритма.


Страница: