Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
!!Экзаменационные вопросы_003.rtf
Скачиваний:
9
Добавлен:
19.09.2019
Размер:
17.62 Mб
Скачать
  1. Нити. Синхронизация. Асинхронные коммуникации. Проблема детерминизма. Распределение по процессорам. – 2 фазы. Производительность.

Программа на СС++, как и программа на С++, вначале запускается как 1 поток управления (нить). Однако, в отличие от С++, программа на СС++ может создавать дополнительные нити, используя ключевые слова par, parfor и spawn.

Параллельный блок отличается от обычного блока C++ ключевым словом par. Внутри блока могут находиться любые операторы, кроме объявления переменных и операторов, приводящих к нелокальным предачам управления, например, return. Операторы, включенные в параллельный блок, могут выполняться одновременно.

Следует отметить, что только тело цикла выполняться

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

Об-т “процессор” пр собой норм класс С++ со сл искл-ми:

- имена глобальный перем-х С++ (с файл обл вид-сти) предст раз об-ты в разл объектах "п", т е разл об-ты “процессор” не разд данные.

- прив члены объекта “процессор” не обяз быть объявл как прив. Глобальный функции и перем неявно сч-ся прив чл-ми соответствующего объекта “процессор”.

Об-ты “процессор” можно насл-ть, при этом исп обычные механизмы защиты (прив и публ). Т о только публ члены сост интф объекта “процессор”.

Об-ты “процессор” пр собой ед-цу лок-сти, т е вн его адр пр-ва обр к пам сч-ся лок-ми и потому "дешевыми". Нить, выполнения на об-те "п", модет обращаться к структурам данных, опрограм или разм-м на этом об-те "п" с исп обыч указателей С++.

Для св объектов "п" м\у собой используется глобальный указатели. Практ это об указатель С++, за искл того, что он ук-ет на стр данных и об-ты, потенц нелокальные, доступ к к-могут быть дорог, чем к лок-м.

По ум нити выполняться на том же процессоре, что и родитель. Для выполнения выч-й на др процессоре используется RPC. Тр-ся только гл указатель на др об-т “процессор”, чтобы вызвать любую его public ф-ю. Одну нить, вып-ю на об-те "п", наз-ют задачей (task). Чаще вс програмы на СС++ создает ровно 1 нить на процессор, хотя в нек сл используется неск.

Исп об-ты “процессор” и конструкция par. Создает 1 задача (об-т “процессор” и нить) на каждая узел дерева. По зав вызова об-ты уд-ся. Возвр-ся к-во листьев с реш-ми.

выполняться т н RPC. Это вкл 3 стад:

1. Арг-ты функции p уп-ся в сообщ, оно пер-ся на уд об-т и расп-ся. Вызывая нить на это вр приост вып-е.

2. На уд процессоре создает нов нить, выполнения треб функцию.

3. По зав уд вызова возвр-ся рез-т, после чего вызывая нить прод вып-е.

Глобальный указатели и синхр пер-е могут быть исп-ны для создает разл комм структур.

Асинхронные коммуникации.

Необх в асинхр комм возн тогда, когда задачи должны обращаться к разд-ей стр данных неструкт образом. В СС++ такие комм-ции реал-ся 3 путями:

1. Разд-я структура данных могут быть инкапс в спец задаче (data task), и к этой задаче орг-ся каналы для выполнения запросов на чтен и зап.

2. Разд-я структура данных могут быть распр-на между зад-ми. Задачи при этом должны период пров-ть нал-е запросов. Напр в классе Queue можно доп-ть структуру IntQData полем "full/empty", к-е иниц-ся зн-ем "пусто" и уст-ся в "зап-но", когда в структуру пом-ся данные. Функция опроса при этом просто пр-ет зн-е этого поля

3. Нак, 3-й подход исп RPC в СС++ наиб прямо. Разд структура также распроцесся между задачами, но вм обр к каналу, задача непоср выз-ет ф-ю др объекта “процессор”.

Проблемы детерминизма

Ранее уп-сь, что как прав, пов-е задач д б детерм-м. Яз конструкция-ции СС++ не обеспечения дет-м прямо. Однако, собл-я нек правила, можно легко обеспечения дет-е пов-е програмы. В частн, легко пок-ть, что программа на СС++ дет-на, если она исп модель задача-канал, т е на 1 процессор создает 1 нить и все ком-ции выполняться ч/з каналы с 1 пост-ком и 1 пр-ком данных.

В то же вр в нек сл полезнее исп-ть конструкция СС++ б гибко:

- конк вып-мые нити могут обеспечения перекр выч и комм,

- RPC, непоср исп-е уд-е структуры данных, могут реал-ть разнообр механизмы асинхр комм-й.

- в комп-рах с общ пам нити, создает-е на 1 об-те "п", могут выполняться параллельно (на разных проц-рах), исп-я один экз разд-х данных вместо посылки-приема сообщ. Это знач пов-ет процессть.

Распределение по процессорам.

Параллельная программа в терм конструкция-й СС++ может выполняться как на 1-пр, так и на многопр к-рах. В посл сл важн зад-ей явл распр объектов "п" по физ процессорам.

В СС++ распр-е явл 2-стад процессом. На 1 ст нити распр по объектам "п". На 2-й - эти об-ты распр по физ процессорам. Важн аспектм этой ст явл то, что распр объектов по процессорам вл на эфф-сть, но не на корректность. Это позв разр-тать и отл програму на 1-пр к-ре и затем доб-ся макс процессти на многопрограм, меняя распр-е. 1-я ст обл такими св-ми, только если нити не разд-ют структуры данных.

По ум, вновь создает об-т “процессор” расп-ся на том же процессоре, что и его родитель. Это может быть изм-но ук-ем в оп-ре new арг-та placement.

В С++ этот арг-т используется для ук-я разм-я объекта в адр пр-ве, в СС++ - также в пр-ве проц-ров. Разм-е ук-ся зав-мым от реал классом proc_t.

Функции-конструкция-ры proc_t и node_t, опр-е в б-ке СС++, могут быть исп-ны для создает структуры разм-я с опр именем проц-ра.

Производительность.

Програмы на СС++ не исп прим send/receive. Вм эт они обращаться к разд структурам данных. Однако затр на комм опроцесся без труда. Обычно оп-я чт или зап глобальный указателя или RPC ведет к 2 собщ - 1 для пер апроцессоров, 2 для возвр р-та. Затр на каждая сообщ адекв опис-ся моделью (ts + Wtw). В сл СС++ сл разд интер- и интрапроц комм-ции. Посл об знач дешевле, хотя бывают искл-я (все зав от реализации). В общем, сл обр вним на сл аспекты:

- чт и зап глобальный указателей; это обычно затр оп-я, и если их много, сл рассм возм репл структур дан или перем их на тот ПО, где они чаще используется. Есл з-ча треб много эл-в данных с 1 ПО, лучше пересл их 1-м сообщ-ем.

- RPC; обычно вызов RPC прив к 2 сообщ - перед данных и возвр р-та. Часто р-т не нужен, в этом сл след рассм возм исп-я оп-ра spawn для создает асинхр нити выполнения.

- "справедливость"; хотя обычно при вып неск нитей на 1 ПО СС++ гар-ет, что каждой будет предост квант времени, все же в сл критич ко врем прил-ний этого могут быть недост.

- удал оп-ции; в общ, оп-ции с уд об-ми тр больш затр, чем оп-ции только с лок-ми. Но реал затр сильно изм от к-ра к к-ру. Как прав, RPC дешевле, чем создает ПО, а оп удал чт или зап дешевле, чем RPC. Первое создает ПО знач затр-е, чем посл-е.

- опт-ция; поск СС++ - это не библ, а язык, в нек сл компил-р может сниз затр на комм за счет объед-я сообщ, искл ответов и др способов.