Лабораторная
 

Министерство образования Российской Федерации

Уфимский государственный авиационный технический университет

Факультет ИРТ: Информатика и робототехника

Кафедра ПСИ: Проектирование систем информатики

РГР: Расчетно-графическая работа

Общая тема:

ПАРАЛЛЕЛЬНЫЕ ЛОГИКО-АЛГОРИТМИЧЕСКИЕ СИСТЕМЫ

(алгоритмы и логика, аппаратная и программная реализация)

Часть 1

НАЧАЛЬНАЯ ПОДГОТОВКА

Простейшие алгоритмы:

Структурные схемы и формулы

Многопоточная программная реализация

(Лабораторная работа)

Пояснительная записка

 3053.4567.0000-ПЗ

Направление подготовки:

654600: ИВТ: Информатика и вычислительная техника

Специальность:

220200: АСОИиУ: Автоматизированные системы обработки информации и управления

Курс обучения: 2

Учебная группа: АСОИ-231

Работу выполнила студентка Любцова Л.В.

Зачетная книжка № 055567

Вариант задания: A090

Работу принял Житников А. П.

2006

1.1       Этап Э1: Тренаж

1.1.1    Общие условия

Содержание работы

Выполняется группа задач первого этапа.

Этап 1: Тренаж — первичный предельно облегченный быстрый тренаж:

·        оперативное освоение первичных элементов многопоточно реализации простейших алгоритмов:

основная цель — упаковка в потоки (треды) отдельных команд и их групп;

·        обеспечивается строгое алгоритмическое обоснование программных текстов (подпрограмм) реализации алгоритмов;

·        выполняется простейшее редактирование готовых заданных текстов — замена исходных обозначений номеров команд личными обозначениями:

·        в исходном тексте подпрограммы;

·        в ее алгоритмическом описании.

Общая характеристика алгоритмов

Все студенты реализуют простые алгоритмы одинаковой структуры.

До программной реализации параллельных алгоритмов (на две-три команды) с применением потоков (тредов) программно реализуются:

·        последовательные алгоритмы (на две-три команды);

·        вырожденные алгоритмы (пустой и однокомандый алгоритм).

Это необходимо для упрощения общей подготовки многопоточной программной реализации параллельных алгоритмов.

Реализуемые алгоритмы

а) Вырожденные алгоритмы:

// первичный базис синтаксиса языка — требует тщательной проработки

Пустой алгоритм:

A001 = ( )

Единичный (однокомандный) алгоритм:

А101 = (Zi)

б) Двухкомандые алгоритмы // Первичные невырожденные алгоритмы

A211 = (Zi — Zj) — последовательный алгоритм;

А222 = (Zi & Zj) = (Zi #& Zj) — параллельная конъюнкция команд;

в) Трехкомандный алгоритм:

А323 = (Zi & Zj & Zk) = (Zi #& Zj #& Zk) — параллельная конъюнкция команд.

Используется второй ряд переключателей циклов рабочего режима:

eA001, eА101, eA211, eА222, eА323


Порядок формирования индивидуальных заданий

Все студенты выполняют программную реализацию алгоритмов указанной структуры.

Индивидуальные задания различаются:

·        номерами i, j, k команд алгоритма (номера силовых головок АТК);

·        параметрами mi, mj, mk длительности исполнения команд.

Код индивидуального задания:

номер зачетной книжки: XXХabc

последние три цифры номера: abc

Таблица параметров задания:

Номера команд

i = c

j = b

k = a

Команды

Zi = Zc

Zj = Zb

Zk = Za

Длительности команд

mi = b*10

mj = c*10

mk = a*10

Формирование индивидуального задания. Опорный пример

а) Код индивидуального задания:

номер зачетной книжки: XXХabc = 055567

последние три цифры номера: abc = 567

б) Таблица параметров задания:

Номера команд

i = c

j = b

k = a

7

6

5

Команды

Zi = Zc

Zj = Zb

Zk = Za

Z7

Z6

Z5

Длительности команд

mi = 6*10 = 60

mj = 7*10 = 70

mk = 5*10 = 50

// длительности представлены в некоторых условных единицах

в) Индивидуальный комплект алгоритмов

1) Вырожденные алгоритмы:

Пустой алгоритм:

A001 = ( )

Единичный (однокомандный) алгоритм:

А101 = (Z7)

2) Двухкомандые алгоритмы // Первичные невырожденные алгоритмы

A211 = (Z7 — Z6) — последовательный алгоритм;

А222 = (Z7 & Z6) = (Z7 #& Z6) — параллельная конъюнкция команд;

3) Трехкомандный алгоритм:

А323 = (Z7 & Z6 & Z5) = (Z7 #& Z6 #& Z5) — параллельная конъюнкция команд.


Запись комбинаций параметров настройки панели

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

быстрый подвод — рабочая подача — быстрый отвод.

Для работы с другими параметрами длительности циклов необходима установка комбинации новых параметров длины инструмента — посредством слайдеров (ползунков) в наладочном режиме.

Новые параметры сами по себе не сохраняются и при новой загрузке программы устанавливаются стандартные исходные параметры. При этом для восстановления необходимых заданных параметров необходимо их снова устанавливать вручную. Это неудобно в работе, особенно в конфигурации АТК12 с большим числом силовых головок.

Для запоминания и повторного применения необходимых комбинаций параметров длины инструмента (и других параметров) предусмотрено меню:

Настройки

Меню Настройки

Команды меню:

Загрузка стандартных параметров:

·        восстановление комбинации стандартных исходных параметров панели управления, если они были изменены;

·        параметры содержатся файле parDefault.ini.

Загрузка заданных параметров:

·        загрузка ранее записанной комбинации заданных параметров панели управления;

·        параметры содержатся в некотором файле,

Запись заданных параметров панели:

запись заданных параметров, установленных на элементах панели управления;

запись производится в файл с любым именем,

При необходимости меню Настройки можно отделить в отдельное окно:

Для отделения меню необходим клик клавиши мыши в поле над пунктирной линией отрыва.


Порядок записи комбинаций заданных параметров

Представлен опорный пример индивидуального задания.

а) Код индивидуального задания:

номер зачетной книжки: XXХabc = 055567

последние три цифры номера: abc = 567

б) Таблица параметров задания:

Номера команд

i = c

j = b

k = a

7

6

5

Команды

Zi = Zc

Zj = Zb

Zk = Za

Z7

Z6

Z5

Длительности команд

mi = b*10 = 60

mj = c*10 = 70

mk = a*10 = 50

Силовая головка

СГ7

СГ6

СГ5

Длина инструмента

силовой головки

Li = L7 = 60

Lj = L6 = 70

Lk = L5 = 50

в) Установка заданных параметров длины инструмента:

Li = L7 = 60 Lj = L6 = 70 Lk = L5 = 50

г) Запись данных в файл:

1) Подать команду на запись параметров:

Настройки / Запись заданных параметров

 

 
Выводится окно:

3) Ввести имя файла, например: параметры // 2-й этап: #&

4) Сохранить данные в файле

Порядок загрузки параметров

а) Восстановление стандартных начальных параметров:

1) Подать команду:

Настройки / Загрузка стандартных параметров

На панель управления выводятся стандартные исходные параметры.

б) Загрузка записанных заданных параметров

1) Подать команду:

Настройки / Загрузка заданных параметров

Выводится окно:

2) Ввести имя файла заданных параметров: параметры

3) Открыть файл: На панель выводятся заданные параметры.


1.1.2    Алгоритм A001: Пустой алгоритм - проходная интерпретация

Описание алгоритма

СФА: Структурная формула алгоритма

Алгоритм этапа обработки (основного перехода тех. операции):

A001 = ( ) = (—) = (—>) = (R) = —> = R

R: Репитер (повторитель) — оператор функции повторения;

равносилен простой линии связи

Алгоритм операционного цикла

A = (Zz — A001 — Zr) = (Zz — R — Zr) = (Zz — — — Zr) = (Zz — Zr)

ССА: Структурная схема алгоритма

ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст

ГИ: Горизонтальное исполнение

ШТА: Шаблон текста алгоритма

A001 = ( ) = (R) = R

A001 = R

РТА: Рабочий текст алгоритма

alg A001(): pass

ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст

ВИ: Вертикальное исполнение:

A001 = (R) = R

ШТА: Шаблон текста алгоритма РТА: Рабочий текст алгоритма

A001 A001= A001= A001= alg A001():

= ( ( | R pass

( R | R

R ) ) // Необходимо строго соблюдать

) // табуляцию вложенных строк


Исходный текст программной реализации

Рабочий файл:

expSub.py: Учебные (экспериментальные) подпрограммы.

Подпрограмма реализации алгоритма A001: // Строка: ~ 75

def eA001(ccrt, hCycles): // alg A001( ):

pass // пустой оператор

// равносилен повторителю и простой связи: R = ->

1.1.3    Алгоритм A101: Единичный алгоритм

Описание алгоритма

СФА: Структурная формула алгоритма

Алгоритм этапа обработки (основного перехода тех. операции):

A101 = (Z7) = Z7

Алгоритм операционного цикла // включая загрузку и разгрузку

A = (Zz — A101 — Zr) = (Zz — (Z7) — Zr) = (Zz —Z7 — Zr)

ССА: Структурная схема алгоритма

Вариант 1 Вариант 2

 

ДИА: Диаграмма исполнения алгоритма: mz7 = 60

ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст

ГИ: Горизонтальное исполнение

ШТА: Шаблон текста алгоритма

A001 = (Z7) = Z7

A001 = Z7

РТА: Рабочий текст алгоритма

alg A001(): Zh7()

ВИ: Вертикальное исполнение

ШТА: Шаблон текста алгоритма РТА: Рабочий текст алгоритма

A001 A001= A001= A001= alg A001():

= ( ( | Z7 Zh7()

( Z7 | Z7

Z7 ) )

) // Необходимо строго соблюдать стандартные отступы

Исходный текст программной реализации

ВИ: Вертикальное исполнение

def eA101(ccrt, hCycles): // alg A211():

hCycles.Zh(ccrt.techsys.head7) // Zh7() - типовой цикл СГ7

// Необходимо строго соблюдать стандартные отступы

1.1.4    Алгоритм A211: Последовательность двух команд

Описание алгоритма

СФА: Структурная формула алгоритма

Алгоритм этапа обработки (основного перехода тех. операции):

A211 = (Z7 — Z6) = Z7 — Z6

Алгоритм операционного цикла // включая загрузку и разгрузку

A = (Zz — A211 — Zr) = (Zz — (Z7 —Z6) — Zr) = (Zz — Z7 —Z6 — Zr)

ССА: Структурная схема алгоритма

Вариант 1 Вариант 2

ДИА: Диаграмма исполнения алгоритма: mz7 = 60, mz6 = 70

 

ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст

ГИ: Горизонтальное исполнение

ШТА: Шаблон текста алгоритма

A211 = (Z7—Z6) = Z7—Z6

A001 = Z7—Z6

РТА: Рабочий текст алгоритма

alg A001( ): Zh7( ); Zh6( )

ВИ: Вертикальное исполнение

ШТА: Шаблон текста алгоритма РТА: Рабочий текст алгоритма

A211 A211= A211= A211= A211= alg A211( ):

= ( ( | Z7 — | Z7 Zh7( )

( Z7 — | Z7 — | Z6 | Z6 Zh6( )

Z7 Z6 | Z6

— ) )

Z6

) // Необходимо строго соблюдать стандартные отступы

Исходный текст программной реализации

ВИ: Вертикальное исполнение

def eA211(ccrt, hCycles): # alg A211( ):

hCycles.Zh(ccrt.techsys.head7) # Zh7( ) - типовой цикл СГ7

hCycles.Zh(ccrt.techsys.head6) # Zh6( ) - типовой цикл СГ6

РМУ 3.6 Текущее задание:

Алгоритм A222: Параллельная конъюнкция двух команд

Исходное общее описание алгоритма

СФА: Структурная формула алгоритма

Алгоритм этапа обработки (основного перехода тех. операции):

A222 = (Z7 & Z6) = (Z7 #& Z6) = #(Z7, Z6)& = # Z7, Z6 &

Алгоритм операционного цикла // включая загрузку и разгрузку

A = (Zz — A222 — Zr) = (Zz — (Z7 & Z6) — Zr)

ССА: Структурная схема алгоритма

Вариант 1 Вариант 2

 

ДИА: Диаграмма исполнения алгоритма: mz7 = 60, mz6 = 70

 

Многопоточные представления

ССА: Структурная схема алгоритма / Вариант 3

Дополнительный поток (thread):

команда Z6, упакованная в поток

 

Основной поток (Main)

 

Структурные операторы:

FZi = F(Zi) = Fork(Zi) — оператор узла вилки:

упаковка в поток и вызов команды Zi в потоке

JZi = J&Zi = J&(Zi) = Join_&(Zi) — оператор узла сборки:

ожидание (wait) завершения команды Zi

ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст

ГИ: Горизонтальное исполнение

ШТА: Шаблон текста алгоритма

A222 = (Z7 & Z6) = (Z7 #& Z6) = #(Z7, Z6)& = # Z7, Z6 & =

= # Z7 Z6 & = # Z7 Z6 & = # Z7 Z6 & =

= FZ6 Z7 JZ6 = FZ6—Z7—J&Z6

// Рабочий оператор Z6 связывают:

// слева вилка # — переходит в структурный оператор FZ6;

// справа сборка & — переходит в структурный оператор J&Z6.

РТА: Рабочий текст алгоритма

alg A222 ( ): Fork(Zh6( )); Zh7( ); Join_&(Zh6( ))

ВИ: Вертикальное исполнение

ШТА: Шаблон текста алгоритма РТА: Рабочий текст алгоритма

A222 = alg A222( ):

| FZ6 Fork(Zh6( ))

| Z7 Zh7( )

| J&Z6 Join_&(Zh6( ))

Исходный текст программной реализации

ВИ: Вертикальное исполнение

Простой вариант:

def eA222(ccrt, hCycles): // alg A222():

thread.start_new(hCycles.Zh, (ccrt.techsys.head6, )) // Fork(Zh6())

hCycles.Zh(ccrt.techsys.head7) // Zh7()

while not ccrt.techsys.head6.yzh: // Join(Zh6()): ожидание (head6.yzh = 1)

pass // пустой оператор тела цикла

// Выполняется активное ожидание события — процессор занят до конца цикл

Более рациональный вариант:

def eA222(ccrt, hCycles): // alg A222():

thread.start_new(hCycles.Zh, (ccrt.techsys.head6, )) // Fork(Zh6())

hCycles.Zh(ccrt.techsys.head7) // Zh7()

while not ccrt.techsys.head6.yzh: // Join(Zh6()): ожидание (head6.yzh = 1)

time.sleep(0.1) // Задержка повторения цикла:

// Пассивное (почти пассивное) ожидание события:

// процессор освобождается на время задержки

Диспетчер задач ОС Windows

// начальный всплеск — загрузка конфигурации программы

Отработка цикла eA222

На графике отражается этап ожидания завершения параллельной конъюнкции в цикле while.

Реализуется активное ожидание в пустом цикле.

На время ожидания процессор загружается одним потоком на 100%.

Модификация 1 подпрограммы — ввод в цикл оператора задержка

// вместо пустого оператора pass

def eA222(ccrt, hCycles): // alg A222():

thread.start_new(hCycles.Zh, (ccrt.techsys.head6, )) // Fork(Zh6())