Расчетно-графическая работа (3 части) / А600/Этап 1.doc
Министерство образования Российской Федерации
Уфимский государственный авиационный технический университет
Факультет ИРТ: Информатика и робототехника
Кафедра ПСИ: Проектирование систем информатики
РГР: Расчетно-графическая работа
Общая тема:
ПАРАЛЛЕЛЬНЫЕ ЛОГИКО-АЛГОРИТМИЧЕСКИЕ СИСТЕМЫ
(алгоритмы и логика, аппаратная и программная реализация)
Часть 1
НАЧАЛЬНАЯ ПОДГОТОВКА
Простейшие алгоритмы:
Структурные схемы и формулы
Многопоточная программная реализация
(Лабораторная работа)
Пояснительная записка
3053.7544.0000-ПЗ
Направление подготовки:
654600: ИВТ: Информатика и вычислительная техника
Специальность:
220200: АСОИиУ: Автоматизированные системы обработки информации и управления
Курс обучения: 2
Учебная группа: АСОИ-232
Работу выполнил студент Ахмадуллин Б. Р.
Зачетная книжка № 055544
Вариант задания: A600
Работу принял Житников А. П.
2007 г.
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 = 055544
последние три цифры номера: abc = 542
б) Таблица параметров задания:
| Номера команд | i = c | j = b | k = a |
| 2 | 4 | 5 | |
| Команды | Zi = Zc | Zj = Zb | Zk = Za |
| Z2 | Z4 | Z5 | |
| Длительности команд | mi = 4*10 = 40 | mj =2*10 = 20 | mk = 5*10 = 50 |
// длительности представлены в некоторых условных единицах
в) Индивидуальный комплект алгоритмов
1) Вырожденные алгоритмы:
Пустой алгоритм:
A001 = ( )
Единичный (однокомандный) алгоритм:
А101 = (Z2)
2) Двухкомандые алгоритмы // Первичные невырожденные алгоритмы
A211 = (Z2 — Z4) — последовательный алгоритм;
А222 = (Z2 & Z4) = (Z2 #& Z4) — параллельная конъюнкция команд;
3) Трехкомандный алгоритм:
А323 = (Z2 & Z4 & Z5) = (Z2 #& Z4 #& Z5) — параллельная конъюнкция команд.
Запись комбинаций параметров настройки панели
При каждой новой загрузке программы parATK устанавливаются стандартные начальные параметры длины инструмента силовых головок, определяющих параметры длительности типовых циклов силовых головок:
быстрый подвод — рабочая подача — быстрый отвод.
Для работы с другими параметрами длительности циклов необходима установка комбинации новых параметров длины инструмента — посредством слайдеров (ползунков) в наладочном режиме.
Новые параметры сами по себе не сохраняются и при новой загрузке программы устанавливаются стандартные исходные параметры. При этом для восстановления необходимых заданных параметров необходимо их снова устанавливать вручную. Это неудобно в работе, особенно в конфигурации АТК12 с большим числом силовых головок.
Для запоминания и повторного применения необходимых комбинаций параметров длины инструмента (и других параметров) предусмотрено меню:
Настройки
Меню Настройки
Команды меню:
Загрузка стандартных параметров:
· восстановление комбинации стандартных исходных параметров панели управления, если они были изменены;
· параметры содержатся файле parDefault.ini.
Загрузка заданных параметров:
· загрузка ранее записанной комбинации заданных параметров панели управления;
· параметры содержатся в некотором файле,
Запись заданных параметров панели:
запись заданных параметров, установленных на элементах панели управления;
запись производится в файл с любым именем,
При необходимости меню Настройки можно отделить в отдельное окно:
Для отделения меню необходим клик клавиши мыши в поле над пунктирной линией отрыва.
Порядок записи комбинаций заданных параметров
Представлен опорный пример индивидуального задания.
а) Код индивидуального задания:
номер зачетной книжки: XXХabc = 055544
последние три цифры номера: abc = 542
б) Таблица параметров задания:
| Номера команд | i = c | j = b | k = a |
| 2 | 4 | 5 | |
| Команды | Zi = Zc | Zj = Zb | Zk = Za |
| Z2 | Z4 | Z5 | |
| Длительности команд | mi = b*10 = 40 | mj = c*10 = 20 | mk = a*10 = 50 |
| Силовая головка | СГ2 | СГ4 | СГ5 |
| Длина инструмента силовой головки | Li = L2 = 40 | Lj = L4 = 20 | Lk = L5 = 50 |
в) Установка заданных параметров длины инструмента:
Li = L2 = 40 Lj = L4 = 20 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 = (Z2) = Z2
Алгоритм операционного цикла // включая загрузку и разгрузку
A = (Zz — A101 — Zr) = (Zz — (Z2) — Zr) = (Zz —Z2 — Zr)
ССА: Структурная схема алгоритма
Вариант 1 Вариант 2
ДИА: Диаграмма исполнения алгоритма: mz2 = 40
ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст
ГИ: Горизонтальное исполнение
ШТА: Шаблон текста алгоритма
A001 = (Z2) = Z2
A001 = Z2
РТА: Рабочий текст алгоритма
alg A001(): Zh2()
ВИ: Вертикальное исполнение
ШТА: Шаблон текста алгоритма РТА: Рабочий текст алгоритма
A001 A001= A001= A001= alg A001():
= ( ( | Z2 Zh2()
( Z2 | Z2
Z2 ) )
) // Необходимо строго соблюдать стандартные отступы
Исходный текст программной реализации
ВИ: Вертикальное исполнение
def eA101(ccrt, hCycles): // alg A211():
hCycles.Zh(ccrt.techsys.head2) // Zh2() - типовой цикл СГ2
// Необходимо строго соблюдать стандартные отступы
1.1.4 Алгоритм A211: Последовательность двух команд
Описание алгоритма
СФА: Структурная формула алгоритма
Алгоритм этапа обработки (основного перехода тех. операции):
A211 = (Z2 — Z4) = Z2 — Z4
Алгоритм операционного цикла // включая загрузку и разгрузку
A = (Zz — A211 — Zr) = (Zz — (Z2 —Z4) — Zr) = (Zz — Z2 —Z4 — Zr)
ССА: Структурная схема алгоритма
Вариант 1 Вариант 2
ДИА: Диаграмма исполнения алгоритма: mz2 = 40, mz4 = 20
ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст
ГИ: Горизонтальное исполнение
ШТА: Шаблон текста алгоритма
A211 = (Z2—Z4) = Z2—Z4
A001 = Z2—Z4
РТА: Рабочий текст алгоритма
alg A001( ): Zh2( ); Zh4( )
ВИ: Вертикальное исполнение
ШТА: Шаблон текста алгоритма РТА: Рабочий текст алгоритма
A211 A211= A211= A211= A211= alg A211( ):
= ( ( | Z2 — | Z2 Zh2( )
( Z2 — | Z2 — | Z4 | Z4 Zh4( )
Z2 Z4 | Z4
— ) )
Z4
) // Необходимо строго соблюдать стандартные отступы
Исходный текст программной реализации
ВИ: Вертикальное исполнение
def eA211(ccrt, hCycles): # alg A211( ):
hCycles.Zh(ccrt.techsys.head2) # Zh2( ) - типовой цикл СГ2
hCycles.Zh(ccrt.techsys.head4) # Zh4( ) - типовой цикл СГ4
РМУ 3.6 Текущее задание:
Алгоритм A222: Параллельная конъюнкция двух команд
Исходное общее описание алгоритма
СФА: Структурная формула алгоритма
Алгоритм этапа обработки (основного перехода тех. операции):
A222 = (Z2 & Z4) = (Z2 #& Z4) = #(Z2, Z4)& = # Z2, Z4 &
Алгоритм операционного цикла // включая загрузку и разгрузку
A = (Zz — A222 — Zr) = (Zz — (Z2 & Z4) — Zr)
ССА: Структурная схема алгоритма
Вариант 1 Вариант 2
ДИА: Диаграмма исполнения алгоритма: mz2 = 40, mz4 = 20
Многопоточные представления
ССА: Структурная схема алгоритма / Вариант 3
|
|
Структурные операторы:
FZi = F(Zi) = Fork(Zi) — оператор узла вилки:
упаковка в поток и вызов команды Zi в потоке
JZi = J&Zi = J&(Zi) = Join_&(Zi) — оператор узла сборки:
ожидание (wait) завершения команды Zi
ВТА: Вербальный текст алгоритма / ПиПТ: Питон-подобный текст
ГИ: Горизонтальное исполнение
ШТА: Шаблон текста алгоритма
A222 = (Z2 & Z4) = (Z2 #& Z4) = #(Z2, Z4)& = # Z2, Z4 & =
= # Z2 Z4 & = # Z2 Z4 & = # Z2 Z4 & =
= FZ4 Z2 JZ4 = FZ4—Z2—J&Z4
// Рабочий оператор Z4 связывают:
// слева вилка # — переходит в структурный оператор FZ4;
// справа сборка & — переходит в структурный оператор J&Z4.
РТА: Рабочий текст алгоритма
alg A222 ( ): Fork(Zh4( )); Zh2( ); Join_&(Zh4( ))
ВИ: Вертикальное исполнение
ШТА: Шаблон текста алгоритма РТА: Рабочий текст алгоритма
A222 = alg A222( ):
| FZ4 Fork(Zh4( ))
| Z2 Zh2( )
| J&Z4 Join_&(Zh4( ))
Исходный текст программной реализации
ВИ: Вертикальное исполнение
Простой вариант:
def eA222(ccrt, hCycles): // alg A222():
thread.start_new(hCycles.Zh, (ccrt.techsys.head4, )) // Fork(Zh4())
hCycles.Zh(ccrt.techsys.head2) // Zh2()
while not ccrt.techsys.head4.yzh: // Join(Zh4()): ожидание (head4.yzh = 1)
pass // пустой оператор тела цикла
// Выполняется активное ожидание события — процессор занят до конца цикл
Более рациональный вариант:
def eA222(ccrt, hCycles): // alg A222():
thread.start_new(hCycles.Zh, (ccrt.techsys.head4, )) // Fork(Zh4())
hCycles.Zh(ccrt.techsys.head2) // Zh2()
while not ccrt.techsys.head4.yzh: // Join(Zh4()): ожидание (head4.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.head4, )) // Fork(Zh4())
