автореферат диссертации по информатике, вычислительной технике и управлению, 05.13.11, диссертация на тему:Функциональный язык для разработки переносимых параллельных программ

кандидата технических наук
Казаков, Фёдор Александрович
город
Красноярск
год
2003
специальность ВАК РФ
05.13.11
Диссертация по информатике, вычислительной технике и управлению на тему «Функциональный язык для разработки переносимых параллельных программ»

Оглавление автор диссертации — кандидата технических наук Казаков, Фёдор Александрович

Введение.

1 Анализ принципов разработки мобильного параллельного программного обеспечения.

1.1 Вопросы управление в параллельном программировании.

1.2 Разработка параллельных программ в функциональной парадигме.

1.2.1 Язык функционального программирования Haskell.

1.2.2 Функциональный язык программирования Clean.

1.2.3 Функциональный язык параллельного программирования Sisal.

1.3 Управление вычислениями по готовности данных.

1.3.1 Система программирования T-system.

1.3.2 Система программирования и язык потоков данных DCF.

1.4 Общее состояние языков параллельного программирования.

Выводы по главе 1.

2 Функционально-потоковая модель параллельных вычислений.

2.1 Общие принципы организации модели.

2.2 Программо-формирующие операторы.

2.3 Описание динамики функционирования.

2.3.1 Правила межоператорных переходов.

2.3.2 Правила срабатывания программо-формирующих операторов

2.4 Эквивалентные преобразования.

Выводы по главе 2.

3 Функциональный язык параллельного программирования.

3.1 Используемый метаязык.

3.2 Элементарные конструкции.

3.2.1 Разделители.

3.2.2 Комментарии.

3.2.3 Идентификаторы.

3.2.4 Зарезервированные слова.

3.3 Обозначения.

3.4 Объекты.

3.5 Сигналы.

3.6 Значащие величины (константы).

3.6.1 Целые константы.

3.6.2 Действительное число.

3.6.3 Символьные константы.

3.6.4 Логическая константа.

3.6.5 Специальные знаки.

3.6.6 Константы ошибок.

3.7 Составные объекты.

3.8 Функция.

3.8.1 Организация обычной функции.

3.9 Блок.

3.10 Выражение.

3.11 Структура программы.

3.12 Предопределенные функции и данные.

3.12.1 Использование специальных знаков.

3.12.2 Использование данных.

3.12.3 Использование специальных функций.

3.13 Использование предопределенных типов.

3.14 Правила эквивалентных преобразований.

Выводы по главе 3.

4 Реализация среды исполнения программ.

4.1 Последовательная интерпретация функционально-параллельных программ.

4.1.1 Транслятор.

4.1.2 Интерпретатор.

4.1.3 Модуль управления.

4.2 Примеры программ на ФЯПП.

4.2.1 Использование параллельного списка аргументов.

4.2.2 Использование параллельного списка функций.

4.2.3 Использование задержанных списков.

4.2.4 Использование параллельной рекурсии.

4.2.5 Использование функций в качестве параметров.

4.2.6 Программа умножения двух матриц.

Выводы по главе 4.

5 Применение функционально-потокового языка для анализа и синтеза алгоритмов.

5.1 Реализация основных программных конструкций.

5.1.1 Реализация последовательного выполнения.

5.1.2 Альтернатива.

5.1.3 Итерация.

5.2 Использование максимального параллелизма для анализа параллельных алгоритмов с заданными ограничениями.

5.2.1 Теоретическая сортировка.

5.2.2 Вывод ограниченных алгоритмов.

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

5.4 Использование разных форм одной и той же функции для повышения эффективности вычислений.

Выводы по главе 5.

Введение 2003 год, диссертация по информатике, вычислительной технике и управлению, Казаков, Фёдор Александрович

В связи с развитием параллельных вычислений и появлением новых архитектур вычислительных систем становится актуальной задача переноса программ между различными системами.

В настоящее время проблема мобильности программного обеспечения (ПО) практически решена для последовательных ЭВМ. При этом перенос традиционного программного обеспечения может осуществляться различными способами.

Возможность переноса ПО на уровне исходных кодов обеспечивается реализацией наиболее распространенных языков программирования практически для всех архитектур и операционных систем. Для обеспечения полного соответствия реализаций принимаются международные стандарты, как на языки программирования [1], так и на библиотеки архитектурно зависимых модулей [2].

Существуют также способы переноса программ на уровне исполняемых модулей, например технология Java [3].

Иначе обстоит дело с мобильностью ПО параллельных вычислительных систем (ПВС). Методы, используемые в настоящее время при его разработке, не обеспечивают возможность эффективного переноса программ с одной ПВС на другую.

Существуют разнообразные способы написания параллельных программ, которые условно можно разделить на три группы:

- последовательное программирование с дальнейшим автоматическим распараллеливанием;

- непосредственное формирование потоков параллельного управления, с учетом особенностей архитектур ПВС или операционных систем (ОС);

- описание параллелизма без использования явного управления.

В первой группе способов используются различные приемы построения графа информационных зависимостей алгоритма на основе формального анализа исходного текста программы с последующей автоматической генерацией параллельной версии программы [4, 5, 6, 7, 8, 9].

Во второй используется расширение традиционных последовательных языков операторами распараллеливания и синхронизации [10, 11, 12]. Уровень параллелизма полностью контролируется разработчиком и может меняться в зависимости от конкретных условий. К этой же группе относятся и работы по созданию специализированных языков описания параллельных процессов с директивной стратегией управления [13].

К третьей группе относятся методы описания алгоритмов с использованием только информационного графа решаемой задачи с неявным управлением вычислениями. Предполагается, что параллельный программно-аппаратный комплекс, который будет выполнять данную задачу, автоматически адаптирует заданный алгоритм к особенностям архитектуры и обеспечит его эффективное выполнение. Такой подход предлагался в работах по описанию схем потоков данных [14, 15, 16], а так же рассматривался в различных функциональных языках программирования [17, 18, 19].

Первый метод построения параллельных программ способен обеспечить высокий уровень параллельности только на очень узком кругу задач [4, 6, 7, 20]. Возможности автоматического анализа последовательного текста программы в значительной степени зависят от используемого алгоритма, от способа задания графа управляющих связей.

Второй способ в настоящее время наиболее распространен. Практически каждый современный язык программирования имеет параллельное расширение [21, 10], создано большое число библиотек [23, 24], обеспечивающих создание и синхронизацию параллельных процессов. Созданы также специфические языки, реализующие этот подход.

Однако в подобных программах степень параллелизма директивно задается разработчиком ПО, исходя из его представлений об особенностях архитектуры конкретной ПВС [24, 25, 26]. Перенос такого ПО без существенной модификации с одной архитектуры на другую практически невозможен.

С точки зрения мобильности параллельного ПО наиболее перспективными являются методы разработки программ на основе описания информационных зависимостей алгоритма. В этом случае информационный граф алгоритма описывает максимально возможный уровень параллелизма [19, 23], а в последствии, в ходе трансляции и исполнения программы, производится его преобразование согласно тем требованиям и ограничениям, которые определяются исполняющей ПВС. Это обеспечивает возможность переноса ПО на уровне исходных кодов между различными ПВС.

Обладая рядом потенциальных преимуществ, такой подход долгое время не получал развития из-за высокой ресурсоемкости этапа подготовки вычислений. В настоящее время широкое распространение ПВС и разнообразие их архитектур привело к повышению интенсивности исследований в данном направлении [16, 18, 27, 28].

Современное соотношение архитектур ПВС и средств разработки параллельных программ, позволяет сказать, что актуальна разработка новых инструментальных систем для проектирования переносимого параллельного ПО.

Цель работы состоит в исследовании и разработке языковых средств, обеспечивающих создание мобильных параллельных программ на основе неявного управления по готовности данных.

Достижение цели связывается с решением следующих задач:

1. Разработка формальной функционально-потоковой модели параллельных вычислений, которая позволяет строить процесс вычислений на основе информационного графа алгоритма, не ограничивая его потенциальный параллелизм.

2. Разработка методов эквивалентных преобразований информационных моделей алгоритмов.

3. Исследование и разработка синтаксиса и семантики функционально-потокового языка параллельного программирования, основанного на предложенной модели вычислений.

4. Разработка инструментальных средств, поддерживающих создание и трансляцию параллельных программ.

5. Использование разработанной системы для создания функционально-потоковых программ, исследование методов создания параллельного ПО.

Методы исследования. В диссертационной работе использовались методы и понятия теории графов, теории алгоритмов, элементы теории множеств, теории синтаксического анализа и построения ЯП. В качестве формальных моделей анализа параллелизма применялись различные классы потоковых схем. Для описания синтаксиса языка программирования использовались расширенные формы Бэкуса-Наура (РБНФ), диаграммы ВиртаВ экспериментальной части исследований применялись теория синтаксического анализа и компиляции, методы объектно-ориентированного программирования.

Научная новизна. В ходе проведенных исследований автором получены следующие результаты:

1. Предложена функционально-потоковая модель параллельных вычислений, позволяющая представить программу в виде ацикличного информационного графа без явного задания стратегии выполнения. Это позволяет обеспечить ресурсную независимость от конкретных архитектур ПВС.

2. На основе предлагаемой модели разработан функциональный язык параллельного программирования, позволяющий создавать архитектурно независимые программы.

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

Практическая ценность. Разработанные автором диссертации функционально-потоковая модель вычислений и язык параллельного программирования позволяют создать систему проектирования мобильного параллельного программного обеспечения. Для исследования возможностей созданного функционально-потокового языка разработана программная реализация инструментальной системы для последовательной архитектуры ВС.

Публикации. Основные результаты диссертационной работы опубликованы 15 печатных работах, из которых 6 статей, 9 тезисов докладов.

По теме исследований были получены гранты ККФН № 4F0093, 1995 г. и РФФИ № 02-07-90135, 2002 г.

Апробация работы. Основные положения диссертации докладывались и обсуждались на следующих конференциях и семинарах: 3-ая региональная школа-семинар «Распределенные и кластерные вычисления», г. Красноярск 2003 г.; третий сибирский конгресс по прикладной и индустриальной математике (ИНПРИМ-98), г. Новосибирск, Института математики СО РАН, 1998 г.; 6-й Всероссийский семинар "Нейроинформатика и ее приложения" г. Красноярск, 1998 г.; межрегиональная конференция «Проблемы информатизации региона» г. Красноярск, 1995 г.; всероссийский рабочий семинар «Нейроинформатика и ее приложения» г. Красноярск, 1994 г.

Структура и объем работы. Диссертация состоит из введения, 5 глав, заключения, списка литературы и двух приложений. Работа содержит 147 страницы текста, 13 рисунков и 10 таблиц. Список литературы содержит 107 наименований.

Заключение диссертация на тему "Функциональный язык для разработки переносимых параллельных программ"

Выводы по главе 5

1. Функциональное программирование на языке с управлением вычислениями по готовности данных позволяет использовать практически все основные приемы функционального программирования. Наряду с ними могут использоваться развитые средства организации параллельных вычислений, еще более расширяющие возможности программистов. В частности, разработанный язык позволяет создавать и выполнять программы, обладающие максимальным параллелизм при выполнении в неограниченных ресурсах.

2. Несмотря на недостижимость и избыточность параллельных программ, ориентированных на неограниченные ресурсы, их можно использовать для разработки программ с ограниченным параллелизмом. В разделе показано, что данное направление позволяет создавать высоко эффективные параллельные и последовательные программы за счет сжатия исходного параллелизма путем наложения различных ресурсных и функциональных ограничений. Предлагаемый язык программирования позволяет описывать как программы с неограниченным, так и ограниченным параллелизмом, обеспечивая при этом поэтапные преобразования исходного текста. Алгоритмы с неограниченным параллелизмом могут использоваться в качестве обобщенного хранилища алгоритмов с ограниченным параллелизмом, а языковые средства обеспечивают необходимое представление.

3. Для получения параллелизма требуемого уровня можно использовать подстановки эквивалентных функций, имеющих различный уровень параллелизма. Использование этих функций можно связать со знаниями об архитектурах параллельных вычислительных систем.

4. Функционально-параллельное программирование позволяет выделить свойственный ему набор обобщенных функций, служащих базовыми абстракциями для построения программ. Выделение и системная поддержка часто используемых обобщенных функций позволяет повысить эффективность вычислительного процесса.

Заключение

Получены следующие научные и практические результаты работы:

1. Установлена необходимость разработки средств проектирования мобильных программ без учета ресурсных ограничений конкретных ПВС. Сформулированы основные требования к модели вычислений, позволяющей описывать процесс управления вычислениями, не ориентируясь на ресурсные ограничения конкретной архитектуры ПВС.

2. Разработана функционально-потоковая модель вычислений, которая определяет управление вычислениями на основе анализа готовности данных, что позволяет рассматривать модель программы как ресурсно-независимый информационный граф.

3. Исследованы и разработаны правила эквивалентных преобразований информационных моделей алгоритмов, позволяющие оптимизировать граф информационных зависимостей алгоритма с учетом наложения различных ресурсных ограничений.

4. На основе предложенной модели разработан синтаксис и семантика функционального языка параллельного программирования. Язык обеспечивает возможность тестового предоставления информационного графа программы. Определен состав встроенных функций необходимый для эффективной реализации параллельных алгоритмов.

5. Разработана инструментальная система для создания и трансляции параллельных программ на предложенном языке программирования. Разработаны примеры использования различных языковых конструкций для реализации широкого спектра параллельных алгоритмов. Использование разработанной системы позволило определить требования и выделить набор функций, которые имеют ресурсные ограничения и для повышения эффективности требуют ресурсно-зависимых реализаций.

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

Библиография Казаков, Фёдор Александрович, диссертация по теме Математическое и программное обеспечение вычислительных машин, комплексов и компьютерных сетей

1. ANC1.Х3.159, American National Standard Programming Language C. / American National Standards Institute -New York, 1989.

2. Message Passing Interface Forum. MPI: A message-passing interface standard. // International Journal of Supercomputer Applications, 8(3/4), 1994. Special issue on MPI.

3. Вебер, Дж. Технология Java / Дж. Вебер; Пер. с англ. СПб. Санкт-Петербург, BHV, 1998. - 1104 с.

4. Антонов, А. С. Эффективная адаптация последовательных программ для современных векторно-конвейерных и массивно-параллельных СуперЭВМ / А. С. Антонов, Вл. В. Воеводин // Программирование. 1996 г. -№4.-с. 37-51.

5. Саркисян, А.А. Машинонезависимая оптимизация исходных программ. /

6. A.А. Саркисян М.: Радио и связь, 1995. - 208 с.

7. Трахтенгерц, Э.А. Программное обеспечение параллельных процессов / Э.А. Трахтенгерц М.: Наука, 1987. - 272 с.

8. Трахтенгерц, Э.А. Введение в теорию анализа и распараллеливания программ ЭВМ в процессе трансляции / Э.А. Трахтенгерц М.: Наука. 1981.

9. Вальковский, В.А. Распараллеливание алгоритмов и программ. Структурный подход / В.А. Вальковский — М.: Радио и связь, 1989. — 176 с.

10. Бабичев, А.В. Распараллеливание программных циклов / А.В. Бабичев,

11. B.Г. Лебедев// Программирование. 1983. № 5, - с 52-63.

12. Fortran-DVM — язык разработки мобильных параллельных программ. / Н.А. Коновалов, В.А. Крюков, С.Н. Михайлов, JI.A. Погребцов // Программирование. 1995, № 1. — с. 49-54.

13. Немнюгин, С.А. Параллельное программирование для многопроцессорных систем. / С.А. Немнюгин, O.JI. Стесик СПб.: BHV-Петербург, 2002.-400 с.

14. Языки программирования / Под ред. Ф. Женюи Пер. с англ. М.: Мир, 1972.-406 с.

15. Легалов, А.И. Управление в вычислительных системах и языках программирования. / А.И. Легалов // Материалы конференции "Проблемы информатизации города". Красноярск, 1994. - с. 198-202.

16. Gostelow, К.Р. A new interpreter for data flow schemas and its implications for computer architecture, / K.P. Gostelow // TR 72, Dept. Inform, and Comput. Sci. Univ. Calif., Irvine: 1975, Nov.

17. Dennis, J.B. Weng Application of data flow computation for the weather problem, high speed computer and algorithm organization. / J.B. Dennis, K.S. Ken //Acad. Press. 1977. p. 143-157.

18. Головков, С.Л. О языке программирования для модели вычислений, основанной на принципе потока данных. / С.Л. Головков, К.Н. Ефимкин, Э.З. Любимский // препринт института прикладной математики им. М.В.Келдыша РАН, 2002 г.- № 72, 20 с.

19. Hudak, P. Para-Functional Programming in Haskell, In Parallel Functional Languages and Computing, / P. Hudak // ACM Press (New York) and Addison-Wesley (Reading, MA), 1991, pp. 159-196.

20. Leroy, X. The Objective Caml system release 3.04. Documentation and user's manual. / X. Leroy, Institut National de Recherche en Informatique et en Automatique. December 10, 2001.

21. Ки-Чанг Ким., Мелкозернистое распараллеливание неполных гнезд циклов. / Ки-Чанг Ким. // Программирование. 1997, № 2, - с. 52-66.

22. Корнеев, В.В. Параллельные вычислительные системы. / В.В. Корнеев, -М: «Нолидж», 1999. 320 с.

23. Кауфман, В.Ш. Языки программирования. Концепции и принципы. / В.Ш. Кауфман, М.: Радио и связь, 1993. - 432 с.

24. Воеводин, В.В. Параллельные вычисления. / В.В. Воеводин, Вл.В Воеводин. СПб.: БХВ-Петербург, 2002. - 608 с.

25. Корнеев, В.Д. Параллельное программирование в MPI. / В.Д. Корнеев, -Новосибирск: Изд-во СО РАН, 2000. 213 с.

26. Джоунз, Г. Программирование на языке Оккам / Г. Джоунз; Пер. с англ. -М.: Мир, 1989.-208 с.

27. Елизарова, Т.Г. Применение многопроцессорных транспьютерных систем для решения задач математической физики. / Т.Г. Елизарова, Б.Н. Четверушкин // Математическое моделирование, 1992, т. 4, №11, - с. 75-100.

28. Achten, P.M. The ins and outs of Clean I/O / P.M. Achten, M.J. Plasmeijer // In Journal of Functional Programming, 5(1), January 1995, - p. 81-110.

29. Thompson, S. Haskell: The Craft of Functional Programming. / S. Thompson, 2-nd edition, Addison-Wesley, 1999.

30. Вольфенгаген, В.Э. Конструкции языков программирования. Приемы описания / В.Э. Вольфенгаген М.: АО «Центр ЮрИнфоР», 2001,- 276 с.

31. Grama, A. Introduction to Parallel Computing / A. Grama, A. Gupta, G. Karypis, V. Kumar, Second Edition. Addison Wesley., 2003, p. 856.

32. Xoap, Ч. Взаимодействующие последовательные процессы. / Ч. Xoap, Пер. с англ. М.: Мир, 1989. - 264 с.

33. Легалов, А.И. Стратегии управления вычислениями. / А.И. Легалов, в кн.: Проблемы техники и технологий XXI века. Материалы научной конференции. Красноярск, КГТУ, 1994, - с. 122-126.

34. Дейкстра, Э. Дисциплина программирования. / Э. Дейкстра Э.- пер. с англ. М.: Мир, 1978.

35. Водяхо, А.И. Стратегии управления вычислительными процессами и их модели. / А.И. Водяхо, В.П. Емелин, А.И. Легалов // В кн.: Математическое и программное обеспечение САПР сетевых систем, Йошкар-Ола, 1985,-с. 135-142.

36. Бар, Р. Язык Ада в проектировании систем / Р. Бар, М.: Мир 1988 г. -320 с.

37. Головкин, Б.А. Параллельные вычислительные системы. / Б.А. Головкин, М.: Наука, Гл. ред. физ.-мат. лит., 1980. - 520 с.

38. Системы параллельной обработки. / Под ред. Д. Ивенс Пер с англ. М.: Мир, 1985.-416 с.

39. Майерс, Г. Архитектура современных ЭВМ / Г. Майерс, в 2-х книгах, -М.: Мир, 1985.-364 с.

40. Мультипроцессорные вычислительные системы / Под ред. Ф.Г. Энслоу, пер. с англ. — М.: Энергия, 1976. — 384 с.

41. Коваленко, Е. Архитектура Reliant RM1 ООО. / Е. Коваленко // Открытые системы, №6, 1996, с.5-10

42. Разработка и опыт эксплуатации суперкомпьютеров семейства "СКИФ" / С.М. Абрамов и др. // Информационные системы и технологии. Ч. 2. — Мн.: БГУ, 2002

43. Язык и система программирования для высокопроизводительных параллельных вычислений на неоднородных сетях. / А. Л. Ластовецкий, А. Я. Калинов, И. Н. Ледовских и др. // Программирование. 2000, № 4. - с. 55-80.

44. Уточненное описание языка С. / Ластовецкий А. Л. и др. // Программирование. 2002, N 6. С. 43-54.

45. Lastovetsky A. L. Parallel Computing on Heterogeneous Clusters. / John Wiley & Sons, 2003. 424 pp.

46. Голуб, Дж., Ван Лоун, Ч., Матричные вычисления / Дж. Голуб, Ч. Ван Лоун, М:"Мир", 1999

47. Коновалов, Н. A. C-DVM язык разработки мобильных параллельных программ / Н. А. Коновалов, В. А. Крюков, Ю. Л. Сазанов // Программирование. 1999, - № 1. - с. 54-65

48. Костенко, В.А. К вопросу об оценке оптимальной степени параллелизма / В.А. Костенко // Программирование. 1995, № 4, - с. 24-28.

49. Programming the Loral LDF 100 dataflow machine / Source ACM SIGPLAN Notices archive. Volume 22 , Issue 5 (May 1987), pp 47 — 57.

50. SIGMA-1: A Dataflow Computer for Scientific Computations. / T. Yuba, T. Shimada, K. Hiraki, H. Kashiwagi., Computer Physics Communications, 1985, pp 141-148,.

51. Gelly, O. LAU system software: A high level data driven language for parallel programming. / O. Gelly // In: Proc. of the 1976 Intern. Conf on Parallel Processing, p.255-262.

52. Воеводин, B.B. Информационная структура алгоритмов / B.B. Воеводин М.: МГУ, 1997-139 с.

53. Backus, J. Can Programming Be Liberated from von Neuman Style? A Functional Stile and Its Algebra of Programs. / J. Backus // CACM.: 1978, vol.21, N8. p. 613-641.

54. Бэкус, Дж., Алгебра функциональных программ: мышление функционального уровня, линейные уравнения и обобщенные определения / Дж. Бэкус, Пер. с англ. В книге: Математическая логика в программировании. Сборник статей. -М.: Мир, 1991. с. 8-53.

55. Plasmeijer, R, Concurrent Clean. Language Report / R. Plasmeijer, M. van Eekelen // Hilt High Level Software Tools B.V. and University of Ni-jmegen, 1998 r.

56. Feo, J. Sisal 90, Proc. HPFC '95 / J. Feo, P. Miller, S. Skedziewlewski, S. Denton, C. Soloman, High Performance Functional Computing, Denver, CO, April 9-11, 1995, pp. 35-47.

57. Хендерсон, У. Функциональное программирование / У. Хендерсон, пер. с англ. М.: Мир, 1983.

58. Программирование на языке R-Лисп / А.П. Крюков, А .Я. Родионов, А.Ю. Таранов и др. М.: Радио и связь, 1991. - 192 с.

59. Денис, Дж.Б. Схемы потоков данных / Дж.Б. Денис, Дж.Б. Фоссин, Дж.П. Линдерман В кн. Теория программирования. Ч 2. Новосибирск: ВЦ СО АН СССР, 1972 г. с 7-43.

60. Себеста, Роберт, У. Основные концепции языков программирования, 5-ое изд. / Роберт, У. Себе ста, пер. с англ. — М.: Издательский дом «Вильяме», 2001.-672 с.

61. Вирт, Н. Алгоритмы + структуры данных = программы. / Н. Вирт М.: Мир, 1985.

62. Дал, У. Структурное программирование. / У. Дал, Э. Дейкстра, К. Хоор пер с англ. М.: Мир, 1975. - 247 с.

63. Льюис, Ф. Теоретические основы проектирования компиляторов. / Ф. Льюис, Д. Розенкранц, Р. Стирнз М.: Мир, 1979.

64. Ахо, А. Теория синтаксического анализа, перевода и компиляции. / А. Ахо, Дж. Ульман. М.: Мир, 1978.

65. Барский, А.Б. Параллельные процессы в вычислительных системах. Планирование и организация / А.Б. Барский М.: Радио и связь, 1980. -256 с.

66. Буч, Г. Объектно-ориентированное проектирование с примерами применения. / Г. Буч, пер. с англ. М.: Конкорд, 1992. - 519 е., ил.

67. Буч, Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++ / Г. Буч, 2-е изд. пер. с англ. М.: "Издательства Бином", СПб: "Невский диалект", 1998 г. - 560 с.

68. Гамма, Э., Приемы объектно-ориентированного пректирования. Паттерны проектирования / Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес, пер. с англ. СПб: Питер, 2001. - 368 с.

69. Александреску, А. Современное проектирование на С++ / А. Александ-реску, пер. с англ. М.: Издательский дом «Вильяме», 2002. - 336 с.

70. Barak, A. The MOSIX Multicomputer Operating System for High Performance Cluster Computing. / A. Barak, O. La'adan // Journal of Future Generation Computer System, 13, 1998.

71. Steele Guy, L. Common Lisp the Language, 2nd Edition. / L. Steele Guy // http://www.cs.cmu.edu/

72. Maypep, У. Введение в программирование на языке ЛИСП / У. Маурер, М.: Мир, 1976.- 104 с.

73. Кнут, Д. Искусство программирования для ЭВМ. Том 1. Основные алгоритмы. / Д. Кнут, пер. с англ. — М.: Мир, 1976. — 736 с.

74. Кнут, Д. Искусство программирования для ЭВМ. Том 2. Получисленные алгоритмы. / Д. Кнут, пер. с англ. М.: Мир, 1977. - 726 с.

75. Кнут, Д. Искусство программирования для ЭВМ. Том 3. Сортировка и поиск. / Д. Кнут, пер. с англ. — М.: Мир, 1977. — 846 с.

76. Алгоритмы, математическое обеспечение и проектирование архитектур, многопроцессорных вычислительных систем / под ред. А.П. Ершова. -М: Наука, 1982.

77. Англо-русско-немецко-французский толковый словарь по вычислительной технике и обработке данных, 4132 термина / под. ред. А.А. Дородницына. М.: 1978. 416 с.

78. Барендрегт, X. Ламбда-исчисление. Его синтаксис и семантика. / X. Барендрегт, пер. с англ. М.: Мир, 1985. - 606 с.

79. Воеводин.ю Вл.В. Просто ли получить обещанный гигафлоп? / Вл.В. Воеводин // Программирование. 1995, № 4, - с. 13-23.

80. Воеводин, В.В. Математические модели и методы в параллельных процессах. / В.В. Воеводин — М.: Наука, Гл. ред. физ.-мат. лит., 1986. — 296 с.

81. Грицык, В.В. Распараллеливание алгоритмов обработки информации в системах реального времени. /В.В. Грицык, Киев, Наукова думка, 1981.-216 с.

82. Ильин, В.П. О стратегиях распараллеливания в математическом моделировании. / В.П. Ильин, // Программирование. 1999, № 1, - с. 41-46.

83. Ершов, А.П. Введение в теоретическое программирование (беседы о методе) / А. П. Ершов, М.: Наука. Главная редакция физико-математической литературы, 1977. — 288 с.

84. Ершов, А.П. Избранные труды. / А.П. Ершов, Новосибирск: ВО «Наука» Сибирская издательская фирма, - 1994 — 416 с.

85. Зыков, А.А. Основы теории графов / А.А. Зыков, М.: Наука, 1987. -384 с.

86. Свами, М., Графы, сети и алгоритмы / М. Свами, К. Тхуласираман, пер. с англ. М.: Мир, 1984. - 455 с.

87. Уолренд, Дж. Введение в теорию сетей массового обслуживания / Дж. Уолренд, пер с англ. - М.: Мир 1993. — 336 с.

88. Казаков, Ф.А. Параллельно-функциональный язык программирования. / А.И. Легалов, Ф.А. Казаков, Д.А. Кузьмин, в кн.: Нейроинформатика и нейрокомпьютеры. Тезисы докладов рабочего семинара. Красноярск, 1993. - 1 с.

89. Казаков, Ф.А. Семантическая модель функционального языка параллельного программирования. / А.И. Легалов, Ф.А. Казаков, Д.А. Кузьмин, в кн.: Проблемы техники и технологий XXI века. Материалы научной конференции. Красноярск, КГТУ, 1994, - с 85-88. - 4 с.

90. Казаков, Ф.А. Язык программирования параллельных процессов. / А.И. Легалов, Ф.А. Казаков, Д.А. Кузьмин, в кн. Нейроинформатика и ее приложения. Программа и тезисы докладов всероссийского рабочего семинара. Красноярск, 1994, - 1 с.

91. Казаков, Ф.А. Разработка функционально-параллельных программ. / А.И. Легалов, Ф.А. Казаков, Д.А. Кузьмин, в кн. Нейроинформатика и ее приложения. Программа и тезисы докладов всероссийского рабочего семинара. Красноярск, 1994, - 1 с.

92. Ф.А. Казаков, Функциональная модель потоковых вычислений. / А.И. Легалов, Ф.А. Казаков, Д.А. Кузьмин, в кн.: Проблемы информатизации города: Вторая научно-практическая конференция, сб. тезисов докл. Красноярск, 1995, 3 с.

93. Kazakov, F.A. Description of parallel-functional programming language. / A.I. Legalov, F.A. Kazakov, D.A. Kuzmin, Advances in Modeling & Analysis, A, AMSE Press, Vol.28, N3, 1995, - pp.1-17.

94. Казаков, Ф.А. Организация условных вычислений в потоковых моделях. / Ф.А. Казаков, в кн.: Проблемы информатизации региона: труды межрегиональной конференции. Красноярск, 1995. - с. 68-70.

95. Казаков, Ф.А. Потоковая модель параллельных вычислений. / А.И. Лега-лов, Ф.А. Казаков, Д.А. Кузьмин, Вестник Красноярского государственного технического университета. Сб. научных трудов. Вып. 6. Красноярск, 1996. с. 60-67.

96. Казаков, Ф.А. Параллельный язык управления потоков данных / А.И. Легалов, Ф.А. Казаков, Д.А. Кузьмин, Математическое обеспечение и архитектура ЭВМ: Сб. научных работ. Вып. 2. КГТУ, Красноярск, 1997. -с. 105-113.

97. Казаков, Ф.А. Модель вычислений функционального языка параллельного программирования. / А.И. Легалов, Ф.А. Казаков, 6-й Всероссийский семинар "Нейроинформатика и ее приложения". Тезисы докладов. Красноярск, 1998. 1 с.

98. Казаков, Ф.А. На пути к переносимым параллельным программам. / А.И. Легалов, Ф.А. Казаков, Д.А. Кузьмин, Д.В. Привалихин, // Открытые системы, № 5 (май) 2003. 7 с.