Научная статья на тему 'Программная система обучения параллельному программированию на базе языка «Кубик»'

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

CC BY
263
66
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ / ЯЗЫК / ОБУЧЕНИЕ / ВЫСОКОПРОИЗВОДИТЕЛЬНОЕ / ВЫЧИСЛЕНИЯ / PARALLEL / PROGRAMMING / LANGUAGE / LEARNING / HIGH-PRODUCTIVE / COMPUTING

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Боярских Алена Сергеевна

ФИТ НГУ совместно с институтами СО РАН создает систему обучения высокопроизводительному программированию, содержащую курсы, нацеленные на ознакомление с моделями параллелизма, которые встречаются в языках и системах программирования и рассматривают парадигмы параллельного программирования от уровня базовых средств управления взаимодействующими процессами до уровня разработки программ высокопроизводительных вычислений. На основе современных тенденций в мире компьютеров и программирования к суперкомпьютерам и распределенным информационным системам можно сделать вывод, что обучение параллельному программированию является актуальной задачей в области образовательной информатики. В статье описана проблема обучения параллельному программированию и более подробно рассмотрен выбор решения данной проблемы, который заключается в создании учебного языка обучения параллельному программированию, предоставляющего основные модели параллелизма, а также проектировании программно-методической системы для обучения данному языку, названному языком начального обучения параллельному программированию (ЯНОП).

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

COMPUTER SYSTEM FOR LEARNING PARALLEL PROGRAMMING BASED ON A PROGRAMMING LANGUAGE «KUBIK»

The Faculty of IT of the NSU with the Siberian department of the Russian Academy of Sciences creates a system for study of the high-productive programming. This system consists of courses for initial learning of the models of parallels found in programming languages and programming systems and is considered the paradigm of the parallel programming from initial level to level of the development programs for high-performance computing. On based modern trends to supercomputers and distributing informational systems at the computing world we can conclude that the learning of the parallel programming is a actual challenge of the educational informatics. There is considered the problems of the initial learning of parallel programming and in detail solutions which is a development of the program language for learning parallel programming supported the base models of parallelism and a engineering of the software and the methodical system for learning such language of initial learning of parallel programming named «Kubik» in this paper.

Текст научной работы на тему «Программная система обучения параллельному программированию на базе языка «Кубик»»

УДК 004.9

А. С. Боярских

Новосибирский государственный университет ул. Пирогова, 2, Новосибирск, 630090, Россия E-mail: [email protected]

ПРОГРАММНАЯ СИСТЕМА ОБУЧЕНИЯ ПАРАЛЛЕЛЬНОМУ ПРОГРАММИРОВАНИЮ НА БАЗЕ ЯЗЫКА «КУБИК»

ФИТ НГУ совместно с институтами СО РАН создает систему обучения высокопроизводительному программированию, содержащую курсы, нацеленные на ознакомление с моделями параллелизма, которые встречаются в языках и системах программирования и рассматривают парадигмы параллельного программирования от уровня базовых средств управления взаимодействующими процессами до уровня разработки программ высокопроизводительных вычислений. На основе современных тенденций в мире компьютеров и программирования к суперкомпьютерам и распределенным информационным системам можно сделать вывод, что обучение параллельному программированию является актуальной задачей в области образовательной информатики. В статье описана проблема обучения параллельному программированию и более подробно рассмотрен выбор решения данной проблемы, который заключается в создании учебного языка обучения параллельному программированию, предоставляющего основные модели параллелизма, а также проектировании программно-методической системы для обучения данному языку, названному языком начального обучения параллельному программированию (ЯНОП).

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

Введение

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

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

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

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

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

ISSN 1818-7900. Вестник НГУ. Серия: Информационные технологии. 2012. Том 10, выпуск 2 © А. С. Боярских, 2012

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

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

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

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

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

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

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

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

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

В данной работе описан разработанный язык начального обучения параллельному программированию (ЯНОП) «Кубик» и программное средство поддержки изучения основ параллелизма в программировании на данном языке.

При разработке учебных программных систем существенным является выбор языков первичного обучения алгоритмике и элементам программирования. Для такого выбора необходимо уточнить требования, которым должен удовлетворять учебный язык. Первое требование к учебному языку программирования - обеспечить возможность отражения в его синтаксисе прогресса в обучении, овладении терминологией и приобретении навыков программирования в разных парадигмах. Для этого ЯНОП описывается многовариантной грамматикой, представляющей эквиваленты изучаемых конструкций. Похожий подход реализован в языках Cobol и Робик.

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

При разработке ЯНОП рассмотрен ряд моделей параллелизма от уровня базовых средств управления взаимодействующими процессами до уровня разработки программ высокопроизводительных вычислений, предложенных в языках программирования Apl, Algol-68, Ada, Setl, Sisal, F# и др. Проанализированы требования к языковой и инструментальной поддержке процесса обучения параллельному программированию. Проект учебного языка параллельного программирования нацелен на ознакомление с основными моделями параллелизма, встречающимися в учебно-методических и научных материалах, языках высокого уровня,

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

Определены уровни и цели начального (полгода в 10-12 лет) и допроизводственного (2 года с/к для старшеклассников и студентов) обучения в контексте истории языков программирования (Basic, Pascal, Logo, Grow, Робик, Рапира). Проанализированы текущие задачи разработки учебных языков программирования, дополняющих основные парадигмы программирования на ЯВУ средствами параллельного программирования (GPU, MPI, OpenMP).

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

• Многовариантность лингвистической базы.

• Визуализация объектов и процессов при отладке.

• Концентричность или разложение понятий по уровням обучения.

• Представление и преобразование моделей управления процессами.

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

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

• Выводимость оценки значимых характеристик производительности программ, таких как объем вычислений, надежность, безопасность и др.

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

Ядро реализации ЯНОП составляют базовые средства уровня ОС: условия готовности и завершения процесса, очереди и серийная обработка, типичные для ОС UNIX и языка Java. Такие средства рассматриваются как основа для реализации схем управления, встречающихся в ЯВУ (критические участки и семафоры, рандеву, защищенные команды, конвейеры), навыки программирования и применения которых входят в задачу элементарно-учебного уровня.

Постановка задачи

Варианты реализации среды

начального обучения параллельному программированию

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

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

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

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

ректной последовательности событий. Важное направление анализа протоколов - проверка соответствия спецификации процесса протоколу.

Описание программной системы

начального обучения параллельному программированию

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

Модуль поддержки рабочей области Обучающей системы состоит из следующих частей:

1) интерпретатор;

2) визуализатор;

3) исполнительная система;

4) графический редактор программного текста.

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

Назначение визуализатора как части обучающей системы - сделать ход выполнения программы наглядным. Предлагается осуществить эту задачу через показ изменения состояния используемой ЯНОП-программой памяти. Программа, в ее понимании на начальном этапе обучения, - это инструкция, описывающая действия над входными данными, целью которой является получение определенных выходных результатов. Тогда программа - последовательность действий над памятью. И для того, чтобы продемонстрировать, как работает программа, надо показывать, как она на каждом своем шаге воздействует на состояние (значения) описанных в ней объектов памяти (переменных). Сделать это можно, поставив в соответствие каждой описанной в программе переменной некий образ (исполнитель), который реагирует на все действия программы над этой переменной: инициализацию, присвоение нового значения, создание / уничтожение (для динамической структуры), изменение видимости (локальность переменной). Следуя этому подходу, мы видим в каждый момент выполнения программы то, как вырабатывается результат - выходные данные.

Реализация описанного подхода визуализации на практике включает 2 этапа.

1. Подбор образов (исполнителей) для объектов памяти: констант, переменных, которые бы иллюстрировали тип, статичность / динамичность, видимость, инициализации.

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

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

• отображение значения в численном или символьном виде;

• всплывающие / исчезающие окна для динамически распределяемой памяти;

• «семафоры» для типа boolean;

• состояние исполнителей или пустые, или заполненные «ящики» - ячейки для отображения инициализации переменных.

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

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

• описание переменной, константы - для визуализации вновь описанного объекта;

• оператор присвоения - для визуализации изменения значения;

• вызов процедуры, функции - для визуализации изменения переменных.

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

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

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

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

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

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

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

Выполненная работа

Данная работа представляет актуальную проблему начального обучения параллельного программирования, для решения которой были описаны варианты решений, включающие разработку языка начального обучения программированию ЯНОП «Кубик», а также систему, обеспечивающую среду для обучения параллельному программированию на разработанном языке.

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

Входной язык программной системы является ЯНОП «Кубик», который имеет базисную русскую лексику языка программирования. Такой выбор был сделан на основе требований и обоснований.

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

На данный момент описанная программная система обучения претерпевает этап проектирования и разработки интерпретатора языка ЯНОП «Кубик».

Для начала разработки интерпретатора создан синтаксис языка ЯНОП «Кубик» и таблица идентификаторов.

При создании интерпретатора необходимо реализовать следующие его функции:

• чтение входной цепочки - инструкция для анализа интерпретатора на языке «Кубик»;

• лексический анализ - разбиение цепочки на лексемы и проверка на соответствие с таблицей идентификаторов;

• синтаксический анализ или разбор - проверка на ошибки синтаксиса языка программирования;

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

• проверка на завершение программы.

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

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

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

В последние годы созрело понимание целесообразности раннего обучения параллельному программированию [1; 2]. На новосибирских Летних школах юных программистов традиционно проводятся лекции, знакомящие школьников с проблемами параллелизма. При проведении экспериментов по моделированию параллельных процессов учащимися 6-х классов не было замечено затруднений в понимании задачи [3]. Концептуальный подход к обучению программированию позволяет быстро вникнуть в существо основных понятий. Акцент на приобретение практических навыков работы на весьма различных системах обеспечивал профилактику привыкания к первому языку, системе, машине, создавал предпосылки успешного самообучения и освоения новых средств.

В работах ИСИ СО РАН им. А. П. Ершова по исследованию и классификации компьютерных языков, нацеленных на реализацию идей А. П. Ершова и С. С. Лаврова о создании лексикона программирования, заметное место занимает исследование парадигм программирования и особо - парадигм параллельного программирования, обладающих большим разнообразием вычислительных моделей и подходов к аппаратной поддержке высокопроизводительных вычислений. Для систематичной подготовки специалистов (инженеров-проектировщиков и исследователей), способных использовать возможности параллельного программирования, необходима инструментально-языковая поддержка учебной практики, опережающей навыки последовательного программирования, преодоление которых чревато значительными трудозатратами. Пусть параллельное программирование станет столь же легким и приятным, как привычное для большинства императивное последовательное программирование [4].

Список литературы

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

2. Городняя Л. В. Парадигмы параллельного программирования в университетских образовательных программах и специализации // Материалы Всерос. науч. конф. «Научный сервис в сети Интернет: решение больших задач». Новороссийск; М., 2008. С. 180-184.

3. Марчук А. Г., Тихонова Т. И., Городняя Л. В. Новосибирская школа юных программистов // Материалы междунар. конф. «Развитие вычислительной техники в России и странах бывшего СССР: история и перспективы». Петрозаводск, 2006. Ч. 2. С. 117-124.

4. Городняя Л. В. Введение в параллелизм для школьников // Тр. Всерос. науч.-метод. конф. «Телематика-2011». СПб., 2011. Т. 2, секция Б «Технологии распределенных вычислений и компьютерного моделирования в образовании и науке». С. 323-324.

Материал поступил в редколлегию 15.03.2012

A S. Boyarskih

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

COMPUTER SYSTEM FOR LEARNING PARALLEL PROGRAMMING BASED ON A PROGRAMMING LANGUAGE «KUBIK»

The Faculty of IT of the NSU with the Siberian department of the Russian Academy of Sciences creates a system for study of the high-productive programming. This system consists of courses for initial learning of the models of parallels found in programming languages and programming systems and is considered the paradigm of the parallel programming from initial level to level of the development programs for high-performance computing. On based modern trends to supercomputers and distributing informational systems at the computing world we can conclude that the learning of the parallel programming is a actual challenge of the educational informatics. There is considered the problems of the initial learning of parallel programming and in detail solutions which is a development of the program language for learning parallel programming supported the base models of parallelism and a engineering of the software and the methodical system for learning such language of initial learning of parallel programming named «Kubik» in this paper.

Keywords: parallel, programming, language, learning, high-productive, computing.

i Надоели баннеры? Вы всегда можете отключить рекламу.