Расчетно-графическая работа (3 части) / А090/Этап 1.doc
Министерство образования Российской Федерации
Уфимский государственный авиационный технический университет
Факультет ИРТ: Информатика и робототехника
Кафедра ПСИ: Проектирование систем информатики
РГР: Расчетно-графическая работа
Общая тема:
ПАРАЛЛЕЛЬНЫЕ ЛОГИКО-АЛГОРИТМИЧЕСКИЕ СИСТЕМЫ
(алгоритмы и логика, аппаратная и программная реализация)
Часть 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
|
|
Структурные операторы:
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())
