Диалоговая отладка параллельных программ: распределенная схема взаимодействующих компонентов
Разработка схемы распределенных взаимодействующих компонентов программного комплекса для создания инструментов отладки и исследования параллельных программ в диалоговом режиме. Диалоговый отладчик для непроцедурного языка для с поддержки внешних модулей.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | автореферат |
Язык | русский |
Дата добавления | 28.10.2018 |
Размер файла | 97,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Автореферат
диссертации на соискание ученой степени
кандидата физико-математических наук
Диалоговая отладка параллельных программ: распределенная схема взаимодействующих компонентов
Специальность 05.13.11 - математическое и программное обеспечение вычислительных машин, комплексов и компьютерных сетей
Бугеря Александр Борисович
Москва - 2008 год
Работа выполнена в Институте прикладной математики им. М.В. Келдыша РАН.
Научный руководитель: доктор физико-математических наук Андрианов Александр Николаевич
Официальные оппоненты: доктор физико-математических наук Якобовский Михаил Владимирович,
кандидат физико-математических наук Косачев Александр Сергеевич
Ведущая организация: Научно-исследовательский вычислительный центр МГУ имени М.В. Ломоносова
Общая характеристика работы
Объект исследования и актуальность темы
В последнее время в сфере инженерных и научно-технических расчетов, задач математического моделирования, задач реального времени наметилась тенденция в сторону отказа от последовательных решений для однопроцессорных компьютеров. Практически все современные создаваемые прикладные пакеты в указанных выше областях ориентированы на параллельную или распределённую вычислительную среду. Это связано в первую очередь со всё возрастающими требованиями к достоверности получаемых результатов и точности вычислений, а отсюда - многократно возрастающие объёмы обрабатываемых данных. Кроме этого появляются новые методы и алгоритмы решения задач, реализация которых на однопроцессорных системах была бы просто невозможной из-за повышенных требований к производительности вычислительной системы. Повсеместная распространенность различных видов параллельных систем также играет свою положительную роль в этом процессе.
Одновременно с возрастанием потребности в параллельных программах и с распространением многопроцессорных, многоядерных и кластерных технологий разработка параллельных программ становится все более актуальной, поскольку пользователи программ хотят максимально полно использовать возможности имеющейся у них современной вычислительной аппаратуры. Высокая сложность разработки параллельных программ, часто не позволяющая эффективно использовать возможности высокопроизводительных компьютеров, является общепризнанным фактом. В настоящее время ведутся интенсивные исследования в области автоматизации разработки параллельных программ, в частности, в области создания инструментов для отладки и исследования параллельных программ. Цели применения этих инструментов могут быть самыми различными. Это, в первую очередь, поиск ошибок в программе, в том числе и таких специфических для параллельных программ, как ошибки обращения к процедурам, обеспечивающим параллелизм, ошибки при передаче сообщений, ошибки синхронизации, ошибки доступа к общим ресурсам и т.д. Но и затем, после того как программа начала работать, и работать правильно, отладка программы обычно не заканчивается. Сразу возникает вопрос: а насколько эффективно она работает? Равномерно ли распределена вычислительная нагрузка между компонентами параллельной программы? Для того, чтобы ответить на эти и другие подобные вопросы, применяют специальные инструменты исследования параллельных программ.
Параллельные алгоритмы и программы, как правило, существенно сложнее последовательных. Параллельные программы и отлаживать сложнее, так как в них возникают ошибки новых типов, отсутствующие в последовательных программах, вызываемые некорректной синхронизацией процессов или нитей и некорректным использованием средств, обеспечивающих параллелизм.
Существенно усложняет отладку параллельных программ их недетерминированное поведение, поскольку оно затрудняет использование привычного приема постепенной локализации ошибок посредством многократных запусков программы под управлением отладчика.
Сложность создания качественных средств отладки и исследования параллельных программ является, с одной стороны, следствием специфичных проблем разработки параллельных программ, а, с другой стороны, разрабатываемый отладчик параллельных программ представляет собой также параллельную программу, которая должна взаимодействовать с отлаживаемой, также параллельной, что еще больше усложняет проблему.
При диалоговой отладке и исследовании параллельных программ особенно актуальна проблема визуализации получаемых результатов. В отличие от простой последовательной программы, где имеется одна текущая точка выполнения программы, а у переменной - одно значение, в параллельной программе точек выполнения может быть много, сотни или даже тысячи. Значений у одной и той же программной переменной также может быть много - у каждого процесса своё. Перед создателями средств отладки и исследования параллельных программ встаёт нелегкая задача представить всю имеющуюся информацию и предоставить средства управления процессом отладки: с одной стороны - в удобном, понятном для пользователя виде, а с другой стороны - дать пользователю исчерпывающую, полную картину поведения исследуемой программы. Как сделать это отображение удобным и компактным, и как в то же время позволить пользователю при желании получить доступ ко всем интересующим его подробностям - вот эту задачу и должен решать качественный инструмент отладки и исследования параллельных программ.
Еще одним характерным отличием процесса отладки и исследования параллельной программы от аналогичных действий с последовательной программой является то, что в типичном случае параллельная программа выполняется на удаленном вычислительном комплексе. Программа выполняется на вычислительных узлах комплекса, к которым пользователь доступа обычно не имеет. Поэтому влиять на ход выполнения отдельных процессов своей программы пользователь уже не может, в отличие от отладки последовательной программы, выполняемой в типичном случае на компьютере, непосредственно за которым сидит пользователь. Также из-за того, что исследуемая параллельная программа выполняется на удаленном комплексе, возникает проблема передачи собранной информации о программе на компьютер пользователя - в некоторых случаях объем этой информации может быть достаточно большим.
Цели и задачи работы
Разработать схему распределенных взаимодействующих компонентов программного комплекса для создания инструментов отладки и исследования параллельных программ в диалоговом режиме.
В соответствии с разработанной схемой создать программный комплекс для реализации инструментов отладки и исследования параллельных программ в диалоговом режиме.
На основе созданного программного комплекса были поставлены задачи разработать:
Диалоговый отладчик программ, написанных на декларативном непроцедурном языке НОРМА, с поддержкой отладки внешних модулей, написанных на Фортране MPI.
Диалоговый отладчик программ, написанных на Фортране MPI.
Диалоговый интерфейс для системы исследования MPI-программ.
Научная новизна работы
Предложена универсальная распределенная схема взаимодействующих компонентов и реализован на её основе легко модифицируемый и расширяемый программный комплекс для отладки и исследования параллельных программ.
Разработан диалоговый отладчик для непроцедурного языка (на примере языка НОРМА).
Практическая значимость
Диалоговый отладчик программ, написанных на языке НОРМА, с поддержкой отладки внешних модулей, написанных на Фортране MPI и отладчик программ, написанных на Фортране MPI, могут быть использованы для отладки прикладных программ на соответствующих языках. Отладчики были апробированы на ряде вычислительных систем: кластерах МВС-15000ВМ, МВС-6000IM Межведомственного суперкомпьютерного центра РАН и находятся в опытной эксплуатации на кластере FIRE Института прикладной математики им. М.В. Келдыша РАН. Отладчики доступны для использования всем желающим в составе системы НОРМА.
Диалоговый интерфейс для системы исследования MPI-программ может быть использован для исследования и отладки MPI-программ в DVM-системе.
Реализованный распределённый программный комплекс легко может быть усовершенствован и расширен реализацией новых инструментов для решения задач отладки и исследования удаленно выполняющихся параллельных программ, ориентированных на диалоговый режим работы с пользователем.
Апробация работы и публикации
Основные результаты диссертации были доложены на российских и международных научных конференциях и опубликованы в трудах этих конференций [1, 2, 3, 4, 5, 6]. Имеется одна публикация [7] в журнале из перечня ВАК.
Структура и объем работы
Диссертация состоит из введения, пяти глав, заключения и списка литературы (27 наименований). Общий объем работы составляет 79 страниц, работа содержит 9 иллюстраций.
Содержание работы
Введение
Во введении обосновывается актуальность темы исследования, формулируются цели и задачи диссертации. Обсуждается новизна работы и её практическая значимость. Перечисляются выступления на конференциях и семинарах, кратко излагается содержание работы.
Глава 1. Известные подходы к отладке и исследованию параллельных программ
В первой главе приводится обзор и анализ существующих подходов к отладке и исследованию параллельных программ. Особое внимание уделяется вопросу отладки научно-технических приложений, требующих высокопроизводительных вычислений.
Известные подходы к отладке и исследованию параллельных программ можно разделить на три основных направления: автоматический контроль корректности выполнения программы, сравнительная отладка (сравнение выполнения программы при ее различных запусках) и диалоговая отладка. Автоматический контроль корректности и сравнительная отладка могут осуществляться либо посредством анализа трасс, собранных при выполнении параллельной программы, либо без использования трасс - динамически в процессе реального времени выполнения параллельной программы. Диалоговая отладка обычно осуществляется в процессе реального выполнения параллельной программы посредством задания точек останова, пошагового выполнения программы и инспектирования значений указанных переменных.
Традиционные подходы к отладке и исследованию параллельных программ.
Отладочные печати
Простейшим (не для достижения цели, а в том смысле, что не требуется никаких дополнительных средств и инструментов) способом отладки программ является добавление в программный код дополнительных операторов печати или операторов вывода в файл. Эти печати обычно содержат информацию, на основе которой пользователь определяет, из какого места его программы была произведена печать, и, возможно, значения каких-либо переменных в этих точках. Таким образом можно отследить по каким ветвям происходило выполнение программы и с какими данными. На основе этой информации пользователь может отследить оператор или группу операторов, приводящих программу к некорректному состоянию.
Диалоговая отладка
При диалоговой отладке используется специально созданный для этого инструмент - отладчик. При разработке диалогового отладчика особое внимание уделяют его интерфейсу - пользователь должен чувствовать себя комфортно и удобно при работе в среде отладчика. Все функции отладчика и методы их использования должны быть интуитивно понятны и по возможности соответствовать аналогичным функциям традиционного отладчика последовательных программ.
При диалоговой отладке с помощью предоставленных отладчиком средств и инструментов пользователь определяет в программе одну или несколько контролируемых точек. Такими точками могут выступать точки останова (breakpoints) или точки наблюдения (watchpoints). Пользователь даёт команду на начало или продолжение выполнения программы, и выполнение программы прерывается в первой достигнутой точке контроля. Возможен и широко используется также и пошаговый режим выполнения программы.
Далее, пользователь анализирует состояние программы на момент останова. В этот момент он может проинспектировать значения переменных, посмотреть стек и параметры вызовов подпрограмм и воспользоваться всеми прочими средствами и инструментами, которые предоставляет ему конкретный отладчик. Если состояние программы корректно, пользователь продолжает её выполнение до следующей точки контроля, при этом имеется возможность оперативно скорректировать дальнейший ход отладки (поставить дополнительные точки останова, просмотреть значения еще каких-либо переменных и т.п.). Либо, если состояние программы уже некорректно, пользователь определяет дополнительные контролируемые точки и производит перезапуск программы с целью отследить оператор или группу операторов, приводящих программу к некорректному состоянию.
Автоматизированные подходы к отладке и исследованию параллельных программ.
Автоматический контроль корректности
Автоматический контроль корректности программы - проверка в процессе её выполнения дополнительных условий корректности. Эта проверка может производиться как по предварительно полученной трассе выполнения программы, так и в процессе реального времени выполнения программы. Условиями корректности параллельных программ являются корректность обращений к библиотекам, обеспечивающим параллелизм и обмен сообщениями, корректная синхронизация процессов и нитей при использовании общих данных и прочее. Преимуществами автоматического контроля корректности по сравнению с традиционными методами отладки является его полная автоматизация, качество отладочных диагностик и возможность обнаружения широкого спектра ошибок. Однако отсутствие диагностик об ошибках при анализе корректности программы не гарантирует правильности её работы, поскольку ограниченность ресурсов может не позволять производить все желаемые проверки.
Сравнительная отладка
В тех случаях, когда у пользователя есть две версии программы, одна из которых работает верно (эталонная), а другая - нет (отлаживаемая), работающую версию можно принять как формальную спецификацию неработающей. Идея сравнительной отладки как раз и заключается в сравнении работы двух версий одной и той же программы, и при этом сравниваются значения переменных в определенных контролируемых точках выполнения программ. Данные для сравнения можно брать как динамически из выполняющихся программ, так и из трасс, полученных при их выполнении.
При отладке параллельных программ в качестве эталонной обычно используют последовательную программу, которую часто можно отладить стандартными средствами, однако за эталон можно брать и параллельную программу. Сравнительная отладка позволяет обнаруживать различия, вызванные изменениями программы, например, распараллеливанием, а также различия, возникающие при переносе программ с одной платформы на другую или при изменении конфигурации процессоров. Выявленные различия свидетельствуют об имеющихся в программе ошибках.
Сравнение различных подходов к отладке и исследованию параллельных программ.
Все вышеописанные подходы к отладке и исследованию параллельных программ имеют как свои достоинства, так и недостатки. Даже такой, казалось бы, устаревший подход, как отладочные печати, может быть с успехом применён в случае отсутствия на конкретной вычислительной системе каких-либо других средств отладки. Диалоговая отладка хороша своей интерактивностью, возможностью оперативно влиять на ход отладки и своей близостью к традиционным отладчикам последовательных программ. С другой стороны, диалоговая отладка плохо применима на вычислительных комплексах с системами очередей, диалоговая отладка обычно не предусматривает какой-либо автоматизации по сравнению с автоматическим анализом корректности или сравнительной отладкой - все объекты инспектируются только по запросу пользователя и им же анализируются.
При применении автоматических методов отладки по трассе объём сохраняемых данных обычно очень велик, что может вызывать проблемы с дисковым пространством и временем, требуемым на сохранение данных. В процессе поиска ошибок в силу большого объема и неструктурированности данных использовать только трассировщик для отладки программ, больших, чем тестовые, представляется достаточно утомительной задачей. С этой стороны диалоговая отладка или динамическая в процессе выполнения программы выглядит предпочтительней.
Однако при дальнейшей отладке программы, когда рассматриваются вопросы её эффективности, использования памяти, вычислительных ресурсов и т.п., отладка по трассе представляется более предпочтительной. Во-первых, при анализе временных характеристик или динамического поведения одних компонентов программы относительно других необходимо минимальное вмешательство в работу исследуемой программы. Во-вторых, такого рода исследования проводятся обычно для всей программы во всем временном интервале её работы, а не какого-то конкретного фрагмента. Поэтому использование трассировщика для подобных исследований представляется наиболее приемлемым вариантом. Но гигантские объемы получающихся трасс сильно усложняют процесс исследования. Следовательно, полученные трассы необходимо каким-то образом автоматически обрабатывать, выделяя и группируя интересующие пользователя данные, а также, если пользователя интересует подробная информация по каким-то аспектам выполнения программы, показывать ему не всю трассу, а только те события, которые удовлетворяют выбранным пользователем критериям. И, таким образом, мы опять приходим к необходимости диалога с пользователем, только не в процессе выполнения программы, а после, в процессе исследования полученных трасс.
Инструментация программ.
Надо заметить, что все без исключения подходы к отладке и исследованию программ основаны на изменении самой программы. Только с помощью вставки дополнительных операторов, предназначенных для получения отладочной информации, отладчик может получить какую-либо информацию о программе. Это может быть достигнуто путём подмены системных библиотек или библиотек, обеспечивающих параллелизм, на свои библиотеки, которые обеспечивают отладчику получение необходимой информации, а затем вызывают соответствующие заменённые библиотечные функции. Заметим, что при этом остановка и получение информации для отладки возможна не в произвольной точке программы, а только в точках входа и выхода функций заменённой библиотеки. Или это может быть инструментация программ - добавление непосредственно в саму программу дополнительных операторов. Операторы могут быть добавлены в исходный текст программы, что потребует перекомпиляции, либо в её объектный код. Добавление и удаление операторов в объектном коде может производиться динамически, в процессе выполнения программы.
Динамическая инструментация несомненно является более предпочтительной чем статическая в случае диалогового отладчика, т.к. при этом изменяются только те части программы, в которых на данный момент поставлены точки останова, в отличие от статической, когда необходимо контролировать все возможные точки останова. Отладчики, использующие динамическую инструментацию, также чаще всего используют все имеющиеся платформо-зависимые средства, что в сумме даёт наиболее эффективно работающую схему получения отладочной информации при минимальном вмешательстве в работу самой программы. Статическая инструментация обычно существенно увеличивает время выполнения. Но при большом количестве контролируемых точек динамическая и статическая инструментации могут быть сравнимы по эффективности. Низкоуровневость динамической инструментации и, как следствие, сложность её реализации и поддержки на нескольких платформах делают её разработку слишком тяжелой для небольших исследовательских коллективов. Поэтому применение статической инструментации при создании прототипов диалоговых отладчиков и при создании автоматических средств отладки и исследования программ более чем оправдано.
Глава 2. Общая схема распределенного комплекса
Вторая глава посвящена описанию предложенной общей схемы взаимодействующих компонентов программного комплекса для создания инструментов отладки и исследования параллельных программ в диалоговом режиме. Описаны основные компоненты комплекса, их роли в общей схеме, решаемые задачи и принципы взаимодействия.
Выполнение параллельных программ чаще всего производится на специализированных вычислительных установках - кластерах или многопроцессорных системах с общей памятью. Доступ к таким вычислительным установкам обычно организуется по сети через хост-машину. Выполняется программа на специально для этого предназначенных вычислительных узлах.
Чаще всего из соображений безопасности доступ пользователю непосредственно на вычислительные узлы закрыт. Более того, вычислительные узлы не доступны извне вычислительной установки, и сами не могут обращаться к каким-либо внешним машинам. Таким образом, общение с внешним миром у выполняющейся программы идёт только через хост-машину, и применение каких-либо традиционных методов диалоговой отладки на таких вычислительных комплексах невозможно.
Для решения этой проблемы предлагается использовать подход, при котором выполняющаяся программа сама сообщает о себе все необходимые для отладки сведения. Причем сообщает их не непосредственно на компьютер пользователя, к которому, как уже отмечалось ранее, доступ с вычислительного узла скорее всего будет невозможен, а на хост-машину, с которой связь всегда должна быть. А уже потом, с хост-машины, данные будут передаваться на компьютер пользователя. Таким образом мы приходим к выводу о необходимости иметь специальную программу, которая будет выполняться на хост-машине и предавать данные между выполняющейся отлаживаемой параллельной программой и компьютером пользователя. В приведённой ниже на рис.1 схеме такая программа названа Монитором. Кроме простых функций передачи данных, Монитор может (и должен) выполнять целый ряд коммуникационных и логических функций: он должен обслуживать все параллельно выполняющиеся процессы отлаживаемой программы, выполнять различные редукционные и логические действия со множеством этих процессов, принимать решения о приостановке или продолжении выполнения программы, и обращаться к компьютеру пользователя только в случае наступления каких-либо ожидаемых событий. Таким образом Монитор минимизирует сетевой трафик, идущий через глобальную сеть на компьютер пользователя, что благоприятным образом сказывается на минимизации временных потерь при отладке и исследовании программ.
При построении распределенного программного комплекса для отладки и исследования удалённо выполняющихся параллельных программ предлагается применить следующую схему распределённых компонентов и взаимодействий между ними (см. рис.1).
диалоговая отладка параллельный распределенный
Рис. 1. Общая схема распределенного комплекса. |
В п. 2.1 - 2.3 основные компоненты схемы рассматриваются более подробно.
2.1. Пользовательский интерфейс
На пользовательском компьютере выполняется Пользовательский интерфейс (1). Это программа с удобным графическим интерфейсом, выполненная в стиле Microsoft Visual Studio, демонстрирующая ход выполнения отлаживаемой программы или результаты исследования программы, и предоставляющая удобный интерфейс ко всем функциям и инструментам отладчика. Пользовательский интерфейс не обладает никакой информацией об исследуемой программе, а всю информацию для визуализации процесса отладки и исследования получает от Монитора, и ему же отправляет все команды и запросы пользователя, без какой-либо предварительной обработки.
Пользовательский интерфейс оперирует общими понятиями: "показать исходный код: файл такой-то строка такая-то", "достигнута точка останова процессом таким-то в таком-то месте исходного кода" и т.п. Команды, выполнение которых реализовано в Пользовательском интерфейсе, также не зависят от типа отлаживаемой программы, а зависят только от текущего состояния программы (выполняется, приостановлена) и делятся по назначению на типичные для последовательных отладчиков (запустить, приостановить, сделать шаг, показать значение выражения, установить точку останова и т.п.), специфичные для параллельных программ (показать состояние процессов, запустить или сделать шаг для выбранной группы процессов, показ переменных в отдельных процессах и т.п.), а также команды системы исследования MPI-программ (запустить анализатор, показать результат его работы, показать фрагмент трассы и т.п.).
2.2. Монитор
Это основная программа в составе комплекса, она отвечает за установку связи между всеми компонентами комплекса и управляет выполнением отлаживаемой программы или запуском средств её исследования. Монитор также изначально не имеет никакой информации о работающей программе, а получает её от параллельно выполняющихся процессов (экземпляров) отлаживаемой программы или от инструментов исследования программы. Затем, в зависимости от типа (Норма или Фортран) отлаживаемой программы, или от рода деятельности (отладка или исследование по трассам), Монитор входит в один из заранее предопределенных режимов работы, в котором он принимает поступившие от отлаживаемых процессов (или от инструмента исследования программ) и от Пользовательского интерфейса сообщения, обрабатывает их, и посылает сообщения в ответ. Таким образом, Монитор уже оказывается зависим от типа отлаживаемой программы, и даже одни и те же примитивы при отладке различных типов программ обрабатываются по-разному. Кроме того, в Монитор заложена и другая языково-зависимая информация, например, о способе распределения данных в НОРМА-программе, с учетом которой Монитор производит вычисления значений выражений.
Можно сказать, что Монитор является логическим и управляющим центром отладчика. Монитор может выполняться как на хост-машине удаленного вычислительного комплекса, что предпочтительней, и, более того, зачастую является единственным возможным вариантом, так и на компьютере пользователя. Монитор представляет собой приложение с интерфейсом командной строки.
2.3. Модули сбора информации
Данные модули отвечают за непосредственный сбор информации об отлаживаемом процессе или исследуемой программе. В зависимости от вида поставленной задачи, Модули сбора информации могут быть выполнены по-разному. Если информация собирается непосредственно во время выполнения программы, то это должна быть библиотека функций, прилинкованная к выполняемой программе. Функции этой библиотеки вызываются непосредственно из каждого процесса отлаживаемой программы. В случае когда программа анализируется по предварительно собранным трассам, Модули сбора информации представляют собой отдельную программу, производящую анализ. В обоих случаях перед началом своей работы Модули сбора информации устанавливают соединение с Монитором и сообщают ему информацию о себе, своём типе и характеристиках отлаживаемого процесса или объектов исследования. Затем, в случае сбора информации непосредственно во время выполнения программы, при наступлении различных событий (выполнение процессом определенного оператора, вызов функции и т.п.), Модули сбора информации могут сообщать об этом Монитору, и ждать от него указаний и различных запросов. При этом выполнение исследуемой программы приостанавливается. Затем, по указанию монитора, выполнение приостановленной программы возобновляется.
2.4. Программный комплекс
Программный комплекс для создания инструментов отладки и исследования параллельных программ в диалоговом режиме был реализован в полном соответствии с приведённой и описанной выше схемой распределённых компонентов.
Глава 3. Отладчик параллельных программ на языке НОРМА с поддержкой Фортрана MPI. Отладчик параллельных программ на языке Фортран MPI
В третьей главе рассмотрены разработки диалогового отладчика параллельных программ, написанных на языке НОРМА с поддержкой Фортрана MPI и диалогового отладчика параллельных программ, написанных на языке Фортран MPI. Подробно описаны функциональные возможности созданных отладчиков.
В п. 3.1 сформулирована постановка задачи - отладка программ, написанных на непроцедурном языке.
Непроцедурный язык Норма предназначен для автоматизации решения сеточных задач на вычислительных комплексах с параллельной архитектурой. Этот язык позволяет исключить фазу программирования, которая необходима при переходе от расчетных формул, заданных прикладным специалистом, к программе. Расчетные формулы записываются на языке Норма в математическом, привычном для прикладного специалиста виде, затем компилятор языка НОРМА генерирует программу на «традиционном» языке программирования - Фортране или Си. Порядок выполнения расчётов для формул определяется компилятором. При генерации может быть построена как последовательная, так и параллельная программа с использованием одной из поддерживаемых библиотек параллелизма - MPI, PVM или DVM. В дальнейшем в данной работе будет рассматриваться только версия MPI, как наиболее используемая и распространённая по сравнению с другими версиями.
При построении выходной параллельной программы в модели передачи сообщений для параллельных систем с распределенной архитектурой компилятор автоматически по программе на Норме определяет структуру выходной программы, распределяет данные и их обработку по заданному числу виртуальных процессоров, генерирует операторы счета, управления вычислением, передачи данных между параллельно выполняющимися процессами. Сгенерированная программа также может вызывать подпрограммы и функции, написанные на Фортране или Си пользователем самостоятельно (так называемые "внешние" модули). При выполнении программ на языке НОРМА фактически выполняются автоматически сгенерированные компилятором параллельные программы на языке Фортран MPI или Си MPI. Предлагать прикладному специалисту, составившему программу на языке НОРМА, отлаживать ее путем отладки параллельной сгенерированной незнакомой программы на другом уже языке было бы, видимо, неправильно. Отладка программ на языке НОРМА на уровне исходного кода и в терминах языка НОРМА выглядит гораздо более предпочтительной.
Таким образом, основную задачу отладки программ на языке НОРМА можно сформулировать следующим образом: реализовать возможность диалоговой отладки декларативных спецификаций на языке НОРМА в терминах языка НОРМА, несмотря на то, что реально выполняется сгенерированная параллельная программа на языке Фортран MPI или Си MPI.
Отметим, что разработка диалогового отладчика для непроцедурного языка, по-видимому, является новой и оригинальной разработкой, автор не имеет информации о существовании подобных систем.
В п. 3.2 предложенная во второй главе общая схема распределенных компонентов применена для создания отладчиков программ на языке Норма с поддержкой Фортрана MPI и программ на языке Фортран MPI. В схему дополнительно введён один новый элемент - модуль генерации отладочной информации. Он необходим для того, чтобы отлаживаемая программа во время выполнения обладала необходимой для отладки информацией о себе и могла предоставить её Модулю сбора информации.
Транслятор с языка НОРМА при генерации выполняемых параллельных программ также генерирует для отладчика всю необходимую информацию о произведённом преобразовании операторов языка НОРМА в операторы языка Фортран или Си, о произведенном распараллеливании, о распределении данных по процессам и т.п. Все эти данные передаются Модулю сбора информации, который выполнен в виде библиотеки функций (эта библиотека была названа Библиотекой связи с Монитором), путем генерации в выполняемой программе вызовов этих библиотечных функций. При этом вся необходимая информация передаётся через фактические параметры вызовов функций.
В п. 3.3 приводится схема генерации отладочной информации.
3.3.1. Генерация начала/конца блоков
В начале программы после вызова MPI_Init(...) вставляется вызов функции из Библиотеки связи с Монитором, которая фиксирует начало выполнения программы. В качестве параметров ей передаются: имя главного раздела программы; имя файла с исходным текстом программы и его контрольная сумма, высчитанная при трансляции; номер строки в файле, с которой начинается главный раздел программы. Выход из функции MPI_Init(...) означает, что все необходимые MPI-экземпляры данной программы запущены и проинициализированы, между ними установлены соединения. Можно начинать отладку.
В конце программы перед вызовом MPI_Finalize(...) вставляется вызов функции из Библиотеки связи с Монитором, которая фиксирует, что выполнение программы завершается.
Точно также, при генерации каждой функции Фортран или Си программы, соответствующей какому-то разделу исходной НОРМА-программы, в начало генерируемой функции первым исполняемым оператором вставляется вызов функции Библиотеки связи с Монитором, фиксирующей начало раздела. Для распределённых разделов дополнительно передаётся информация о произведённом распределении данных по процессам. В конце каждой функции последним исполняемым оператором вставляется вызов функции Библиотеки связи с Монитором, фиксирующей конец раздела.
3.3.2. Генерация начала выполнения оператора
Перед каждым оператором в сгенерированной программе, если он является первым оператором в группе операторов, реализующих определённую конструкцию исходной НОРМА-программы, вставляется вызов функции Библиотеки связи с Монитором, фиксирующей начало выполнения конструкции исходной НОРМА-программы. При этом передаётся информация о номере строки в исходном файле, с которой начинается и заканчивается конструкция исходной НОРМА-программы. На основе этой информации отладчик определяет факт достижения точки останова и осуществляет отображение текущего положения процесса в исходном тексте программы.
3.3.3. Генерация регистрации переменных
Для того, чтобы отладчик мог иметь доступ к значениям переменных, в каждой функции сгенерированной программы перед первым исполняемым оператором вставляются вызовы функции Библиотеки связи с Монитором, которая осуществляет регистрацию одной переменной, декларированной в данном разделе. Вызовов вставляется столько, сколько переменных декларировано в данном разделе - по одному на каждую переменную. В качестве фактических параметров передаются: имя переменной, адрес её начала в памяти, тип переменной, размерность, имена индексов, оригинальные диапазоны по каждому индексу и, если переменная была распределена по процессам, то диапазоны описания переменной в сгенерированной программе. На основе этой информации отладчик, используя прямое обращение по адресу в памяти, может получить значение переменной в любой точке её описания.
П. 3.4 посвящён проблеме преобразования объектов.
При отладке сгенерированной программы на Фортране MPI или Си MPI необходимо осуществлять преобразования объектов, которыми оперирует пользователь - объектов НОРМА-программы - в объекты сгенерированной отлаживаемой программы. Это необходимо делать при обработке различных запросов пользователя, а также при отображении результатов запросов осуществлять обратное преобразование. Использованием данного преобразования достигается то, что пользователь оперирует объектами исходной программы на языке НОРМА и получает информацию в терминах тех объектов, которые он сам создал в своей программе.
Осуществляет такие преобразования Монитор. Он получает запросы пользователя от Пользовательского интерфейса "как есть", без всякой предварительной обработки. Затем Монитор проверяет синтаксическую правильность выражений в запросе, и, обладая полной информацией о произведённом разбиении и о текущем контексте каждого процесса, Монитор начинает выполнение запроса. Для этого при вычислении значений переменных, присутствующих в выражении, он отправляет каждому отлаживаемому процессу запрос о той части значений, которая находится в данном процессе. После получения от каждого процесса запрошенной части значений, Монитор объединяет в нужном порядке все имеющиеся части и вырабатывает таким образом единое значение переменной - так, как она была описана в НОРМА-программе. Затем Монитор производит необходимые вычисления (соответствующие выражению из пользовательского запроса) и отправляет полученный результат обратно Пользовательскому интерфейсу.
В п. 3.5 приводится схема инструментации внешних модулей на языке Фортран MPI.
Для реализации в отладчике поддержки внешних модулей на языке Фортран MPI была применена и несколько расширена схема отладчика, реализованная при отладке НОРМА-программ: написанный программистом программный код внешних модулей на Фортране MPI подвергается инструментации. При этом в текст программы вставляются операторы обращения к функциям Библиотеки связи с Монитором. Монитор так же, как и в случае НОРМА-программы собирает информацию от всех процессов и посылает/принимает команды от Пользовательского интерфейса. Только в данном случае Монитор уже не производит никаких преобразований - пользователь при отладке работает в контексте написанной им программы на Фортране MPI.
Для генерации отладочной информации была разработана специальная программа - инструментатор, которая анализирует внешний модуль и вставляет в него вызовы функций Библиотеки связи с Монитором. Схема вставки отладочной информации аналогична схеме, примененной при трансляции программ на языке НОРМА. Существенное отличие имеется только в том, что все переменные, описанные в COMMON-блоках, т.е. глобальные для всей программы, регистрируются один раз. Для этого их описания дублируются в самой программе (программная единица PROGRAM), и там же производится их регистрация с указанием того, что это глобальная переменная.
П. 3.6 распространяет изложенные выше решения на отладку программ на Фортране MPI.
Программа-инструментатор внешних модулей была доработана для обработки собственно программы на Фортране MPI и генерации отладочной информации по всей исследуемой программе. Отладка программы начинается после вызова функции MPI_Init(...), и заканчивается перед вызовом функции MPI_Finalize(...). В остальном процесс отладки программы на Фортране MPI ничем не отличается от отладки внешнего модуля на Фортране MPI для НОРМА-программы.
В п. 3.7 изложены перспективы продолжения работы для реализации отладки программ и внешних модулей на Си MPI. В настоящее время для Си MPI обеспечивается отладка только сгенерированных НОРМА программ.
В п. 3.8 приведено подробное описание функциональных возможностей отладчика. Имеются скриншоты окна отладчика при отладке программы на языке НОРМА и при отладке внешнего модуля на языке Фортран MPI. Подробно рассказано о всех приведённых на скриншотах элементах окна отладчика.
П. 3.9 посвящен описанию специальных возможностей и функциий, используемых в выражениях и значениях переменных, аналогов которым в традиционных отладчиках не существует:
значения переменных-массивов;
групповые операторы;
поиск точек экстремума;
выяснение значений индексов точек, в которых выполняются те или иные условия.
В п. 3.10 приводятся данные об опыте применения отладчика.
Отладчик параллельных программ на языке НОРМА с поддержкой Фортрана MPI тестировался на различных вычислительных комплексах со следующими аппаратно-программными характеристиками:
архитектура x86, операционная система Windows XP;
архитектура x86, операционная система Linux;
архитектура IA64, операционная система Linux;
архитектура Power PC, операционная система Linux;
Пользовательский интерфейс при этом всегда выполнялся на персональном компьютере архитектуры x86 под управлением операционной системы Windows XP.
Число используемых процессоров было от 2 до 16 на небольших вычислительных установках, что типично для тестовых задач, и до 80 на вычислительных установках, обладающих достаточными процессорными ресурсами. В последнем случае под отладчиком запускались реальные программы решения задач математической физики с большими объёмами вычислительных данных.
Отладчик продемонстрировал устойчивую работу во всех режимах отладки. Между тем, надо отметить серьёзный недостаток, обнаруженный при работе отладчика - это значительное увеличение времени работы программы под отладчиком. Это связано с тем, что после любого действия в программе отладчиком производится фиксация достигнутой точки выполнения, и осуществляются проверки: не достигнута ли точка останова, не выполняются ли условия точек наблюдения.
Замедление при числе процессоров до 10-16 не ощущается критичным - оно составляет порядка 2-х - 3-х раз для программ на языке НОРМА и до 10 раз для программ на языке Фортран MPI. При увеличении количества процессоров более 20 существенно возрастает нагрузка на Монитор, наступает такой момент, когда Монитор начинает непрерывно находиться в режиме диалога с отлаживаемыми процессами, и процессам приходится простаивать в ожидании своей очереди на обработку запроса. Это приводит к ещё большему увеличению времени выполнения программы под отладчиком.
Как можно решить эту проблему? Есть две идеи, которые можно попытаться использовать для борьбы с возрастающим временем работы программ под отладчиком:
Перенести часть логики отладчика из Монитора в Библиотеку связи с монитором.
Контролировать не весь код отлаживаемой программы, а выборочные участки.
Отладчик параллельных программ на языке НОРМА с поддержкой Фортрана MPI был успешно применен на практике для отладки программ решения трехмерных задач газовой динамики и задач о фокусировке ударных и взрывных волн, а также в работах в рамках научно-технической программы Союзного государства Российской Федерации и Республики Беларусь “Развитие и внедрение в государствах-участниках Союзного государства наукоёмких компьютерных технологий на базе мультипроцессорных вычислительных систем”.
Глава 4. Диалоговый интерфейс для системы исследования MPI-программ
В четвёртой главе рассмотрена разработка Диалогового интерфейса для системы исследования MPI-программ. Описаны функциональные возможности созданного Диалогового интерфейса.
В п. 4.1 сформулирована постановка задачи - создание Диалогового интерфейса для инструментов исследования MPI-программ, имеющихся в DVM-системе.
Для исследования MPI-программы в DVM-системе MPI-программа собирается со специальной библиотекой трассировщика. Затем при выполнении программы все MPI вызовы, их параметры и т. д. сохраняются в виде файлов трасс. После завершения программы полученные трассы могут быть исследованы как визуально (но, как уже отмечалось ранее, в реальных задачах объем трасс весьма значителен, что крайне затрудняет визуальный анализ трасс), так и специальными программами - анализатором корректности, анализатором эффективности. В результате работы анализатора получается текстовый протокол, в котором перечисляются все найденные и потенциальные ошибки, временные характеристики и т.п.
При использовании данной системы по отладке и исследованию MPI программ пользователь работает с различными видами текстовых файлов: файлы с текстами исходной программы, файлы с событиями трасс, файлы-протоколы работы анализаторов. При этом существует логическая связь между содержимым различных файлов. Но, так как работа происходит с простыми текстовыми файлами, пользователь, когда он хочет посмотреть элементы других файлов, связанные с интересующей его информацией, вынужден самостоятельно открывать нужный файл и отыскивать в нём необходимую ему информацию.
Между тем, как можно заметить, все данные для автоматизации этого процесса имеются в наличии в самих файлах. Более того, файлы трасс изначально имеют бинарный формат, что может позволить читать и интерпретировать только ту информацию, которая интересна пользователю, а не целиком всю огромную трассу. Анализаторы также имеют библиотечный интерфейс, который позволяет разрабатывать программы, получающие информацию непосредственно от анализаторов в бинарном, структурированном виде, минуя её текстовое представление.
В п. 4.2 изложено как распределенная схема взаимодействующих компонентов была применена при создании Диалогового интерфейса.
Для создания комплекса, позволяющего пользователю со своего компьютера вести диалог с Системой исследования MPI-программ, работающей на удалённом вычислительном комплексе, было решено использовать предложенную во второй главе общую схему организации распределенного комплекса для отладки и исследования удаленно выполняющихся параллельных программ.
Созданный комплекс, являющийся дополнением к Средствам отладки MPI-программ в DVM-системе, получил название "Диалоговый интерфейс для системы исследования MPI-программ". Пользовательский интерфейс и Монитор, разработанные для Отладчика параллельных программ на языке НОРМА с поддержкой Фортрана MPI, были доработаны для решения новых специфичных задач создаваемого Диалогового интерфейса для системы исследования MPI-программ. В Пользовательском интерфейсе были реализованы новые типы окон для представления информации в удобном, структурированном виде и реализованы средства навигации как внутри окон, так и между окнами различных типов, средства частичного запроса информации. В Мониторе была реализована схема установки связи и обмен информацией со специально созданной программой, которая выполняет роль Модуля Сбора Информации в общей схеме распределенного комплекса для отладки и исследования удаленно выполняющихся параллельных программ. Эта программа, названная Диалоговый Анализатор, была создана с использованием имеющихся библиотек доступа к файлам трасс и библиотек анализаторов Средств отладки MPI-программ в DVM-системе, и с использованием библиотеки связи компонентов для связи с Монитором.
В п. 4.3 приведено подробное описание функциональных возможностей Диалогового интерфейса. Имеются скриншоты окон Диалогового интерфейса в различных режимах работы. Подробно рассказано о всех приведённых на скриншотах элементах окна Диалогового интерфейса.
В п. 4.4 приводятся данные об опыте применения Диалогового интерфейса.
Диалоговый интерфейс для системы исследования MPI-программ тестировался на различных вычислительных комплексах со следующими аппаратно-программными характеристиками:
* архитектура x86, операционная система Linux;
* архитектура IA64, операционная система Linux;
* архитектура Power PC, операционная система Linux;
Пользовательский интерфейс при этом всегда выполнялся на персональном компьютере архитектуры x86 под управлением операционной системы Windows XP.
Тестирование производилось на сравнительно небольших трассах общим объёмом до 1 Гб, полученных при выполнении программ решения различных задач математической физики на числе процессоров до 10. Подключение к удалённой вычислительной системе осуществлялось по различным каналам связи, в том числе и по коммутируемым линиям.
Диалоговый интерфейс для системы исследования MPI-программ продемонстрировал быструю и устойчивую работу при использовании всех своих функций и инструментов. В независимости от используемой аппаратно-программной архитектуры вычислительного комплекса, на котором производилось исследование полученных трасс, и характеристик канала связи с удалённой вычислительной установкой, работа комплекса отличалась стабильностью и быстрой реакцией на все запросы пользователя.
Диалоговый интерфейс для системы исследования MPI-программ успешно применялся в работах в рамках научно-технической программы Союзного государства Российской Федерации и Республики Беларусь “Развитие и внедрение в государствах-участниках Союзного государства наукоёмких компьютерных технологий на базе мультипроцессорных вычислительных систем”. Применение комплекса на ранних этапах разработки обеспечило быстрое и качественное исправление ошибок, допущенных при написании программ, а на этапе оптимизации работы параллельных программ - устранение "узких мест" и повышение эффективности разработанных программ.
Глава 5. Информация о программной реализации распределённого комплекса для создания инструментов отладки и исследования параллельных программ в диалоговом режиме
В пятой главе приводится техническая информация о программной реализации созданного распределённого программного комплекса для создания инструментов отладки и исследования параллельных программ в диалоговом режиме. Представлены данные о расширяемости и модифицируемости компонентов комплекса, дана оценка сложности разработки новых инструментов для отладки и исследования удалённо выполняющихся параллельных программ на основе созданного программного комплекса.
Заключение
Разработана схема распределенных взаимодействующих компонентов программного комплекса для создания инструментов отладки и исследования параллельных программ в диалоговом режиме.
Создан программный комплекс для реализации инструментов отладки и исследования параллельных программ в диалоговом режиме.
Разработан диалоговый отладчик программ, написанных на декларативном непроцедурном языке НОРМА, с поддержкой отладки внешних модулей, написанных на Фортране MPI.
Разработан диалоговый отладчик программ, написанных на Фортране MPI.
Разработан Диалоговый интерфейс для системы исследования MPI-программ.
Литература
1. Бугеря А.Б., Колударов П.И., Кулешова М.И. Диалоговый интерфейс для отладки параллельных программ. Научный сервис в сети Интернет: технологии параллельного программирования. Труды Всероссийской научной конференции. -- М.: Изд-во МГУ, 2006, с. 86-88.
2. Бугеря А.Б., Колударов П.И., Кулешова М.И. Комбинированная отладка параллельных программ. Информационные и математические технологии в научных исследованиях: Труды ХI международной конференции, часть II (июль 2006 г., г. Иркутск). -- Иркутск: ИСЭМ СО РАН, 2006, с. 15-20.
3. Бугеря А.Б. Диалоговый отладчик параллельных программ. Информационные и математические технологии в науке, технике и образовании. Сборник Трудов X Байкальской всероссийской конференции, часть 1 (июль 2005 г., г. Иркутск). -- Иркутск: ИСЭМ СО РАН, 2005, с.215-219.
4. Бугеря А.Б., Колударов П.И. Отладчик параллельных программ на языке НОРМА и Фортран. Научный сервис в сети Интернет. Труды Всероссийской научной конференции. -- М.: Изд-во МГУ, 2004, с. 26-28.
5. Бугеря А.Б. Отладка и анализ удаленно выполняющихся параллельных программ. Параллельные вычислительные технологии (ПаВТ'2008): Труды международной научной конференции. -- Челябинск: Издательство ЮурГУ, 2008, с. 48-56.
6. Бугеря А.Б., Колударов П.И., Кулешова М.И. Средства отладки эффективности MPI-программ. Научный сервис в сети Интернет: решение больших задач. Труды Всероссийской научной конференции. -- М.: Изд-во МГУ, 2008, с. 89-90.
7. Бугеря А.Б. Диалоговая отладка параллельных программ: распределенная схема взаимодействующих компонентов. -- Программирование, 2008, № 3, с. 42-49.
Размещено на Allbest.ru
...Подобные документы
Модели параллельного программирования; отладка параллельных программ. Реализация экспериментальной версии системы сравнительной отладки Fortran-OpenMP программ: получение, сбор и запись трассы, инструментарий программ, используемый формат файлов трассы.
дипломная работа [92,8 K], добавлен 17.10.2013Изучение методов создания диалоговой оболочки отладчика MPI-программ, который войдет в состав системы автоматизации разработки параллельных программ (DVM-системы). Основные подходы к параллельному программированию и созданию пользовательского интерфейса.
курсовая работа [1,5 M], добавлен 14.10.2010Отладка - процесс обнаружения, устранения синтаксических и семантических ошибок. Точки отслеживания (трассировки). Выполнение отладки в режиме останова. Мониторинг содержимого переменных. Пошаговое выполнение кода. Разработка тестов для отладки программы.
презентация [743,6 K], добавлен 09.12.2013Изучение составляющих этапов разработки программ, процесса их тестирования, отладки и документирования в контексте курса обучения начинающих программистов. Теоретический анализ постановки задачи и модели программы, создания текста, семантической отладки.
курсовая работа [29,2 K], добавлен 28.11.2010Анализ предметной области разрабатываемого программного продукта. Разработка интерфейса пользователя и структурной схемы игровой программы "Крестики-нолики". Отладка и тестирование. Проведение исследования компонентов программной среды Borland Delphi 6.0.
курсовая работа [660,4 K], добавлен 08.03.2015Знакомство с историей развития многопроцессорных комплексов и параллельных вычислений. Персональные компьютеры как распространенные однопроцессорные системы на платформе Intel или AMD, работающие под управлением однопользовательских операционных систем.
презентация [1,1 M], добавлен 22.02.2016Сущность и назначение программного обеспечения - совокупности программ, управляющих работой компьютера или автоматизированной системы. Функции операционной системы - набора взаимодействующих программ, обеспечивающих работу (функционирование) компьютера.
контрольная работа [294,8 K], добавлен 18.01.2011Понятие вычислительных систем, их классификация по различным признакам. Модели параллельных вычислений PGAS и APGAS. Разработка программного продукта для анализа информационных обменов в параллельных программах на языке IBM X10. Расчёт его себестоимости.
дипломная работа [1,6 M], добавлен 10.06.2013Решение задач прикладного программирования. Оформление разработанных алгоритмов в виде графических схем. Написание программ с использованием подпрограмм, их отладка. Блок-схемы и листинг программ. Наборы тестов для отладки разработанных программ.
курсовая работа [575,8 K], добавлен 06.12.2013Особенности построения программ реального времени на основе параллельных процессов. Реализация простой программы, которая выводит на экран текст приветствия и завершается. Создание массива из трехсот параллельных процессов, получающих уникальный индекс.
статья [19,8 K], добавлен 08.12.2016Рассмотрение основ разработки технического задания. Проектирования структуры программ; описание соответственного алгоритма. Собственно программирование. Тестирование и отладка компьютерных программ. Ознакомление с основными правилами защиты проекта.
реферат [157,4 K], добавлен 15.11.2014Роль распределенных вычислительных систем в решении современных задач. Инструментальная система DVM для разработки параллельных программ. Средства построения формальной модели графического интерфейса. Требования к графическому интерфейсу DVM-системы.
курсовая работа [2,7 M], добавлен 15.10.2010Биография Ады Августы Байрон. Перевод очерка итальянского военного инженера Луи Менабреа. Составление трех первых в мире вычислительных программ. Ada - универсальный язык программирования, включающий в себя средства для создания параллельных программ.
реферат [43,3 K], добавлен 04.05.2009Создание приложения для контроля знаний студентов, программ-тестов, созданных с помощью пакета прикладных программ Microsoft Office. Основные требования к его структуре и функциональности, взаимосвязь компонентов. Составление и листинг программы.
курсовая работа [900,3 K], добавлен 03.06.2014Методика разработки внешних спецификаций программ, основанных на использовании HIPO-технологии проектирования программ. Приобретение практических навыков определения и оформления внешних спецификаций программ. Схема состава разложения и IPO-диаграммы.
лабораторная работа [45,6 K], добавлен 15.03.2009Математическая основа параллельных вычислений. Свойства Parallel Computing Toolbox. Разработка параллельных приложений в Matlab. Примеры программирования параллельных задач. Вычисление определенного интеграла. Последовательное и параллельное перемножение.
курсовая работа [1,1 M], добавлен 15.12.2010Области применения быстрых вычислений. Проблемы эффективности последовательных и параллельных программ. Отображение циклов с условными операторами на асинхронные архитектуры. Рассмотрение исследовательских университетских распараллеливающих систем.
презентация [833,3 K], добавлен 07.08.2015Технология разработки и внедрения программного обеспечения автоматизированной системы управления. Классификация ошибок в программах на этапе эксплуатации системы и общие задачи процесса ее отладки. Методы обнаружениея и локализации ошибок в программах.
контрольная работа [480,4 K], добавлен 25.10.2010Обзор существующих моделей параллельного программирования, основные средства отладки эффективности MPI-программ, общие проблемы всех средств трассировки. Создание экспериментальной системы отладки эффективности MPI-программ, этапы работы анализатора.
дипломная работа [767,2 K], добавлен 14.10.2010Средства интегрированной среды Microsoft Visual Studio, предоставляемые программисту для реализации программ на языке С++. Особенности стиля написания программ. Типовые приемы и методы создания и отладки программ. Листинги программ и их тестирование.
лабораторная работа [814,3 K], добавлен 26.05.2013