Правительство Российской Федерации Санкт-Петербургский государственный университет Математико-механический факультет РАБОЧАЯ ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ Языки параллельного программирования Parallel Programming Languages Для направления 010300 «Фундаментальные информатика и информационные технологии» бакалавриат Язык обучения русский Трудоемкость ___4___ зачётных единицы Регистрационный номер рабочей программы: Код года Код факультета утверждения или иного структурного подразделения 2013 / Мат.-мех. факультет Санкт-Петербург - 2013 Порядковый номер или шифр / Раздел 1. Характеристики, структура и содержание учебных занятий 1.1. Цели и результаты учебных занятий: Формирование у слушателей общего представления о многообразии существующих языков параллельного программирования, возможностей их эффективного применения с точки зрения архитектуры вычислительной системы, области решаемых задач, инструментальных средств и используемых библиотек, а также методов и приемов разработки, отладки и тестирования программ в современных суперкомпьютерных системах, требующих применения концепции параллельного программирования как самостоятельной научной и инженерной дисциплины, диапазона и разнообразия ее типичных приложений. Формирование системного, аналитического и алгоритмического мышления и соответствующих навыков для работы в области параллельного программирования, необходимых для решения различных научных и практических задач, включая этапы постановки и решения задачи или проекта, отбора необходимых технических средств, а также формирование соответствующих компетенций, в том числе навыков работы в коллективе. Поставленные цели достигаются путём решения следующих задач курса: изучение основных структур данных, методов их размещения, способов передачи данных в различных парадигмах параллельных языков программирования, методов параллельной обработки данных, синхронизации потоков; развитие навыков самостоятельного решения практических задач. 1.2. Требования к подготовленности обучающегося к освоению содержания учебных занятий (пререквизиты) Для успешного освоения дисциплины студент должен иметь предварительную подготовку по основным дисциплинам - информатике и программированию, изучаемых на I и II курсах математико-механического факультета Университета. 1.3. Перечень формируемых компетенций (результаты обучения) КП-1.1-2.2. Иметь базовые знания по математическим основам информатики. Владеть математическими методами анализа и разработки алгоритмов, как с последовательной, так и параллельной структурой. Владеть современными методами анализа информационных систем и баз данных для разработки эффективных параллельных алгоритмов для них. Владеть современными методами разработки и эксплуатации информационных систем с учетом современных тенденций развития параллелизма. 1.4. Знания, умения, навыки, осваиваемые обучающимся: Знать содержание дисциплины "Языки параллельного программирования", в частности, иметь базовые представления об основных парадигмах параллельных языков программирования, технологиях параллельного программирования, а также некоторых специальных приемах и навыках в области современного параллельного программирования; иметь представление о возможностях применения знаний, излагаемых в разделах курса в различных прикладных областях. Уметь формализовать поставленные задачи и реализовывать сложные программные комплексы как с точки зрения грамотной профессиональной разработки различного рода проектов, так и с точки зрения управления психологическим климатом в процессе работы в коллективе разработчиков для достижения эффективного результата. 1.5. Перечень и объём активных и интерактивных форм учебных занятий: По данной дисциплине предполагается проведение теоретических и практических занятий, на которых студенты осваивают современные технологии разработки параллельных программных продуктов с применением основных типов параллельных языков программирования, основных методов распараллеливания, проектирования и анализа структур данных для параллельных программ, в том числе, используя современные инструментальные средства, самостоятельно решают поставленные преподавателем задачи практического и теоретического плана и проектированию структур данных для различных прикладных задач. Построение курса подразумевает постоянное акцентирование внимания студентов на профессиональном, этическом и социальном контексте формирования и использования изучаемых средств и методов системного программирования. Дисциплина “Языки параллельного программирования” является элективным курсом в подготовке профессионального математика-программиста и служит основой для изучения других специальных математических дисциплин отделения прикладной математики и информатики. Аудиторная учебная работа: лекции в объеме 10 часов и практические занятия 20 часов в 5-м учебном семестре. Предполагается, что самостоятельную работу в предлагаемом курсе студенты выполняют с использованием компьютера. 1.6. Организация учебных занятий 1.6.1. Трудоемкость, объемы учебной работы и наполняемость учебных групп обучающихся: Консультации практические занятия лабораторные работы контрольные работы коллоквиумы текущий контроль промежуточная аттестация под руководством преподавателя в присутствии преподавателя в т.ч. с использованием методических материалов текущий контроль промежуточная аттестация объём активных и интерактивных форм учебных занятий трудоёмкость 1 семинары Код модуля в составе дисциплины Самостоятельная работа Лекции Аудиторная учебная работа обучающихся 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Пятый семестр обучения 10 20 40 7 7 7 Итого 10 20 40 30 4 Всего 10 20 40 30 4 Б.3 30 4 1.6.2.Виды, формы и сроки текущего контроля успеваемости и промежуточной аттестации Промежуточная аттестация Код модуля в составе дисциплины Виды Сроки Б.3 зачет 17-21 недели 1.7. Структура и содержание учебных занятий Модуль 1. Языки параллельного программирования Лекция 1 (2 часа). Текущий контроль Формы текущего контроля Сроки Обзор параллельных языков программирования. История возникновения и развития. Классификация по парадигмам программирования (функциональные, императивные, объектноориентированные и пр.), по архитектуре используемой памяти (общей и распределенной). Лекция 2 (2 часа). Параллелизм на уровне команд, потоков, приложений. Анализ эффективности параллельных вычислений. Реализация в различных языках параллельного программирования. Этапы разработки параллельных приложений: декомпозиция, выявление информационных зависимостей между подзадачами, масштабирование подзадач и балансировка нагрузки для каждого процессора. Лекция 3 (2 часа). Создание потоков, ожидания завершения потоков. Пул потоков ThreadPool. Работа с потоками. Критическая секция. Конструкция Lock. Атомарные операторы. Класс Interlocked. Семафоры Semaphore и SemaphoreSlim. Классы Monitor и Mutex. Сообщения ManualResetEvent, AutoResetEvent. Классы SpinLock и SpinWait. Лекция 4 (2 часа). Асинхронные задачи, императивный параллелизм, декларативный параллелизм Работа с задачами. Вложенные задачи. Задачи-продолжения. Обработка исключений в задачах. Механизм отмены задач. Параллельные циклы Parallel.For, Parallel.ForEach. Дополнительные возможности циклов: досрочный выход из цикла, пакетная обработка диапазонов, реализация агрегированных вычислений. Лекция 5 (2 часа). Библиотеки параллельных языков программирования и инструментальные системы анализа. Анализ оптимальности. Вынужденный параллелизм. Распараллеливание рекурсивных алгоритмов. Организация планировщика: глобальная очередь задач, локальные очереди рабочих потоков. Организация работы с сетями в параллельном программировании. Практические занятия (20 часов). Простейшие способы распараллеливания. Сравнение с кодом последовательной программы. Знакомство с многопоточной обработкой. Работа с потоками. Применение средств синхронизации для организации взаимодействия потоков на примере простых программ с независимыми данными. Например, поиск простых чисел. Синхронизация доступа к одноэлементному буферу. Применение потокобезопасных структур данных в приложении. Синхронизация приоритетного доступа к многоэлементному буферу. Реализация параллельных вычислений с помощью задач. Применение шаблонов Paralle.For, Parallel.Invoke. Дополнительные возможности циклов: досрочный выход из цикла, пакетная обработка диапазонов, реализация агрегированных вычислений. Разделение данных при выполнении запросов: разделение по диапазону, блочное разделение, хеш-секционирование. Буферизация. Выполнение индивидуального задания. Раздел 2. Обеспечение учебной дисциплины 2.1. Методическое обеспечение учебной дисциплины 2.1.1. Методическое обеспечение аудиторной работы Для лекций и практических занятий — стандартное оборудование аудиторий. По желанию лектора для теоретической части (лекций) применяется проектор для демонстрации видео и аудио материалов и презентаций. Для практических занятий необходим компьютерный класс с лицензионным программным обеспечением, позволяющим выполнять задания соответственно темам курса, а также система MS Visual Studio 2008-2010. В методическое обеспечение аудиторной работы также включены методические рекомендации (материалы) преподавателю по организации практических занятий с использованием инструментального программного средства разработки программ MS Visual Studio 2008-2010. Методика проведения аудиторной работы практического занятия состоит из: проверки готовности студентов к предстоящей практической работе; выдачи студентам файлов с изложением теоретического и методического материала; просмотра выполняемых практических студентами работ и выдаче советов и рекомендаций по их совершенствованию; выдачи рекомендаций студентам по наиболее качественному исполнению отчетной документации с использованием общедоступных офисных сред и возможностей изучаемых систем. 2.1.2. Методическое обеспечение самостоятельной работы Методические указания студенту по подготовке к лабораторным работам: тщательно подготовиться к предстоящей работе. На основании полученного задания и методических материалов разработать алгоритм выполнения задания. Выполнить требуемое контрольное задание в соответствии с методическими материалами или творческое задание. Составить отчет выполненной работы на основании результатов нескольких практических работ. Перечень примерных контрольных вопросов и заданий для самостоятельной работы: Понятие концепции параллелизма. Классификация языков параллельного программирования в соответствии с парадигмой программирования. Этапы разработки параллельных программ и их особенности. Понятие балансировки нагрузки и масштабирования в параллельных программах. Понятие потока, нити. Создание потоков, ожидания завершения потоков. Пул потоков ThreadPool. Работа с потоками. Понятие критической секции, назначение ее, примеры использования. Понятие барьера. Способы организации барьерной синхронизации. Семафоры мьютексы. Semaphore и SemaphoreSlim. Mutex. Сообщения. Понятие асинхронности в параллельном программировании. Особенности параллельных циклов Parallel.For, Parallel.ForEach. Библиотеки функций параллельных языков программирования. Инструментальные системы анализа параллельных программ. Примеры. Способы оптимизации параллельных программ. Анализ оптимальности. Понятие вынужденного параллелизма. Распараллеливание рекурсивных алгоритмов. Организация глобальной очереди задач. Организация локальных очередей рабочих потоков. Понятия статической и автоматической сети. Работа с сетями в параллельном программировании. Организация векторных вычислений в параллельных языках программирования. 2.1.3. Методика проведения текущего контроля успеваемости, промежуточной аттестации и критерии оценивания На первом занятии преподаватель доводит до сведения студентов: график (сроки) текущего контроля их самостоятельной работы и критерии оценки знаний по всем формам контроля и учебным процедурам (устный опрос, контрольные тесты, проверка домашних заданий, рефераты, курсовые работы). Реализацию непрерывного контроля знаний согласно графику преподаватель осуществляет за счет часов, предусмотренных нормами времени на проверку рефератов, рецензирования контрольных работ (домашних заданий, тестов), проведение консультаций и пр. Преподаватель имеет право устанавливать количество модулей по дисциплине, количество контрольных точек в семестре по различным формам контроля. Но при этом необходимо обеспечить соответствие затрат учебного времени на проведение контроля знаний студентов установленным нормам затрат времени на этот вид работы в соответствии с учебным планом. Темы курсовых и реферативных работ учебным планом не предусмотрены, но могут быть предложены. Возможны курсовые работы по тематике параллелизма: эффективности выполнения тех или иных параллельных алгоритмов для конкретных задач, возможностей распараллеливания и т.п. в соответствии с исследовательскими направлениями кафедры параллельных алгоритмов. Возможны рефераты по углубленным вопросам тематики курса или сравнительному анализу каких-либо характеристик изучаемых языков, вычислительных систем, технологий их применения. 2.1.4. Методические материалы для проведения текущего контроля успеваемости и промежуточной аттестации Практические работы выполняются на всем протяжении изучения курса. Для выполнения практических работ преподавателем выдаются соответствующие методические материалы. Текущий контроль состоит в проверке качественного выполнения учебных и самостоятельных заданий. При проведении теоретических занятий производится выборочный устный опрос по ранее изученной тематике или заслушиваются сообщения по текущей тематике. Примерный перечень вопросов к зачету (экзамену) по всему курсу Обзор параллельных языков программирования. Классификация по парадигмам программирования, по архитектуре используемой памяти. Параллелизм на уровне команд, потоков, приложений. Создание потоков, ожидания завершения потоков. Работа с потоками. Критическая секция. Атомарные операторы. Семафоры. Классы Monitor и Mutex. Сообщения ManualResetEvent, AutoResetEvent. Классы SpinLock и SpinWait. Асинхронные задачи, императивный параллелизм, декларативный параллелизм. Задачи-продолжения. Обработка исключений в задачах. Механизм отмены задач. Параллельные циклы Parallel.For, Parallel.ForEach. Библиотеки параллельных языков программирования и инструментальные системы анализа. Организация планировщика. Организация работы с сетями в параллельном программировании. 2.2. Кадровое обеспечение 2.2.1. Требования к образованию и (или) квалификации штатных преподавателей и иных лиц, допущенных к преподаванию дисциплины К чтению лекций должны привлекаться преподаватели, имеющие ученую степень кандидата наук (в том числе степень PhD, прошедшую установленную процедуру признания и установления эквивалентности) и/или ученое звание доцента, а также опытные преподаватели без степени с достаточным стажем преподавания и соответствующей областью научных интересов. Преподаватели, привлекаемые к проведению практических занятий, должны иметь базовое образование и/или ученую степень, соответствующие профилю преподаваемой дисциплины. 2.2.2. Требования к обеспеченности учебно-вспомогательным и (или) иным персоналом Учебно-вспомогательный и инженерно-технический персонал должен иметь соответствующее высшее образование, и обладать навыками работы с операционными системами Windows, базами данных (в частности, СУБД Access), а также системой MS Visual Studio 2008-2010 и других системами, необходимыми для конкретных приложений (возможны варианты). 2.2.3. Методические материалы для оценки обучающимися содержания и качества учебного процесса. Специальных требований нет. 2.3. Материально-техническое обеспечение учебной дисциплины 2.3.1. Требования к аудиториям (помещениям, местам) для проведения занятий Стандартно оборудованные интерактивные лекционные аудитории с доской и видеопроектором, настенным экраном, возможно дополнительное оборудование. Для проведения практических занятий - выделение компьютерного класса, с необходимым программным обеспечением для проведения практических работ по темам курса. 2.3.2. Требования к аудиторному оборудованию, в том числе неспециализированному компьютерному оборудованию и программному обеспечению общего пользования Программное обеспечение общего пользования должно быть не ниже MS Office 2003, (в том числе включать MS Access). 2.3.3. Требования к специализированному оборудованию Рабочие места преподавателя и студентов должны быть оснащены оборудованием не ниже: Core 2 Duo-2GHz/ОЗУ-512 Мб / Video-32 Мб / HDD 80 Гб / DVD±RW / Network adapter – 10/100 Мбс / SVGA – 17”. 2.3.4. Требования к специализированному программному обеспечению При использовании электронных учебных пособий каждый обучающийся во время занятий и самостоятельной подготовки должен быть обеспечен рабочим местом в компьютерном классе с выходом в Интернет и корпоративную сеть факультета. Лаборатории (компьютерные классы) должны быть обеспечены необходимым комплектом лицензионного программного обеспечения — система MS Visual Studio 2008-2010 на операционной системе Windows. 2.3.5. Требования к перечню и объему расходных материалов: Фломастеры цветные, губки, бумага формата А4, канцелярские товары, картриджи принтеров, диски, флеш-накопители и др. в объёме, необходимом для организации и проведения занятий, по заявкам преподавателей, подаваемым в установленные сроки. 2.4. Информационное обеспечение 2.4.1. Список обязательной литературы 1. Воеводин В. В., Воеводин Вл. В. Параллельные вычисления. Изд-во: БХВ-Петербург, 2004. 2. Воеводин Вл.В., Жуматий С.А. Вычислительное дело и кластерные системы. М.: Издво МГУ, 2007. 3. Мейерс Г., Баджетт Т., Сандлер К. Искусство тестирования программ, М.: Диалектика. Вильямс, 2012. 4. Алексеев А. А. Основы параллельного программирования с использованием Visual Studio 2010, http://www.intuit.ru/department/se/baseppvs, 2010. 5. http://www.parallel.ru 2.4.2. Список дополнительной литературы 1. Барский А. Б. Архитектура параллельных http://www.intuit.ru/department/hardware/paralltech/ вычислительных систем, 2. Макконнелл С. Совершенный код. Code Complete. Практическое руководство по разработке программного обеспечения. Изд-во: Питер, 2007. 3. Гринфилд Дж., Шорт К., Кук С., Кент С. Фабрики разработки программ. Потоковая сборка типовых приложений, моделирование, структуры и инструменты. Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools. Изд-ва: Диалектика, Вильямс, 2007г., 592 с. 4. К. Туральчук. Параллельное программирование с помощью языка C#. http://www.intuit.ru/studies/courses/5938/1074/info Раздел 3. Процедура разработки и утверждение рабочей программы учебной дисциплины Фамилия, имя, отчество Учёная степень Учёное звание Должность Контактная информация (служебный адрес электронной почты, служебный телефон) Мирошниченко Ирина Дмитриевна Старший irina_mir_@mail.ru; 428-42-27 преподаватель кафедры параллельных алгоритмов В соответствии с порядком организации внутренней и внешней экспертизы образовательных программ, установленных приказом первого проректора по учебной работе от 18.02.2009 № 195/1, проведена двухуровневая экспертиза: первый уровень (оценка качества содержания программы и применяемых педагогических технологий) Наименование кафедры Дата заседания № протокола Кафедра параллельных 21.05.2013 г. Протокол № 77 алгоритмов второй уровень (соответствие целям подготовки и учебному плану образовательной программы) Экспертиза второго уровня Уполномоченный орган (должностное лицо) Учебно-методическая комиссия математикомеханического факультета Дата принятия решения № документа Иные документы об оценке качества рабочей программы учебной дисциплины Документ об оценке качества Дата документа № документа Экспертное заключение Утверждение рабочей программы учебной дисциплины Уполномоченный орган (должностное лицо) Дата принятия решения № документа Г.А.Леонов – декан мат.-мех.факультета Внесение изменений в рабочую программу учебной дисциплины Уполномоченный орган (должностное лицо) Дата принятия решения № документа