home Преподавание Информационных Технологий в России
Открытая всероссийская конференция

АПКИТ
Конференция

Информационное сообщение

Место проведения

Программа конференции

Участники

Фоторепортаж

Программный комитет

Программный комитет

Спонсоры
Информ. спонсоры
Орг. поддержка

ЛАНИТ-ТЕРКОМ

Нижегородский госуниверситет им. Н.И. Лобачевского

ОБ ОСОБЕННОСТЯХ ПРЕПОДАВАНИЯ МНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ ДЛЯ ШИРОКОГО КЛАССА ПОЛЬЗОВАТЕЛЕЙ

С.Е. Гвоздев1, Калинина Анна Павловна1, 2, 3 (apkalinina@mail.ru; kalinina@academ.org), Н.А. Калинина2
Новосибирский государственный архитектурно-строительный университет1
Институт теоретической и прикладной механики им. С.А. Христиановича СО РАН2
Новосибирский государственный университет3
Новосибирск

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

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

Данный спецкурс был прочитан два раза. Программа спецкурса сильно варьировалась от первого раза ко второму. Причиной этого был различный начальный уровень подготовки слушателей. Но изучаемые программные продукты и стандарты оставались одинаковыми (OpenMP C++, WinAPI, Intel Thread Checker, Intel Thread Profiler).

В первый раз половину слушателей составляли студенты 4-5-6 курсов с кафедр параллельного программирования, половину - совершенно незнакомые с теоретическими основами параллелизма студенты. Программа спецкурса была построена по принципу: сначала теория, затем практика. К сожалению, данный вариант оказался приемлем далеко не для всех - до практических занятий дошли только студенты с параллельных кафедр. Они же и дослушали данный спецкурс до конца.

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

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

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

Особенно хотелось бы отметить глубоко положительную роль отладчиков Thread Checker и Thread Profiler при демонстрации многопоточных ошибок и при количественном анализе ускорения многопоточной программы. Ошибки в задании области видимости переменных (чаще всего - вместо того, чтобы сделать переменную видимой только одному потоку, пользователей ее делает видимой всем потокам) можно очень быстро выявить с помощью Thread Checker - этот отладчик позволяет видеть строку кода и имя переменной, область видимости которой была задана программистом неверно. В то же время неопытный многопоточный программист часто недооценивает затрат операционной системы на создание потоков и координацию их действий и вводит параллелизм там, где он неэффективен. Возможности Thread Profiler позволяют количественно изучить "накладные расходы" на параллелизм и увидеть их долю с помощью наглядного графического представления.

Данная методика оказалась положительно воспринята слушателями спецкурса, что подтверждалось отзывами и посещаемостью. Она была также испытана при обучении студентов первого курса мехмата в рамках базового курса "Программирование", основу которого составляет обучение языку программирования C. Были разобраны простые примеры - параллельное умножение матриц и численное интегрирование.

Следует отметить, что, несмотря на более сложный синтаксис WinAPI по сравнению с OpenMP, эта технология оказалась более понятной студентам из-за того, что все действия с потоками прописываются явно, что способствовало лучшему пониманию.

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

 

В начало :: О конференции :: Программа :: Доклады :: Контакты

Техническая поддержка сайта:
Copyright © АП КИТ, 2005
hosted by TERCOM
webmasters: perez&helga