скачать УТВЕРЖДАЮ Проректор по учебной работе Ю.А. Самарский 8 декабря 2010 г. ПРОГРАММАпо дисциплине: ИНФОРМАТИКА И ПРИМЕНЕНИЕ КОМПЬЮТЕРОВ В НАУЧНЫХ ИССЛЕДОВАНИЯХ (Прикладное программное обеспечение). Продвинутый курс по направлению подготовки: 010900 «Прикладные математика и физика» факультет ФАЛТ кафедра ИНФОРМАТИКИ курс II семестр 4 лекции – 32 (час) Экзамен – нет семинарские занятия – нет Зачет – дифференцированный практические занятия – 32 (час) Самостоятельная работа – 64 часа Задания – 2 Контрольные работы – нет Курсовая работа – 1 ^ Программу составил профессор, д.ф.-м.н. А.Г. Тормасов Программа обсуждена на заседании кафедры информатики 5 декабря 2010 г. Заведующий кафедрой И.Б. Петров Компетенции обучающегося, формируемые в результате освоения дисциплины: а) общекультурные (ОК):
б) профессиональные (ПК), в том числе: общепрофессиональные:
в области научно-исследовательской и аналитической деятельности:
в области инновационной, конструкторско-технологической и производственно-технологической (в сфере высоких и наукоёмких технологий) деятельности:
в области проектной и организационно-управленческой деятельности:
В результате освоения дисциплины ИНФОРМАТИКА И ПРИМЕНЕНИЕ КОМПЬЮТЕРОВ В НАУЧНЫХ ИССЛЕДОВАНИЯХ (Прикладное программное обеспечение) обучающийся должен: знать:
уметь:
владеть:
^
^ Задачи по курсу 2 задания на семестр и курсовая работа. Задачи для первых двух заданий указаны ниже. Каждый студент должен сделать по одной задаче из каждого задания. Тема курсовой работы дается по усмотрению преподавателя (с учетом пожеланий студентов, которые могут предлагать свои темы), результат реализации должен включать взаимодействие с пользователем (пользовательский интерфейс в виде меню, желательно графического, хотя возможны и текстовые версии при условии использования ООП библиотек). Курсовая работа может выполняться коллективно (2–3 чел.), должна включать параллельное исполнение компонент (например, включать нити или несколько взаимодействующих процессов) и использовать примитивы синхронизации (обязательно). Размер курсовой – не менее 600 строк на С# или С++, написанных одним человеком. Также должны использоваться коллекции данных по выбору автора (АТД – ATL, STL и т.д.). Тема работы утверждается не позже чем в феврале. ^ Текст программы должен быть оформлен профессиональным образом. Отдельно должен быть предоставлен файл (файлы) с текстом решения задачи, тестом на нее (если нужен) и вставляемые файлы заголовков. То есть решение задачи состоит из не менее чем двух файлов (.h, .CPP), чаще три (включая тест). Запрещается вставка одного С/CPP файла в другой, поощряется использование make-файла или проектов (но не обязательно). Комментарии в тексте программы: обязаны присутствовать в файлах в начале, должны быть отдельно написаны к каждой функции и в коде по тексту (в среднем каждая третья строка должна содержать комментарий); текст должен выглядеть красиво (отступы и т.д. должны быть оформлены нормально, не должно использоваться более 132 символов в строке), программа не должна иметь неиспользуемых или ненужных кусков (закомментированных). Примером оформления являются samples, приложенные к соответствующим дистрибутивам компиляторов (примеры SDK Windows, Linux kernel sources и т.д.). Обязательно Необходимо проверять все параметры функций, используя assert() или аналоги. Необходимо проверять все коды возврата функций (особенно malloc и системных вызовов). Желательно составление для курсовой работы Software Development Plan (SDP) – по усмотрению преподавателя. Задание 1(срок сдачи 15–20 марта) Основная цель – правильное оформление текста задачи, проверка всех требуемых параметров и т.д. Реализовать только на языке Си (не С++/C#). Реализовать одну из структур данных, итератор по ней и тест (три файла: алгоритм, файл заголовков, тест). Тест должен демонстрировать работоспособность структуры. Помните, что требуемых структур может быть много (более одного экземпляра!): 1) односвязный список; 2) двусвязный список; 3) очередь; 4) очередь с приоритетами; 5) стек; 6) набор (set); 7) упорядоченный набор с введением функции отношения; 8) массив произвольного размера; 9) массив упорядоченный; 10) бинарное дерево; 11) сбалансированное дерево; 12) хэш-таблица с открытой адресацией (хэшировать текстовые строки произвольной длины); 13) хэш-таблица с цепочками (алгоритм из книги Д. Кнута «Искусство программирования. Сортировка и поиск», хэшировать бинарные данные произвольной длины типа BLOB – Binary Large Object); 14) битовый массив (то есть значения принимаются битами, а адресация – по номеру бита); 15) направленный граф (в виде квадратной таблицы отношений M(i,j) = 1, если есть путь из i в j узел). Задание 2(срок сдачи 5–10 апреля) Требования к оформлению – такие же. Программа должна быть выполнена на ^ и в обязательном порядке должна использовать чужие библиотеки абстрактных типов данных (например, Borland ClassLib, MS MFC/Atl/Stl, GNU libstdc++, STL и др.) – любую из них. Задачи должны быть выполнены на С++ или C# (для платформы Windows) с использованием более одной нити или процесса по выбору студента, согласованному с преподавателем. Для этого под Windows может быть использована библиотека функций Win32 API (или более высокоуровневые библиотеки). Под Unix: POSIX Threads. По желанию студента задача может быть дополнена графическим интерфейсом. Единицу исполнения (нить или процесс) ниже будем называть вычислителем. ^ Задачи этого раздела используют класс Tree для создания древесной структуры данных.
^ : дерево, каждый элемент которого хранит уникальный, случайно сгенерированный ключ; ключ, узел с которым требуется найти, количество используемых вычислителей. Цель: написать параллельную программу для поиска данного ключа. Программа должна создать заданное пользователем дерево, считать количество используемых вычислителей и ключ для поиска, найти элемент дерева, содержащий этот ключ, и вывести информацию об этом узле.
Исходные данные: дерево, каждый элемент которого хранит уникальный, случайно сгенерированный ключ, количество используемых вычислителей. Цель: написать параллельную программу для поиска максимального ключа. Программа должна создать заданное пользователем дерево, считать количество используемых вычислителей, найти элемент дерева, содержащий максимальный из ключей и вывести информацию об этом узле. Переменная, содержащая максимальный элемент, должна быть общей для всех вычислителей. Доступ к ней – синхронизован.
Исходные данные: дерево, каждый элемент которого хранит уникальный, случайно сгенерированный ключ, количество используемых вычислителей. Цель: написать параллельную программу для поиска суммы всех ключей дерева. Программа должна создать заданное пользователем дерево, считать количество используемых вычислителей, найти и вывести сумму всех ключей дерева. Переменная, содержащая сумму ключей, должна быть общей для всех вычислителей. Доступ к ней – синхронизован.
Исходные данные: дерево, количество используемых вычислителей. Цель: написать параллельную программу для поиска количества узлов в дереве. Программа должна создать заданное пользователем дерево, считать количество используемых вычислителей, найти и вывести количество всех узлов в дереве. Переменная, содержащая максимальный элемент, должна быть общей для всех вычислителей. Доступ к ней – синхронизован. ^ :
^ : пусть каждый узел дерева содержит дополнительную информацию – количество узлов под ним. К основной цели задачи добавляется равномерное распределение загрузки вычислителей: каждый должен получить поддерево (поддеревья) с примерно одинаковым количеством узлов (отличающимся не более чем на единицу). ^
Исходные данные: функция одной переменной, отрезок интегрирования, количество вычислителей. Цель: написать параллельную программу для вычисления интеграла от данной функции по данному отрезку. Программа должна считать функцию, отрезок интегрирования, количество вычислителей, посчитать интеграл в несколько вычислителей, вывести результат. ^ : использовать параллелизм по отрезку. Каждый вычислитель считает интеграл по своей части отрезка с помощью одного из стандартных методов (трапеции, Симпсона, Ньютона–Лейбница и т.д.). Результаты отдельных вычислителей суммируются. Численный метод выбирается преподавателем.
Исходные данные: функция одной переменной, отрезок интегрирования, количество вычислителей. Цель: написать параллельную программу для вычисления интеграла от данной функции по данному отрезку методом Монте-Карло. Программа должна считать функцию, отрезок интегрирования, количество вычислителей, посчитать интеграл в несколько вычислителей, вывести результат. ^ :
Исходные данные: функция одной переменной, отрезок интегрирования, количество вычислителей. Цель: написать параллельную программу для вычисления интеграла от данной функции по данному отрезку методом Монте-Карло. Программа должна считать функцию, отрезок интегрирования, количество вычислителей, посчитать интеграл в несколько вычислителей, вывести результат. Вариации:
Предполагаемый алгоритм распараллеливания: использовать параллелизм количеству измерений. Каждый вычислитель просто вычисляет свой интеграл.
^ : использовать параллелизм количеству измерений. В формуле метода Монте-Карло вычислители-рабочие считают значения функций (расчет может быть громоздким) и отсылают их вычислителю-мастеру, который производит суммирование и вычисление окончательного результата.
Исходные данные: две матрицы n×m и m×n, количество вычислителей. Цель: написать программу для перемножения матриц параллельно несколькими вычислителями. Программа должна считать m, n, две матрицы, количество вычислителей; распараллелить процесс их перемножения. ^ : поскольку каждый элемент матрицы-результата рассчитывается независимо от других, он может быть определен отдельным вычислителем. Вычислитель-мастер занимается распределением работы между остальными. Он хранит базу свободных вычислителей, куда синхронизованно заносятся не имеющие работы и откуда берутся рабочие для вычисления следующего элемента матрицы.
Исходные данные: матрица n×n, количество вычислителей. Цель: написать программу для расчета детерминанта матрицы параллельно несколькими вычислителями. Программа должна считать n, матрицу, количество вычислителей; распараллелить процесс вычисления детерминанта матрицы. ^ : предполагается вычислять определитель методом Гаусса – приведением к верхнетреугольной матрице и далее перемножением элементов диагонали. Надо придумать способ распределения подзадач по вычислителям, например, получив дерево вычислений, оно же дерево рекурсии. А примеры распараллеливания (раздачи элементов дерева вычислителям) описаны в задаче 1 раздела Задачи с использованием деревьев.
Исходные данные: невырожденная матрица n×m, столбец n×1, количество вычислителей. Цель: написать программу для расчета решения уравнения Ax = b параллельно несколькими вычислителями. Программа должна считать m, n, матрицу А, столбец b, количество вычислителей; распараллелить решение уравнения Ax = b методом Крамера. Предполагаемый алгоритм решения: методом Крамера каждый элемент столбца-результата вычисляется независимо от остальных. Поэтому его можно передать для расчета отдельному вычислителю.
Исходные данные: функция f(x) (правая часть), отрезок, на котором ищется решение, количество вычислителей. Цель: написать программу для расчета y решения уравнения y’ + y = f(x) параллельно несколькими вычислителями. Программа должна считать правую часть, отрезок интегрирования; распараллелить процесс решения дифференциального уравнения y’ + y = f(x) заданным методом вычислительной математики. Способ распараллеливания: стандартный, по отрезку. Отрезок делится на количество вычислителей, и каждому отдается своя часть. Используемый метод вычислительной математики выбирается преподавателем. Сортировка
Исходные данные: массив объектов, функция для их сравнения, количество вычислителей. Цель: написать программу для упорядочивания массива параллельно несколькими вычислителями. Предполагаемый алгоритм распараллеливания: при сортировке слиянием массив делится на две равных по размеру части, которые сортируются отдельно и сливаются в один. Таким образом, снова получаем дерево рекурсии. Примеры распараллеливания по дереву см. в задаче 1 раздела Задачи с использованием деревьев. ^
Исходные данные: нет. Цель: добиться с помощью средств синхронизации, чтобы несколько вычислителей выводили информацию на экран в строго определенном порядке. Программа должна создать 26 потоков, каждый из которых выводит свою букву алфавита в бесконечном цикле. Добиться, чтобы все буквы выводились в алфавитном порядке. ^
Исходные данные: файл, директория его будущего расположения, количество вычислителей. ^ : написать программу для копирования файла в другое место параллельно несколькими вычислителями. Предполагаемый алгоритм распараллеливания:
Исходные данные: директория для копирования, директория ее будущего расположения. Цель: написать программу для копирования директории вместе со всем ее содержимым в другое место параллельно несколькими вычислителями. ^ : снова для операции копирования можно составить дерево рекурсии => распараллеливание по дереву (задача 1 раздела Задачи с деревьями). МоделированиеВ данном разделе студентам предлагается смоделировать следующие ситуации:
Участвующие вычислители: футболисты. Общий ресурс: мяч. Ситуация: команда футболистов отрабатывает индивидуальные действия. Каждый играет за себя. Цель футболиста – завладеть мячом и забить гол. Таким образом, он может выполнять два действия:
После удара по воротам вратарь выбивает мяч в поле. Футболист забивает гол с определенной вероятностью. Команда играет определенное время, потом определяется победитель – по забитым мячам.
Участвующие вычислители: члены семьи. Общий ресурс: автомобиль. Ситуация: семья из 4-х (N) человек: отец, мать, сын и дочь, – имеет в распоряжении автомобиль. У каждого из них периодически появляется желание/необходимость использовать его. Пользование длится случайное время. По истечении определенного времени (известного заранее) бензин автомобиля заканчивается, и тот, кто в этот момент пользуется автомобилем, едет его заправлять. Кроме того, сын ответственен за мытье автомобиля. Также по истечению известного заранее времени автомобиль загрязняется. Если сын начинает пользоваться грязным автомобилем, он его моет перед этим. Итого, все члены семьи «умеют» ездить на автомобиле, заправлять его, ожидать его освобождения. Сын помимо прочего «умеет» мыть автомобиль.
^ : самолет. Общий ресурс: взлетно-посадочные полосы. Ситуация: в течение каждого часа в аэропорту появляется 5 самолетов, готовых к вылету, и 5 самолетов, готовых приземлиться (каждый из них в случайное время в пределах этого часа). Чтобы взлететь или приземлиться самолету, требуется 3 минуты. В аэропорте 2 взлетно-посадочные полосы.
^ : воробей. Общий ресурс: хлебные крошки. Ситуация: бабушка на скамейке периодически (пусть раз в Q минут) бросает воробьям по одной ровно N хлебных крошек. Когда бросают крошку хлеба, первый подлетевший к ней воробей хватает крошку, относит ее в сторону и съедает. За счет этого он пропускает «розыгрыш» следующей крошки. Первоначально у скамейки находится M воробьев. Каждую минуту к стае прилетает еще один воробей. Съев P крошек, воробей наедается и улетает. Чтобы количество воробьев не увеличивалось, должно выполняться соотношение Q = N/P. Итак, воробей может выполнять действия:
Участвующие вычислители: игрок. Общий ресурс: колода карт. Ситуация: N игроков тянут карты по одной из лежащей перед ними колоды. Необходимо обеспечить:
Можно ради интереса после раздачи посчитать количество очков в вытянутых ими картах и определить победителя. ^ Компьютерные классы для проведения лабораторных работ. Необходимое лабораторное оснащение Компьютеры, объединенные в локальную сеть с выходом в Интернет. ^ Ноутбуки и проекторы. Необходимое программное обеспечение Системы программирования на языках С++, Java, C#. ^ Доступ студентов в локальную сеть института и в Интернет. Учебно-методическое и информационное обеспечение дисциплины Основная литература
Дополнительная литература
Усл. печ. л 1,0. Тираж 135 экз.
|