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

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

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

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

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

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

Общая тема:

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

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

Часть 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

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

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

 

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

 

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

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())