О некоторых свойствах процедур с планированием повторного входа. Язык Planning C
Описательные возможности процедур и функций с планированием повторного входа. Реализуемость классических управляющих конструкций. Язык программирования Planning C, возможность его применения при решении трудоемких задач обучения глубоких нейронных сетей.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | статья |
Язык | русский |
Дата добавления | 08.03.2019 |
Размер файла | 18,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
О некоторых свойствах процедур с планированием повторного входа. Язык Planning C
Пекунов Владимир Викторович
доктор технических наук
Инженер-программист, ОАО "Информатика"
Россия, Ивановская область, г. Иваново
Аннотация
В данной статье анализируются описательные возможности процедур и функций с планированием повторного входа. Процедура/функция с планированием повторного входа отличается от обычной процедуры/функции наличием динамически пополняемого (как изнутри, так и извне) плана исполнения. Это достаточно новый формализм, теоретические и практические свойства которого до сих пор мало освещены в научной литературе. Особое внимание уделяется языку программирования Planning C, в полной мере реализующему процедуры и функции с планированием повторного входа. Описательные возможности процедур/функций с планированием повторного входа рассматриваются как теоретически, с применением расширенных машин Тьюринга, так и конструктивно, путем построения эквивалентов базовых алгоритмических управляющих конструкций на базе данных процедур. Новизна состоит в доказательстве представимости любых последовательных и параллельных алгоритмов с помощью данных процедур. Предлагается применение Planning C, реализующего такие процедуры/функции, для решения трудоемких задач вычислительной математики на параллельных вычислительных системах. Показана возможность его применения при решении задачи обучения глубоких нейронных сетей.
Ключевые слова: процедуры, планирование повторного входа, последовательные алгоритмы, параллельные алгоритмы, алгоритмическая полнота, Planning C, язык программирования, трудоемкие вычисления, глубокие нейронные сети, вычислительная математика
Введение
Активный прогресс в области теории и практики программирования, появление новых задач в этой области (например, связанных с широким применением машинного обучения при анализе больших массивов данных) стимулирует нас к поиску и анализу новых решений. При этом особенно актуальны задачи определения теоретической и практической ценности появляющихся новых подходов. В данной статье рассматривается новый формализм в области программирования -- процедуры/функции с планированием повторного входа (ПППВ/ФППВ) [1, 2], свойства которых до сих пор недостаточно описаны в научной литературе. Целью данной работы является определение описательных свойств формализма ПППВ/ФППВ. Для достижения данной цели поставим следующие задачи: рассмотреть свойства формализма с теоретической точки зрения; сформулировать практические выводы по его применению.
Процедуры и функции с планированием повторного входа
Процедура/функция с планированием повторного входа отличается от обычной процедуры/функции наличием пополняемого (как изнутри, так и извне) плана исполнения. Каждый этап плана содержит комплекс специфических значений параметров ПППВ/ФППВ. При вызове ПППВ/ФППВ план содержит, как минимум, совокупность значений параметров, указанных при вызове (инициализационный этап). ПППВ/ФППВ последовательно вызывается для каждого этапа плана, при каждом таком вызове из начала плана извлекается очередной этап, а соответствующие ему значения помещаются в параметры вызова ПППВ/ФППВ. При выполнении тела ПППВ/ФППВ в план могут быть помещены новые этапы, как в начало, так и в конец. Согласованная работа на различных этапах работы ПППВ/ФППВ обеспечивается, во-первых, взаимодействием через глобальные данные, во-вторых, передачей данных с этапа на этап через специальные «туннелирующие» ссылочные параметры. Такая идеология работы ПППВ/ФППВ особенно уместна при решении задач, предполагающих явное или неявное использование стека, дека, очереди, массива, дерева (а также любых иных структур данных, для которых возможно построение последовательного алгоритма обхода), но может быть успешно применена и для реализации иных алгоритмов.
Параллельное исполнение
Отметим, что работа ПППВ/ФППВ может быть легко распараллелена в идеологии «портфеля задач» [3], при которой параллельная система набирает на вычислительные узлы, по мере их освобождения, задачи из некоторого пополняемого множества. В роли «портфеля» выступает план, в роли задачи этап плана.
Более сложные виды параллелизма (как минимум векторный и конвейерный [4]) могут быть реализованы с помощью специальной конструкции -- цепи процедур/функций, в которой все процедуры/функции запускаются параллельно и, в случае конвейера, могут передавать данные путем стандартного механизма планирования, с той разницей, что ПППВ/ФППВ пополняет не свой план, а план следующей по цепи ПППВ/ФППВ. Прочие параллельные режимы могут рассматриваться как расширения векторного, если имеет место обмен данными между элементами вектора.
С помощью ПППВ/ФППВ могут быть представлены произвольные параллельные вычислительные топологии, которые в таком случае описательно представляются множеством цепей с повторяющимися элементами. При этом рассматриваются цепи с прямым и обратным порядком передачи данных. На обратные цепи поставлено ограничение -- они могут быть исключительно двухэлементными. Передачи данных при этом также осуществляются путем удаленного планирования (ПППВ/ФППВ помещает данные в начало или конец плана иной ПППВ/ФППВ). Конструкции синхронизации могут быть реализованы с применением стандартных примитивов (семафоров, барьеров, критических секций), характерных для работы в реальной/виртуальной общей памяти параллельной системы.
глубокий нейронный повторный вход
Реализуемость классических управляющих конструкций
Данную проблему можно рассмотреть с применением двух подходов: а) конструктивно, построив эквиваленты ключевых алгоритмических конструкций с помощью ПППВ/ФППВ; б) теоретически, воспользовавшись элементами теории алгоритмов.
Конструктивный подход
Среди классических управляющих конструкций выделим ветвление, цикл с предусловием и обычный/рекурсивный вызов процедуры/функции. Первые две конструкции могут быть реализованы с применением ФППВ для языка, поддерживающего сокращенное вычисление логических выражений, третья конструкция реализуется ПППВ/ФППВ по определению -- они являются расширенными трактовками классических процедур и функций.
Ветвление вида «если <условие> то A иначе B» при наличии сокращенного вычисления логических выражений записывается (в синтаксисе C++ и дополнительных конструкций) следующим образом:
reenterable bool procA(<параметры A>)
{ A; return true; }
reenterable bool procB(<параметры B>)
{ B; return true; }
<условие> && procA(<параметры A>) || procB(<параметры B>);
Пусть конструкции планирования в начало и конец плана исполнения являются функциями, возвращающими истинное значение. Тогда основной цикл вида «пока <условие> повторять A» запишется так:
reenterable bool procA(<параметры A>)
{ A; return true; }
reenterable while_loop(<параметры>)
{ <условие> && plan_last(<параметры>) && procA(<параметры A>); }
while_loop(<параметры>);
Известно, что с помощью такого цикла с предусловием можно реализовать любые циклы.
Таким образом, ФППВ/ПППВ являются достаточными предельными средствами программирования, с помощью которых можно реализовать произвольные алгоритмы обработки данных . Более того, концепция ПППВ/ФППВ поддерживает идею «отчуждаемых планов», согласно которой заголовок ПППВ/ФППВ может рассматриваться как декларация типа плана -- линейной структуры данных (стека, дека, очереди, массива, в частном случае одиночной переменной), состоящей из однотипных элементов, каждый из которых имеет набор полей, совпадающих по типу и названию с параметрами ПППВ/ФППВ. Типы плана и элемента плана могут использоваться для декларации произвольных переменных, поэтому, средства ПППВ/ФППВ позволяют успешно заменить конструкторы сложных типов данных в большинстве случаев.
Теоретический подход
Рассмотрим проблему формально.
Теорема о предельной ПППВ. Предельной ПППВ является параллельная расширенная машина Тьюринга (параллельная РМТ) [5]. При этом будем считать, что транзакционная память реализуется РМТ программно.
Доказательство. Приведено в работе [5].
Теорема устанавливает эквивалентность предельного случая ПППВ/ФППВ и параллельной РМТ. Поскольку РМТ является надмножеством [5] классической машины Тьюринга, способной выполнить произвольный алгоритм, то ПППВ/ФППВ действительно способна выполнить произвольный алгоритм .
Практическое применение ПППВ/ФППВ. Язык программирования Planning C
Как было показано выше, ПППВ/ФППВ позволяют реализовать произвольные последовательные алгоритмы. Поскольку данный формализм предусматривает параллельное исполнение как отдельных процедур/функций, так и этапов плана одной процедуры/функции, возможна реализация и произвольных параллельных алгоритмов, причем весьма просто могут быть реализованы такие базовые шаблоны параллелизма как «портфель задач», конвейер и вектор, несколько более сложным является процесс создания произвольной вычислительной топологии. Поэтому, рассматриваемый формализм может быть эффективно применен для решения задач вычислительной математики, предполагающей применение одного из вышеуказанных шаблонов параллелизма. Это могут быть, например, проблемы, сводимые к решению задач оптимизации методом глобального случайного поиска [6] или генетическими алгоритмами или полным перебором. Сюда относятся проблемы обучения глубоких нейронных сетей, ряд проблем численного моделирования процессов механики жидкости и газа, проблемы поиска оптимальных схем распараллеливания [9].
Автором разработан язык программирования Planning C [10, 11], в полной мере реализующий все отмеченные особенности формализма ПППВ/ФППВ и расширяющий их возможности работы в условиях наличия/отсутствия транзакционной памяти. Для данного языка разработан транслятор и создан ряд экспериментальных программ на Planning C, прошедших испытания на машинах с общей памятью, кластерных, гибридных системах с многоядерными видеокартами.
В частности, разработана программа обучения глубоких нейронных сетей модифицированным методом генетического случайного поиска [10], являющегося развитием оригинального метода доцента С.Г.Сидорова [12].
Программа использует параллелизм «портфеля задач» и конвейер. Ее исполнение на системе с двумя видеоускорителями NVidia Tesla K40 (0,88 ГГц, 2880 потоков) дало ускорение в 5,09 раз по сравнению с 16-ядерной 64-потоковой системой платформы Google's Compute Engine с процессорами Xeon 2,6 ГГц с векторными SSE-инструкциями.
Это на практике доказывает реализуемость, по меньшей мере, некоторых классических параллельных алгоритмов и дает основания утверждать практическую ценность параллелизма ПППВ/ФППВ.
Выводы
Таким образом, в настоящей работе рассмотрены описательные возможности формализма ПППВ/ФППВ по отношению к произвольным последовательным и параллельным алгоритмам. Доказано, что язык на базе ПППВ/ФППВ (в частности, Planning C) позволяет реализовать любой алгоритм. Возможности показаны теоретически, полученные выводы подкреплены опытом практического применения формализма в языке Planning C при решении задачи обучения глубоких нейронных сетей.
Библиография
1. Пекунов В.В. Процедуры с планированием повторного входа в языках высокого уровня при традиционном и параллельном программировании // Информационные технологии.-2009.-№8.-С.63-67.
2. Пекунов В.В. Новые технологии параллельного и традиционного программирования. Процедуры с планированием повторного входа // Сб. матер. IX межд. конф.-сем. "Высокопроизводительные параллельные вычисления на кластерных системах".-Владимир, 2009.-С.308-311.
3. Эндрюс Г.Р. Основы многопоточного, параллельного и распределенного программирования. -- М.: Издательский дом "Вильямс", 2003. -- 512 с.
4. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. -- СПб.: БХВ-Петербург, 2002. -- 608 с.
5. Пекунов В.В. Искусственные нейронные сети прямого рас-пространения. Описание с помощью расширенных машин Тьюринга, вербализация и применение в аэродинамике. -- LAP LAMBERT Academic Publishing, 2016.-- 177 с.
6. Растригин Л.А. Адаптация сложных систем. Рига: Зинатие, 1981.-375 с.
7. Chung, T.J. Computational Fluid Dynamics. -- Cambridge University Press, 2002. -- 1012 p.
8. Чернышева Л.П. Сравнение алгоритмов распараллеливания при решении уравнений в частных производных / Л.П. Чернышева // Тез. докл. Междунар. науч.-техн. конф. "Состояние и перспективы развития электротехнологий" (XI Бенардосовские чтения). -- Иваново, 2003. -- Т.1. -- С.87.
9. Пекунов В.В. Новые методы параллельного моделирования распространения загрязнений в окрестности промышленных и муниципальных объектов // Дис. докт. тех. наук.-Иваново, 2009.-274 с.
10. Пекунов В.В. Язык программирования Planning C. Инструментальные средства. Новые подходы к обучению нейронных сетей.-LAP LAMBERT Academic Publishing, 2017.-171 с.
11. Пекунов В.В. Язык параллельного программирования Planning C. Применение при обучении глубоких нейронных сетей на гибридных системах с OpenCL-видеоускорителями // Мат. Междунар. науч.-техн. конф. "XIX Бенардосовские чтения".-Иваново, 2017.-Т.3.-С.44-47.
12. Сидоров С.Г. Разработка ускоренных алгоритмов обучения нейронных сетей и их применение в задачах автоматизации проектирования: дис. ... канд. тех. наук. Иваново, 2003.-161 с
Размещено на Allbest.ru
...Подобные документы
Основы Web-программирования. Сервер баз данных MySQL. Язык сценариев PHP. Язык гипертекстовой разметки HTML. Назначение и цели разработки сайта. Форма входа и регистрации, обратная связь интернет–магазина. Требования к структуре сайта, описание контента.
курсовая работа [754,5 K], добавлен 02.06.2014Логические конструкции в системе программирования Паскаль. Команды языка программирования, использование функций, процедур. Постановка и решение задач механики в среде системы Паскаль. Задачи статики, кинематики, динамики решаемые с помощью языка Паскаль.
курсовая работа [290,9 K], добавлен 05.12.2008Функциональное назначение программы Labirint, возможность выбора пользователем точки входа в лабиринт и точки выхода из него. Описание логической структуры, выбор способа решения задачи, сущность процедур и функций с использованием локальных переменных.
контрольная работа [487,4 K], добавлен 26.11.2011Игра "Пятнашки": исходные данные, условия задачи и цели ее решения. Основные приемы программирования и типы данных, используемые при решении аналогичных задач. Для разработки программы использовался язык С и среда программирования Borland C++ Builder.
курсовая работа [674,1 K], добавлен 03.07.2011Анализ и постановка задач дисциплины "Компьютерная графика". Разработка структуры, функциональной схемы и программной документации. Руководство программисту и оператору. Выбор и обоснование языка программирования. Описание процедур, функций, оценок.
дипломная работа [3,6 M], добавлен 16.11.2011Этапы развития, особенности и возможности языка программирования Java; происхождение названия. Приложения Sun Microsystems: идеи, примитивные типы. Python - высокоуровневый язык программирования общего назначения: структуры данных, синтаксис и семантика.
реферат [79,0 K], добавлен 23.06.2012Язык программирования как формальная знаковая система, предназначенная для записи программ. Рефал как алгоритмический язык рекурсивных функций. Лисп как ассемблер, ориентированный на работу со списковыми структурами. Пролог: понятие, основные средства.
презентация [90,2 K], добавлен 22.02.2014Последовательность настройки механизмов контроля входа: настройка общих параметров входа для всех пользователей компьютера. Управление паролями, настройка параметров. Управление блокировкой пользователя и персональными идентификаторами, запреты работы.
лабораторная работа [656,2 K], добавлен 15.07.2009Способы применения нейронных сетей для решения различных математических и логических задач. Принципы архитектуры их построения и цели работы программных комплексов. Основные достоинства и недостатки каждой из них. Пример рекуррентной сети Элмана.
курсовая работа [377,4 K], добавлен 26.02.2015Характеристика этапов решения задач на электронных вычислительных системах. Разработка алгоритма и основы программирования. Язык Ассемблера, предназначенный для представления в удобочитаемой символической форме программ, записанных на машинном языке.
контрольная работа [60,5 K], добавлен 06.02.2011Использование пакета прикладных программ MS Office при решении экономических задач. Разработка баз данных при помощи Microsoft Access. Интернет-технологии и применение языка гипертекста HTML. Построение и вычисление финансовых функций с помощью MS Excel.
курсовая работа [3,2 M], добавлен 19.03.2010Понятие процедур и функций, их параметры, отличия и особенности спецификаций и тела. Вызов процедур и функций. Использование хранимых функций в SQL-операторах, уровни строгости для их вызова. Синтаксис удаления процедуры. Перегрузка модульных подпрограмм.
презентация [259,9 K], добавлен 14.02.2014Изучение основных стилей программирования: процедурного, функционального, логического, объектно-ориентированного. Язык Ассемблера, предназначенный для представления в символической форме программ, записанных на машинном языке. Многоцелевой язык Basic.
презентация [905,2 K], добавлен 23.03.2011Системы программирования и их графические возможности. Разработка мультимедиа курса, способствующего эффективному усвоению учащимися базовой школы темы "Графические возможности языка программирования" (на примере языков программирования Basic и Pascal).
дипломная работа [588,3 K], добавлен 29.12.2010Возможности программ моделирования нейронных сетей. Виды нейросетей: персептроны, сети Кохонена, сети радиальных базисных функций. Генетический алгоритм, его применение для оптимизации нейросетей. Система моделирования нейронных сетей Trajan 2.0.
дипломная работа [2,3 M], добавлен 13.10.2015Сравнительный анализ наиболее распространенных языков, их классификация, описание достоинств и недостатков. Использование процедур, функции и подпрограмм в языках программирования высокого уровня. Разработка и реализация программы "Бортовой компьютер".
курсовая работа [329,8 K], добавлен 22.06.2014Характерные черты программирования на алгоритмическом языке СИ (алфавит, операции, специфика операторов, комментарии и другие элементы). Аналитический обзор и рассмотрение примеров программ, иллюстрирующих особенности применения основных операторов СИ.
презентация [251,0 K], добавлен 26.07.2013Основные типы циклов программирования. Методы применения специальных функций break, continue и цикла while. Обработка массивов информации. Условия применения циклических алгоритмов на языке программирования С++. Инициализация одномерного массива.
курсовая работа [1,7 M], добавлен 06.01.2014Лаконичность, стандартный набор конструкций управления потоком выполнения, структур данных и обширный набор операций в основе языка программирования Си. Фортран как первый язык программирования с транслятором. Перевод программных кодов с Фортрана на Си.
отчет по практике [77,4 K], добавлен 18.10.2012Описание технологического процесса напуска бумаги. Конструкция бумагоделательной машины. Обоснование применения нейронных сетей в управлении формованием бумажного полотна. Математическая модель нейрона. Моделирование двух структур нейронных сетей.
курсовая работа [1,5 M], добавлен 15.10.2012