18
ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Новосибирский национальный исследовательский государственный университет" (Новосибирский государственный университет, НГУ) Факультет информационных технологий УТВЕРЖДАЮ _______________________ «_____»__________________2013_ г. Рабочая программа дисциплины Парадигмы программирования Направление подготовки 230100 «ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА» профиль подготовки Информационные технологии в приложениях Квалификация (степень) выпускника Бакалавр Форма обучения Очная Новосибирск 2013

ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

"Новосибирский национальный исследовательский государственный университет"

(Новосибирский государственный университет, НГУ)

Факультет информационных технологий

УТВЕРЖДАЮ

_______________________

«_____»__________________2013_ г.

Рабочая программа дисциплины

Парадигмы программирования

Направление подготовки

230100 «ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА»

профиль подготовки Информационные технологии в приложениях

Квалификация (степень) выпускника

Бакалавр

Форма обучения

Очная

Новосибирск 2013

Page 2: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

Аннотация рабочей программы

Дисциплина «Парадигмы программирования» направление подготовки 230100

«ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА» Дисциплина реализуется на

Факультете информационных технологий Национального исследовательского

университета Новосибирский государственный университет кафедрой Систем

информатики НИУ НГУ.

Содержание дисциплины охватывает круг вопросов, связанных с языками и

системами программирования, включая проблематику классификации и спецификации

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

вычислений.

Дисциплина нацелена на формирование общекультурных компетенций ОК-1, ОК-2,

ОК-3, ОК-6, ОК-7, профессиональных компетенций ПК-1, ПК-2, ПК-4, ПК-7, ПК-8

выпускника.

Преподавание дисциплины предусматривает следующие формы организации

учебного процесса: лекции, контрольная работа, компьютерный практикум,

самостоятельная работа студента.

Программой дисциплины предусмотрены следующие виды контроля: текущий

контроль успеваемости в форме контрольной работы, итоговый контроль в форме

экзамена.

Общая трудоемкость дисциплины составляет 3 зачетных единицы, 92

академических часа. Программой дисциплины предусмотрены 34 часа лекционных, 34

часа практики в компьютерном классе и 24 часа самостоятельной работы студентов.

Городняя Лидия Васильеван

________________________________________________

Разработка подготовлена в рамках реализации Программы развития НИУ НГУ на

2009–2018 г. г.

Page 3: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

3

1. Цели освоения дисциплины

Специальный курс «Парадигмы программирования» ориентирован на усвоение

студентами понятий, исторически накопленных в форме языков программирования и

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

Курс знакомит с разнообразием моделей вычислений, включая модели параллелизма, а

также с методами программирования параллельных процессов и проблемами

организации высокопроизводительных вычислений. Материал курс иллюстрируется на

языках C# и F# с использованием библиотек .Net.

Специальный курс имеет своей целью:

- ознакомление студентов с разнообразием моделей программирования и

параллелизма;

- ознакомление студентов с исторически сложившимся разнообразием парадигм

программирования, определивших развитие современных информационных

технологий;

- изучение практичных подходов к разработке и конструированию программ на базе

информационных и компьютерных технологий (ИКТ);

- подготовку к специализации в области разработки программ для

многопроцессорных систем.

Данный курс знакомит студентов с наиболее распространенными парадигмами

процедурного, объектно-ориентированного программирования и проектирования,

функционального и логического программирования с экскурсом в проблематику

параллельного программирования. Значительное внимание уделяется эффективной

практике моделирования основных реализационных средств работы с памятью,

структурирования данных, анализа и трансформации программ. Студенты знакомятся

с парадигмами низкоуровневого программирования и программирования на языках

сверх высокого уровня, направленными на параллельное программирование. Важным

шагом в обучении хорошего разработчика программного обеспечения является

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

различных классов программ в процессе полного жизненного цикла параллельных

программ.

Для достижения поставленных целей выделяются задачи курса:

- Обзор средств и методов программирования, поддержанных разными языками и

системами программирования.

- Демонстрация эволюции ключевых идей, обеспечивших поддержку полного

жизненного цикла программ, с проявлением взаимосвязей между понятиями

параллельного программирования в разных парадигмах.

- Анализ конкретных подходов к определению языков программирования с акцентом

на методы описания реализационной специфики систем параллельного

программирования.

- Сравнительный анализ наиболее известных парадигм программирования и

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

разного уровня.

Page 4: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

4

2. Место дисциплины в структуре ООП бакалавриата

Дисциплина «Парадигмы программирования» является частью профессионального

цикла ООП по направлению подготовки бакалавров 230100.62 «ИНФОРМАТИКА И

ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА»

Дисциплина «Парадигмы программирования» опирается на следующие дисциплины

данной ООП:

Математическая логика (формализация методов рассуждений, логические

связки, аксиоматические модели);

Теория алгоритмов (понятие временной сложности алгоритма);

Программирование (принципы проектирования языков программирования

высокого уровня, навыки реализации алгоритмов на ЯВУ, язык С, работа в

среде Microsoft Visual Studio, принципы ООП и язык С++));

Методы вычислений;

Результаты освоения дисциплины «Парадигмы программирования» используются в

следующих дисциплинах данной ООП:

Системное и прикладное ПО;

Высокопроизводительные системы;

Информационные распределенные системы.

3. Компетенции обучающегося, формируемые в результате освоения

дисциплины:

Общекультурные компетенции:

ОК-1 способен совершенствовать и развивать свой интеллектуальный и

общекультурный уровень;

ОК-2 способен к самостоятельному обучению новым методам исследования, к

изменению научного и научно-производственного профиля своей

профессиональной деятельности;

ОК-3 способен свободно пользоваться русским и иностранным языками, как

средством делового общения;

ОК-6 способен самостоятельно приобретать с помощью информационных

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

умения, в том числе в новых областях знаний, непосредственно не связанных со

сферой деятельности;

ОК-7 способен к профессиональной эксплуатации современного оборудования и

приборов (в соответствии с целями магистерской программы).

Кроме того, настоящая дисциплина позволяет частично формировать

следующие компетенции:

ОК-4 использует на практике умения и навыки в организации исследовательских

и проектных работ, в управлении коллективом;

Page 5: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

5

ОК-5 способен проявлять инициативу, в том числе в ситуациях риска, брать на

себя всю полноту ответственности.

Профессиональные компетенции:

ПК-1 применять перспективные методы исследования и решения

профессиональных задач на основе знания мировых тенденций развития

вычислительной техники и информационных технологий;

ПК-2 на основе знания педагогических приемов принимать непосредственное

участие в учебной работе кафедр и других учебных подразделений по профилю

направления "Информатика и вычислительная техника";

ПК-4 формировать технические задания и участвовать в разработке аппаратных

и/или программных средств вычислительной техники;

ПК-7 организовывать работу и руководить коллективами разработчиков

аппаратных и/или программных средств информационных и

автоматизированных систем.

В результате освоения дисциплины обучающийся должен:

знать:

основные понятия языков и систем программирования, подходы к их

классификации, спецификации и созданию;

примеры успешного применения различных парадигм программирования на

разных фазах жизненного цикла программ и при решении задач организации

высокопроизводительных вычислений;

иметь представление о разных уровнях парадигм программирования и

парадигмах параллельного программирования;

возможности и перспективы применения методов конструирования и

верификации в процессе разработки надежных и безопасных программ и

распределенных систем;

уметь:

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

для проектирования и реализации программ, распределенных информационных

систем и организации высокопроизводительных вычислений;

выбрать парадигму программирования в зависимости от уровня изученности

класса решаемых задач и модели жизненного цикла разрабатываемой

информационной системы;

владеть:

навыками постановки и решения задач с помощью разных средств,

встречающихся в проектировании, реализации и сопровождения программных

проектов для особо сложных задач.

Page 6: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

6

4. Структура и содержание дисциплины

Общая трудоемкость дисциплины составляет 3 зачетные единицы, 108 ак часов.

№ п/п Раздел дисциплины

Н

ед

ел

я

се

ме

ст

ра

вида уч занятий

Формы текущего контроля

успеваемости (по неделям семестра)

Форма

промежуточной

аттестации

(по семестрам)

Лек

ция

Лаб

ор.

рабо

та

Сам

ост.

рабо

та

Контр

.

работ

а

1. Введение. О классификации языков и

моделей программирования.

Термины и специальные понятия

Методы определения и спецификации

языков программирования

Структуры данных, используемые при

организации вычислений (очереди,

протоколы и др.).

1 1 4

2. Неимперативные вычисления 2 1 4

Преобразования программ и процессов

Семантика параллелизма

Абстрактные сети

3. Параллельное программирование 3 2 10

Временные отношения

Учебные и модельные языки

Функциональное программирование

параллельных вычислений

4. Верификация программ 4 1 4

Полный жизненный цикл программ (ЖЦП)

Функции высших порядков

Процессы в сетях

5. Взаимодействие процессов

Макрообработка данных

Управление процессами

6. Лабораторная 1. Программирование

макета, демонстрирующего проблемы

синхронизации процессов (дедлоки и их

исключение) на примере простой задачи

управления автоматами.

5 1 4 10

7. Векторная обработка 6 2 4

Распараллеливание

Многоуровневая память

Типы управления

8. Лабораторная 2. Разработка макетных

образцов отдельных фрагментов языков и

моделей программирования.

7 2 4 10

Модели параллелизма в языках

программирования

Языки параллельного программирования

Параллельное программирование на языка

F# с библиотеками .Net

9. Параллельное программирование на языке

C#

8-12 2 10

Параллельное программирование на языке

Haskell

2 10

Параллельное программирование на языке

Python

Page 7: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

7

10. Параллельное программирование на языке

Sisal

12-

15

2 6 10

Заключение. Разработка параллельных

программ и распределенных систем

Лабораторная 3. «Экспериментальные

макеты тренажеров для обучения

программированию.» или реферативный

обзор по тематике «Парадигмы

параллельного программирования».

ИТОГО 16 16 76 2 Экзамен

Курс знакомит студентов с разнообразием стилей и языков программирования. Выбор

изучаемых парадигм отражает эволюцию языков, используемых при решении задач

системной и прикладной информатики от низкоуровневого программирования на

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

программирования. Особое внимание уделено исторически значимым и

концептуальным языкам, в которых видна ключевая идея и практические следствия ее

реализации. Кроме того, курс знакомит с разнообразием моделей параллелизма, а

также с методами программирования параллельных процессов и проблемами

организации высокопроизводительных вычислений. Материал курс иллюстрируется на

языках C# и F# с использованием библиотек .Net.

Курс носит ознакомительный характер и представляет интерес как обзор основных

подходов к программированию. Проанализированы особенности языков

программирования разного уровня от ассемблера до языков параллельного

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

описанию реализационной семантики основных парадигм. Предложена схема

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

В качестве иллюстрации использованы фрагменты языков программирования разного

уровня, относящиеся к парадигмам машинно-ориентированного, системного,

императивного, функционального, логического, объектно-ориентированного и

высокопроизводительного программирования. В центре внимания – разнообразие

моделей параллельных вычислений, включая разные подходы и стили, представленные

в современных системах программирования параллельных вычислений, на фоне

изучения основных проблем организации параллельных процессов и постановки задач

для высокопроизводительных вычислений.

Парадигмы программирования различаются нишей в жизненном цикле программ,

приоритетами при оценке качества программ, выбором инструментов и методов

обработки данных. Значимость используемых при этом критериев по существу зависит

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

претерпевает изменения по мере развития сферы применения программы, роста

квалификацией пользователей, модернизации оборудования, информационных

технологий и техники программирования, что и приводит к появлению новых

парадигм.

Первые парадигмы автоматного и машинно-ориентированного императивного

программирования сформировались как кодирование готовых алгоритмов,

сложившихся и отлаженных в докомпьютерную эпоху. Системное и функциональное

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

отладки новых алгоритмов и приведения их в удобную для обычного,

непосредственного, программирования форму. Затем прищла пора языков

представления знаний и, соответственно, декларативного (логического)

Page 8: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

8

программирования рецептов решения новых задач, где факт существования решений

важнее их эффективной реализации. Профессионализация программирования

приводит к объектно-ориентированному программированию, поддерживающему

повторное использование запрограммированных готовых решений в разных системах.

На повестке дня – создание удобных языков параллельного программирования.

Новые возможности компьютерных сетей, суперкомпьютеров, общедоступных баз

данных, массовое распространение мобильных устройств – все это меняет сферу

применения информационных технологий и влечет кристаллизацию новых и более

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

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

семантических систем: обработки данных, их хранения и структурирования,

управления обработкой данных.

В курсе приведен аналитический обзор парадигм программирования, рассмотрены

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

реализации и класс решаемых на их основе задач. Отмечены ключевые моменты

развития парадигм программирования, анализируются закономерности освоения

новых методов обработки данных посредством реализации систем программирования

и других информационных систем. Определен ряд опорных языков для

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

конкретным парадигмам.

Изложение начинается с пояснений к терминологическим системам, сложившимся в

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

неимперативных моделей вычислений при организации параллельных процессов.

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

надежных программ на базе символьной обработки данных и программ,

использующих списки и множества в качестве универсальных структур данных.

Рассматриваются простейшие методы оптимизации и преобразования программ и

процессов, а также средства спецификации программ на базе формальных языков и

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

параллелизма, приспособленное для алгебраического подхода к описанию процессов.

При изложении материала естественно выделяются уровни определений и понятий,

соответствующие уровню языков и систем программирования. Изучается проблема

синхронизации и остановки и методы ее решения в разных моделях параллелизма,

реализованных в наиболее известных и интересных языках программирования,

давших исторически ценный опыт представления параллельных вычислений. В их

числе языки Microsoft .Net F# и C#, а также языки Haskell, Python и Sisal,

предлагающие интересные подходы к реализации ряда новых понятий и уточняющих

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

параллелизма.

Анализируются проблемы разработки, отладки, тестирования и верификации

параллельных программ, рассматриваются обычные пути их решения или смягчения

на протяжении полного жизненного программ от постановки задачи до создания

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

Тема 1. О классификации языков и моделей параллельного программирования.

Термины и специальные понятия.

Page 9: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

9

Начинается изложение с необходимых пояснений к терминам, т.к. исторически

сложилась весьма пёстрая речевая практика, дающая пищу техническим разночтениям

общеизвестных понятий (поток, процесс, действие, операция и т.д.). Рассматриваются

такие понятия как условие готовности и срабатывание, завершение и оттеснение,

время и длительность, пропускная способность и производительность, события и

исключения, одновременность, ускорение вычислений. Понятия «параллелизм» и

«параллельные алгоритмы» рассматриваются с точки зрения измеримости

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

C# и F# с библиотекой .Net. (установка интерпретатора и компилятора, прогон

программ, диагностика ошибок)

Тема 2. Методы определения и спецификации языков программирования

Рассматривается Венская методика определения языков программирования и техника

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

используемые при реализации программ и организации вычислений (очереди,

протоколы и др.). Символьные вычисления рассматриваются как важный этап

разработки эффективных и надежных программ и удобных языков программирования.

Тема 3. Неимперативные вычисления.

Небольшой обзор парадигм программирования, показывающий разнообразие подходов

к программированию вообще и к параллельному программированию в частности.

Особое внимание уделено неимперативным вычислениям, преимущественно

функциональному программированию, показавшему свои преимущества в

параллельном программировании. Парадигмы программирования анализируются в

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

Тема 4. Преобразования программ и процессов.

Краткий обзор средств и методов представления программ и процессов в форме

определения языков и изображения эквивалентных им сетевых граф-схем с целью

демонстрации возможностей декомпозиции параллельных программ и реорганизации

процессов их выполнения, включая распараллеливание.

Тема 5. Семантика параллелизма. Абстрактные сети

Ознакомление с аппаратом сетей, приспособленном к достаточно тонкой детализации

семантики параллелизма. Изучается алгебра процессов, иерархические сети, уровни

определений и конкретизация понятий. Рассматривается проблема синхронизации

независимых сетей. Представление сетевых и распределенных систем

рассматриваются как обоснование к выбору единого сетевого представления

семантики программ, процессов, языков и систем программирования.

Тема 6. Параллельное программирование. Временные отношения

Изучаются простейшие средства представления временных отношений между

процессами. Рассматриваются процессы уровня ОС, допускающие явное и неявное

задание времени и приоритетов. Время как ресурс. Распределение времени. В качестве

примеров используются автоматы Т.Хоара, при программировании которых

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

очередностью процессов и управления памятью.

Page 10: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

10

Тема 7. Учебные и модельные языки

Рассматриваются примеры языков, конструируемых специально в целях изучения

отдельных идей, стилей, техник программирования.

Тема 8. Функциональное программирование параллельных вычислений

Изучаются особенности функционального программирования, позволяющие

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

Тема 9. Верификация программ

Ознакомление с результатами исследований в области верификации и моделирования

программ, способными дать перспективу надежности параллельного

программирования через разработку верифицирующих компиляторов.

Тема 10. Полный жизненный цикл программ (ЖЦП)

Рассматривается схема ЖЦП и его конкретизация на случай разработки параллельных

программ.

Тема 11. Функции высших порядков

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

качестве конструкторов программ.

Тема 12. Макрообработка данных

Рассматривается макротехника на разных уровнях представления данных,

используемая с целью повышения точности их обработки, зашкаливающей за

типичные границы применимости более надежных средств.

Тема 13. Процессы в сетях

Объектно-ориентированный подход к программированию сделал популярным

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

сообщений. Рассматривается техника декомпозиции программ на такие компоненты и

доопределения программ обработчиками исключений. Используются в качестве

примеров задачи на клетчатой доске (взаимодействие процессов). Управление памятью

рассматривается как доминирующая линия в определении семантики программ

Тема 14. Взаимодействие процессов

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

срабатыванию. Пространства имен (барьеры) как инструмент синхронизации.

Завершение или готовность результата. Бесконечные и пошаговые процессы.

Совмещение и слияние процессов. Управление памятью и контроль типов данных при

разработке программ и компиляторов для языков программирования.

Тема 15. Управление процессами

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

разработке распределенных систем. Анализ «живучести». Ленивые и энергичные

вычисления. Синхросети и мониторы. Иллюстративные примеры (задачи о философах,

читателях-писателях и т.п.) Представление сетевых и распределенных систем

рассматриваются как основа для разработки сложных информационных систем и

языков программирования.

Page 11: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

11

Тема 16. Векторная обработка

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

параллелизм. Генерация параллельных итераций. Локальные обмены данными.

Неограниченное число процессоров над одноуровневой общей памятью. Оценка

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

системами типов, допускающими статический контроль. (Примеры программ:

сортировка, умножение матриц, факториал.)

Тема 17. Распараллеливание

Рассматривается зависимость ускорения вычислений от числа процессоров и объема

общей и распределенной памяти. Циклы и рекурсия. Однородное пространство

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

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

Тема 18. Многоуровневая память

Изучается влияние дисциплины работы с памятью на характеристики параллельных

процессов. Защищенная и размазанная память. Решения, принятые в разных языках

программирования, по работе с многоуровневой и разнородной памятью (доступ,

побочный эффект, дубли и копии). Обработка транзакций становится одной из

типовых семантик работы с памятью в языках программирования.

Тема 19. Типы управления

Рассматриваются средства и методы типизации управления процессами, удобными для

подготовки программ, ориентированных на исполнение с помощью Open MP или MPI.

Идеи языков программирования по сетевому представлению типов управления и

дисциплины работы с памятью. Компонентно-ориентированная разработка ПО может

следовать единому сетевому определению семантики языков программирования и

процесса разработки программ

Тема 20. Модели параллелизма в языках программирования

Рассматриваются модели параллелизма, встроенные в наиболее известные языки

программирования. Рассмотрены языки APL, Algol-68, Setl, Ada и др. Кроме того,

рассмотрены guarded-command Э.Дейкстры и модели взаимодействующих процессов

Т.Хоара и Р.Милнера, дающие теоретическую основу языковым и системным

исследованиям. Имеется и небольшой экскурс в отечественные разработки в области

языков параллельного программирования (БАРС, Поляр, Норма, mpC и др.).

Тема 21. Языки параллельного программирования

Параллельное программирование на языка F# с библиотеками .Net

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

функционального программирования F# с библиотеками .Net. На этом языке

рассматривается возможность реорганизация программ, что поддержано в языке

специальными средствами типа Quotation – доступ к внутреннему представлению

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

построение эффективных программ. Использование модифицируемой и защищенной

памяти. Прикладные аспекты работы с информацией, отражающей специфику области

приложения программ (measure)

Параллельное программирование на языке C#

C# дает возможность встраивать функциональные построения в контекст привычных

императивных программ. Рассматривается стыковка программ на новых языках с

Page 12: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

12

производственными системами, разрабатываемыми на базе библиотек .Net.

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

Вопросы защиты программ и данных. Управление дисциплиной доступа к памяти и

представление запросов к базам данных

Параллельное программирование на языке Haskell

Рассматривается строго функциональный подход к спецификации параллельных

программ и типов данных в языке с предпочтением так называемой «ленивой» схемы

вычислений. Сопоставление достоинств и недостатков ленивых и энергичных методов

вычислений. Концепция «монад» в строго функциональном языке программирования.

Особенности определения семантики языковых конструкций. Методика обеспечения

удобочитаемости программ и их отладки. Мемоизация как практичный инструмент

снижения сложности вычислений

Параллельное программирование на языке Python

Язык Python зарекомендовал себя как удобное средство разработки распределенных

систем и сетевого программирования. Рассматриваются особенности представления

программ на языке Python и реализованные в нем решения по организации процессов

в сетях и доступа к базам данных. История языка и особенности быстрой разработки

программ

Параллельное программирование на языке Sisal

Авторы строго типизированного функционального языка параллельного

программирования Sisal создали интересный прецедент по расширению и уточнению

системы понятий программирования для нужд представления и реализации

масштабируемых параллельных вычислений. Программа в этом языке строится из

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

преобразований, включая распараллеливание. В структуре цикла выделены позиции

для формирования пространства параллельных итераций, фильтрации или сборки

параллельно полученных результатов и обработки потоков данных при развитой

системе работы с векторами, включая методику распространения скалярных операций

на структуры данных. Рассматриваются примеры программ на языке Sisal

Тема 22. Разработка параллельных программ и распределенных систем

Проблемы разработки, отладки, тестирования и верификации параллельных программ

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

сосредоточена исследовательская активность современного языкотворчества и

системного программирования, поиск средств и методов интеграции удачного опыта

параллельного программирования и успешного обучения методам параллельных

вычислений. Акцент на анализ подходящих решений в области разработки

переносимых программ, средств визуализации процессов, типизации управления и

дисциплины доступа к памяти

Материал курса сопровождается лабораторными работами на базе

мультипарадигматических языков функционального программирования C# и F#.

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

5. Образовательные технологии

Основные виды работы – лекции и самостоятельные эксперименты студентов с

разными системами программирования.

Page 13: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

13

Дополнительно предполагаемая форма отчетности – выполнение упражнений и

решение задач с применением систем программирования, преимущественно на F# и

C#.

6. Учебно-методическое обеспечение самостоятельной работы студентов.

Оценочные средства для текущего контроля успеваемости, промежуточной

аттестации по итогам освоения дисциплины

6.1. Самостоятельная практическая работа сводится к программированию этюдов с

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

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

задач на параллельное программирование в форме трёх лабораторных работ:

Лабораторная 1. Программирование макета, демонстрирующего проблемы

синхронизации процессов (дедлоки и их исключение) на примере

простой задачи управления автоматами.

Лабораторная 2. Разработка макетных образцов отдельных фрагментов языков и

моделей вычислений и параллельного программирования.

Лабораторная 3. «Экспериментальные макеты тренажеров для обучения

программированию, включая параллельное.»

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

следующим заданиям:

Реализовать модель интерпретатора небольшого подъязыка.

Реализовать модель компилятора небольшого подъязыка.

Написать программу синтаксического анализа для фрагмента заданного языка

программирования.

Написать макет синтаксически управляемой кодогенерации программы.

Реализовать конструктор анализатора по формулам БНФ.

Реализовать генератор языка по формулам БНФ.

Написать конвертор с одного языка на другой, ему эквивалентный, по их

отображениям в общий абстрактный синтаксис.

Подготовить макет семантической системы работы со стековой памятью.

Реализовать процедуру отладки подсистем управления процессами в заданном

языке.

Запрограммировать один из известных алгоритмов обхода графа, нагруженный

некоторыми действиями.

6.2. Перечень примерных контрольных вопросов и заданий для самостоятельной

реферативной работы по тематике «Парадигмы программирования».

Провести сравнительный анализ работы с памятью в разных парадигмах

программирования, привести примеры на разных языках.

Описать специфику вычислений в языках императивного и функционального

программирования, поддерживающих распараллеливание программ или

подготовку асинхронных процессов.

Представить отличия императивной и функциональной модели параллельных

вычислений.

Page 14: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

14

Дать характеристику особенностей параллельного программирования в сравнении

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

Привести примеры преимуществ ООП в сравнении с другими основными

парадигмами при разработке эволюционирующих систем.

Показать особенности логического программирования, определяющие его

парадигматическую специфику, выделяющую из других парадигм.

6.3. Примерный перечень вопросов к экзамену по всему курсу.

1. Примеры различных стилей программирования

2. Методы определения языков программирования

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

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

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

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

7. Особенности параллельного программирования на языке Algol-68

8. Сетевое управление в языке БАРС

9. Особенности программирования на языке mpC

10. Верификация параллельных программ

11. Язык теоретико-множественного программирования SETL как пример языка

сверхвысокого уровня.

12. Программирование на языке APL

13. Компиляция программ как синтаксически управляемая обработка данных

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

информационных систем

16. Программирование на языке Sisal

17. Приведите примеры различных техник программирования

18. Венский метод определения языков программирования

19. Абстрактный синтаксис и абстрактная машина.

20. Универсальная функция языка и методы её представления.

21. Особенности программирования на ассемблере

22. Программирование над стеком в языке Forth

23. Макрообработка текстов в GPM

24. Язык управления процессами Bash

25. Общая характеристика императивного программирования

26. Общая характеристика функционального программирования

27. Общая характеристика логического программирования

28. Общая характеристика объектно-ориентированного программирования

29. Макрообработка текстов в TRAC

30. Компонентное программирование.

31. Примеры экзотических парадигм программирование.

32. Олимпиадное программирование.

33. Учебные языки программирования.

34. Языки поддержки процесса разработки программ.

35. Роль типизации данных в процессе компиляции программ.

36. Оптимизационное программирование.

37. Трансформационная семантика

38. Смешанные вычисления.

39. Символьные вычисления и преобразования программ.

40. Семантические системы определения языка программирования.

41. Унификация селекторов в определении языка программирования.

Page 15: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

15

7. Учебно-методическое и информационное обеспечение дисциплины

а) основная литература:

1. Воеводин В.В. "Вычислительная математика и структура алгоритмов" //М.

МГУ, серия Суперкомпьютерное образование, 2010, 168 с.

Гергель В.П. "Высокопроизводительные вычисления для многопроцессорных

многоядерных систем" //М. МГУ, серия Суперкомпьютерное образование, 2010, 544 с.

2. Нестеренко Ю.В., Гречников Е.А.,Поповян И.А. "Вычислительно сложные

задачи теории чисел. Учебное пособие" //М. МГУ,

серия Суперкомпьютерное образование, 2012, 312 с.

3. Линев А.В., Боголепов Д.К.,Бастраков С.И. "Технологии параллельного

программирования для процессоров новых архитектур" //М. МГУ,

серия Суперкомпьютерное образование, 2010, 160 с.

4. Корняков К.В., Кустикова В.Д.,Мееров И.Б. "Инструменты параллельного

программирования в системах с общей памятью //М. МГУ,

серия Суперкомпьютерное образование, 2010, 272 с.

5. Боресков А.В. "Параллельные вычисления на GPU. Архитектура и

программная модель CUDA: Учебное пособие" //М. МГУ,

серия Суперкомпьютерное образование, 2012, 336 с.

б) дополнительная литература:

1. Параллельное программирование с использованием технологии MPI -

http://www.intuit.ru/department/se/mpitech/

2. Барский А.Б. Параллельные информационные технологии - БИНОМ. Лаборатория

зА.С. Антоновнаний, Интернет-университет информационных технологий -

ИНТУИТ.ру, 2007

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

2002. – 608 с.

4. В.П.Гергель Теория и практика параллельных вычислений Интернет –Университет

Информационных Технологий, "Бином", Москва, 2007 г., 423 с

5. Гергель В.П. Введение в методы параллельного программирования

Интернет-университет информационных технологий - ИНТУИТ.ру, 2008

6. Городняя Л.В. Основы функционального программирования. – М.: Интернет-

Университет Информационных технологий. − http://www.intuit.ru, 2004. − 272 с.

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

8. Евстигнеев В.А. VLIW-машины: развитие архитектуры и принципов построения

программного обеспечения // Системная информатика. Вып 4. Методы

теоретического и системного программирования. − Новосибирск: Наука. Сиб. изд.

фирма, 1995. − с. 304-333.

9. Евстигнеев В.А., Городняя Л.В., Густокашина Ю.В. Язык функционального

программирования SISAL, // Интеллектуализация и качество программного

обеспечения. − Новосибирск, 1994. − с. 21-42.

10. Д.В. Иртегов Многопоточное программирование с использованием POSIX Threads

-http://www.intuit.ru/department/se/posixthreads/

Page 16: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

16

11. Котов В.Е. МАРС: архитектуры и языки для реализации параллелизма. //

Системная информатика. Вып 1. Проблемы современого программирования. −

Новосибирск: Наука. Сиб. отд-ние, 1991. − с.174-194.

12. Левин М.П. Параллельное программирование с использованием OpenMP

БИНОМ. Лаборатория знаний, Интернет-университет информационных

технологий - ИНТУИТ.ру, 2008

13. Лейнингем И. Освой самостоятельно Python. – М. Вильямс. − 444 с.

14. Ломазова И.А. Вложенные сети Петри. – М.: Научный мир. − 207 с.

15. Магариу Н.А. Язык программирования АПЛ. − М.: Радио и связь. − 96 с.

16. С. Немнюгин, О. Стесик Параллельное программирование для многопроцессорных

вычислительных систем - БХВ, Санкт-Петербург, 2002 г., 396 с

17. Непейвода Н.Н. Стили и методы программирования. – М.: Интернет-Университет

Информационных технологий. -: http://www.intuit.ru/department/se/progstyles/ , 2004

18. Пересмотренное сообщение об АЛГОЛЕ 68 / Под ред. А. П. Ершова. − М.: Мир,

1979

19. Сошников Д. В. Программирование на F#. – М.: ДМК Пресс, 2011. – 192 с.

20. http://www.intuit.ru/department/pl/funcprog/lit.html (примеры на F#)

21. Таненбаум Э., ван Стеен М. Распределенные системы. Принципы и парадигмы. −

СПб.: Питер, 2003. – 877 с.

22. Уоткинс Д., Хаммонд М., Эйбрамз Б. – Программирвоание на платформе

.Net. − М. Вильямс, 2003. − С. 367.

23. Хендерсон П. Функциональное программирование. Применение и

реализация. М.: Мир, 1983. – 349 с.

24. Хоар Ч. Взаимодействующие последовательные процессы. – М.: Мир, 1989 – 264

с.

25. C# Language Specification Version 3.0

26. Пол Хьюдак, Джон Петерсон, Yale University, Джозеф Фасел Мягкое

введение в Haskell - RSDN-magazine, № 4,5 – 2006

27. Robin Milner, Communication and Concurrency, Prentice Hall, International Series in

Computer Science, ISBN 0-131-15007-3. 1989

28. Стивен Р. Палмер, Джон М.Фелсинг. Практическое руководство по функционально-

ориентированной разработке ПО. − М.: Вильямс, 2002. − 299 с.

29. Б. Страуструп. Язык программирования С++. Третье издание. – М.: ДМК Пресс,

1999.

30. Городняя Л.В. Парадигмы программирования. – М.: Интернет-Университет

Информационных технологий. -: http://www.intuit.ru, 2007

31. Б. Страуструп. Дизайн и эволюция С++. – СПб.: Питер, 2006.

32. Н. Джосьютис. C++ Стандартная библиотека. Для профессионалов. – СПб.: Питер,

2004.

33. Буч Г. Объектно-ориентированный анализ и проектирование с примерами

приложений на C++. Второе издание. – М.: Бином, 1999.

34. Гарсиа-Молина Г., Ульман Дж.Д., Уидом Д. Системы баз данных. Полный курс. –

М.: Издательский дом “Вильямс”, 2003.

35. Институт космических и информационных технологий. Кафедра

высокопроизводительных вычислений, Красноярск. – http://ikit.sfu-kras.ru/kaf_vpv/

36. INTUIT.ru: Учебная программа: Основы параллельных вычислений. –

www.intuit.ru/speciality/intuitdpo/inparalprog/

37. Методы параллельных вычислений кафедре Математического обеспечения и

применения ЭВМ факультета Компьютерных технологий и информатики

СПбГЭТУ. – http://window.edu.ru/resource/750/23750/

Page 17: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

17

38. Магистерская программа "Технологии параллельного программирования и

высокопроизводительные вычисления" кафедры математического обеспечения

ЭВМ факультета вычислительной математики и кибернетики Нижегородского

госуниверситета http://master.cmc.msu.ru/?q=node/136/

39. Программа "Многопроцессорные вычислительные системы и параллельное

программирование". – www.software.unn.ac.ru/ccam/files/HTML.../introduction.html/

40. Учебная программа: Суперкомпьютерные технологии и высокопроизводительные

вычисления (ИДО "ИНТУИТ"). – http://hpc-education.tsu.ru/news/detail/1796/

41. Суперкомпьютерное образование в мире. //Москва. Суперкомпьютерный

консорциум университетов в России. – http://hpc-

education.ru/files/HPC_almanac/HPC_almanac_2012.pdf/

42. Программа «Университетский кластер». –

http://evm.vstu.ru/files/CatalogUnicluster.pdf/

43. Программа_курса_MPI-OpenMP.pdf/. – http://hpc.mipt.ru/wp-content/uploads/2012/05/

44. Корнеев В.В. Параллельные вычислительные системы. – М.: Нолидж, 1999. – 320 с.

45. Системы параллельной обработки // Сб. трудов под редакцией Д. Ивенса,

М.,"Мир",1985. – 415 с.

46. Высокоскоростные вычисления // Сб. трудов под редакцией Я. Ковалика, М.,"Радио

и связь",1988. – 432 с.

47. Пентковский В.М. Автокод Эльбрус. − М.: Наука, 1982. − 350 с.

48. TOP500 Supercomputer Sites – мировой рейтинг пятисот самых мощных

компьютеров мира // Информационный ресурс в сети Интернет,

http://www.top500.org/

49. Братцев С.Г., Мурзин Ф.А., Нартов Б.К. Пунтус А.А. Конфликт сложных систем.

Модели и управление. – Изд. Моск. авиац. ин-та, 1995. – 118 с.

50. Курс: "Массивно-параллельные процессы, архитектура и среда программирования

CUDA" Научно-Образовательный Центр "Параллельные Вычисления", Дубна,

Моск. обл. – http://parallel-compute.ru/education/course-parallel/ 51. Берилло А. NVIDIA CUDA — неграфические вычисления на графических

процессорах ([email protected]). – 23.09.2008. http://www.ixbt.com/video3/cuda-1.shtml

52. Чеканов Д. nVidia CUDA: вычисления на видеокарте или смерть CPU? –

22.06.2008. http://www.thg.ru/graphic/nvidia_cuda/index.html

53. Garland M., Le Grand S., Nickolls J. et al. Parallel Computing Experiences with CUDA

// IEEE Micro, Vol. 28, №. 4. 2008. – P. 13-27.

в) программное обеспечение и Интернет-ресурсы:

http://www.hpcu.ru/ - Интернет-Университет Суперкомпьютерных Технологий

http://setl.org/setl/ About GNU SETL http://haskell.org/aboutHaskell.html - Материалы по языку Haskell

Непейвода Н.Н. Стили и методы программирования. – М.: Интернет-Университет

Информационных технологий. -: http://www.intuit.ru, 2004 http://www.gnu.org – добровольческое движение по разработке

свободно распространяемого программного обеспечения

http://www.cons.org/cmucl/ - Сайт с материалами по особо

эффективной реализации Lisp-а - CMUCL

http://www.smalltalk.ru – сайт с материалами по языку SmallTalk

http://www.parallel.ru - сайт Вл.В Воеводина по

суперкомпьютерам и параллельным вычисления

http://refal.org/rf5_frm.htm – Материалы по языку Рефал.

Page 18: ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ МИНИСТЕРСТВО …fit.nsu.ru/data_/docs/bak/program/PProg.pdf · 5 ОК-5 способен проявлять инициативу,

18

8. Материально-техническое обеспечение дисциплины

Ноутбук, медиа-проектор, экран.

Программное обеспечение для демонстрации слайд-презентаций.

Программа составлена в соответствии с требованиями ФГОС ВПО с учетом

рекомендаций и ПрООП ВПО по направлению 230100 «Информатика и

вычислительная техника»

Рецензент (ы)

Программа одобрена на заседании (Наименование уполномоченного органа вуза (УМК, НМС, Ученый совет) от ___________ года, протокол № ___