Программные продукты и системы, 2016, № 2 (114)
международный научно-практический журнал
Покупка
Основная коллекция
Издательство:
НИИ Центрпрограммсистем
Наименование: Программные продукты и системы
Год издания: 2016
Кол-во страниц: 212
Дополнительно
Тематика:
ББК:
УДК:
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Научно-исследовательский институт «Центрпрограммсистем» Программные продукты и системы МЕЖДУНАРОДНЫЙ НАУЧНО-ПРАКТИЧЕСКИЙ ЖУРНАЛ № 2 (114), 2016 (год издания двадцать девятый) Главный редактор С.В. ЕМЕЛЬЯНОВ, академик РАН Тверь PROGRAMMNYE PRODUKTY I SISTEMY (SOFTWARE & SYSTEMS) International research and practice journal no. 2 (114), 2016 (29th year of publication) Editor-in-Chief S.V. EMELYANOV, Academician of the Russian Academy of Sciences Tver Russian Federation Research Institute CENTERPROGRAMSYSTEM
ПРОГРАММНЫЕ ПРОДУКТЫ И СИСТЕМЫ 2016, № 2 (114) Международное научно-практическое приложение к международному журналу «ПРОБЛЕМЫ ТЕОРИИ И ПРАКТИКИ УПРАВЛЕНИЯ» Главный редактор С.В. ЕМЕЛЬЯНОВ, академик РАН (г. Москва, Россия) Научный редактор Н.А. СЕМЕНОВ, д.т.н., профессор ТвГТУ (г. Тверь, Россия) Рецензенты: А.П. Еремеев, д.т.н., профессор МЭИ (ТУ) (г. Москва, Россия) А.П. Афанасьев, д.ф.-м.н., профессор ИППИ РАН (г. Москва, Россия) В.М. Курейчик, д.т.н., профессор Инженерно-технологической академии ЮФУ (г. Таганрог, Россия) М.И. Дли, д.т.н., профессор Смоленского филиала МЭИ (г. Смоленск, Россия) И.А. Бессмертный, д.т.н., профессор Санкт-Петербургского университета ИТМО (г. Санкт-Петербург, Россия) Г.Б. Бурдо, д.т.н., профессор ТвГТУ (г. Тверь, Россия) Издатель НИИ «Центрпрограммсистем» (г. Тверь, Россия) Учредители: МНИИПУ (г. Москва, Россия), Главная редакция международного журнала «Проблемы теории и практики управления» (г. Москва, Россия), Закрытое акционерное общество «Научно-исследовательский институт «Центрпрограммсистем» (г. Тверь, Россия) Журнал зарегистрирован в Комитете Российской Федерации по печати 26 июня 1995 г. Регистрационное свидетельство № 013831 Подписной индекс в каталоге Агентства «Роспечать» 70799 ISSN 0236-235X (печатн.) ISSN 2311-2735 (онлайн) МЕЖДУНАРОДНАЯ РЕДАКЦИОННАЯ КОЛЛЕГИЯ Семенов Н.А. – д.т.н., профессор Тверского государственного технического университета, заместитель главного редактора (г. Тверь, Россия) Решетников В.Н. – д.ф.-м.н., профессор Российского государственного технологического университета им. К.Э. Циолковского (МАТИ), заместитель главного редактора (г. Москва, Россия) Арефьев И.Б. – д.т.н., профессор Морской академии Польши (г. Щецин, Польша) Афанасьев А.П. – д.ф.-м.н., профессор Московского физико-технического института (технического университета), заведующий Центром распределенных вычислений Института проблем передачи информации РАН (г. Москва, Россия) Баламетов А.Б. – д.т.н., профессор Азербайджанского научно-исследовательского и проектно-изыскательского института энергетики (г. Баку, Азербайджан) Батыршин И.З. – д.т.н., профессор Мексиканского института нефти (г. Мехико, Мексика) Вагин В.Н. – д.т.н., профессор Московского энергетического института (технического университета) (г. Москва, Россия) Голенков В.В. – д.т.н., профессор Белорусского государственного университета информатики и радиоэлектроники (г. Минск, Беларусь) Еремеев А.П. – д.т.н., профессор Московского энергетического института (технического университета) (г. Москва, Россия) Котов А.С. – кандидат наук, ассистент профессора университета Уэйна (штат Мичиган) (г. Детройт, США) Кузнецов О.П. – д.т.н., профессор Института проблем управления РАН (г. Москва, Россия) Курейчик В.М. – д.т.н., профессор Инженерно-технологической академии Южного федерального университета (г. Таганрог, Россия) Лисецкий Ю.М. – к.т.н., генеральный директор «S&T Ukraine» (г. Киев, Украина) Мамросенко К.А. – к.т.н., доцент Российского государственного технологического университета им. К.Э. Циолковского (МАТИ), заведующий отделом Центра визуализации и спутниковых информационных технологий ФНЦ НИИСИ РАН (г. Москва, Россия) Мейер Б. – доктор наук, профессор, заведующий кафедрой Высшей политехнической школы – ETH (г. Цюрих, Швейцария) Нгуен Тхань Нги – д.ф.-м.н., профессор, проректор Ханойского открытого университета (г. Ханой, Вьетнам) Николов Р.В. – доктор наук, профессор Университета библиотековедения и информационных технологий Софии (г. София, Болгария) Осипов Г.С. – д.ф.-м.н., профессор, заместитель директора Института системного анализа РАН (г. Москва, Россия) Палюх Б.В. – д.т.н., профессор Тверского государственного технического университета (г. Тверь, Россия) Рахманов A.A. – д.т.н., профессор, заместитель генерального директора Концерна «РТИ Системы» (г. Москва, Россия) Серов В.С. – д.ф.-м.н., профессор Университета прикладных наук Оулу (г. Оулу, Финляндия) Сотников А.Н. – д.ф.-м.н., профессор, Межведомственный суперкомпьютерный центр РАН (г. Москва, Россия) Сулейманов Д.Ш. – академик АН Республики Татарстан, д.т.н., профессор Казанского государственного технического университета (г. Казань, Республика Татарстан, Россия) Тарасов В.Б. – к.т.н., доцент Московского государственного технического университета им. Н.Э. Баумана (г. Москва, Россия) Таратухин В.В. – доктор философии, управляющий директор Европейского исследовательского центра в области информационных систем (ERCIS) Вестфальского университета им. Вильгельма (г. Мюнстер, Германия) Хорошевский В.Ф. – д.т.н., профессор Московского физико-технического института (технического университета) (г. Москва, Россия) Язенин А.В. – д.ф.-м.н., профессор Тверского государственного университета (г. Тверь, Россия) АССОЦИИРОВАННЫЕ ЧЛЕНЫ РЕДАКЦИИ Московский энергетический институт (технический университет), г. Москва, Россия Технологический институт Южного федерального университета, г. Таганрог, Россия Тверской государственный технический университет, г. Тверь, Россия Научно-исследовательский институт «Центрпрограммсистем», г. Тверь, Россия АДРЕС РЕДАКЦИИ Россия, 170024, г. Тверь, пр. 50 лет Октября, 3а Телефон (482-2) 39-91-49 Факс (482-2) 39-91-00 E-mail: red@cps.tver.ru www.swsys.ru Подписано в печать 25.05.2016 г. Отпечатано ООО ИПП «Фактор и К» Россия, 170028, г. Тверь, ул. Лукина, д. 4, стр. 1 Выпускается один раз в квартал. Год издания двадцать девятый Формат 6084 1/8. Объем 212 стр. Заказ № 17. Тираж 1000 экз. Цена 257,40 руб. Автор статьи отвечает за подбор, оригинальность и точность приводимого фактического материала. Авторские гонорары не выплачиваются. При перепечатке материалов ссылка на журнал обязательна.
PROGRAMMNYE PRODUKTY I SISTEMY (SOFTWARE & SYSTEMS) 2016, no. 2, DOI: 10.15827/0236-235X.114 International research and practice supplement for International magazine THEORETICAL AND PRACTICAL ISSUES OF MANAGEMENT Editor-in-chief S.V. Emelyanov, Academician of the Russian Academy of Sciences (Mosсow, Russian Federation) Science editor N.A. Semenov, Dr.Sc. (Engineering), Professor TSTU (Tver, Russian Federation) Reviewers: A.P. Eremeev, Dr.Sc. (Engineering), Professor MPEI (Moscow, Russian Federation) A.P. Afanasiev, Dr.Sc. (Physics and Mathematics), Professor IITP RAS (Moscow, Russian Federation) V.M. Kureichik, Dr.Sc. (Engineering), Professor Academy of Engineering and Technology SFU (Taganrog, Russian Federation) M.I. Dli, Dr.Sc. (Engineering), Professor Smolensk Branch of the MPEI (Smolensk, Russian Federation) I.A. Bessmertny, Dr.Sc. (Engineering), Professor St. Petersburg University ITMO (St. Petersburg, Russian Federation) G.B. Burdo, Dr.Sc. (Engineering), Professor TSTU (Tver, Russian Federation) Publisher Research Institute CENTERPROGRAMSYSTEM (Tver, Russian Federation) The Founders: International Scientific and Research Institute for Management Issues (Moscow, Russian Federation), the Chief Editorial Board of International Magazine Theoretical and practical issues of management (Moscow, Russian Federation), Research Institute CENTERPROGRAMSYSTEM (Tver, Russian Federation) The magazine is on record in Russian committee on press 26th of June 1995 Registration certificate № 013831 ISSN 0236-235X (print) ISSN 2311-2735 (online) INTERNATIONAL EDITORIAL BOARD Semenov N.A. – Dr.Sc. (Engineering), Professor of Tver State Technical University, Deputy Editor-in-Chief (Tver, Russian Federation) Reshetnikov V.N. – Dr.Sc. (Physics and Mathematics), Professor of Russian State Technological University (MATI), Deputy Editor-in-Chief (Mosсow, Russian Federation) Arefev I.B. – Dr.Sc. (Engineering), Professor of Poland Szczecin Maritime Academy (Szczecin, Poland) Afanasiev A.P. – Dr.Sc. (Physics and Mathematics), Professor of Moscow Institute of Physics and Technology, Head of Centre for Distributed Computing of Institute for Information Transmission Problems (Moscow, Russian Federation) Balametov A.B. – Azerbaijan Scientific-Research & Design-Prospecting Power Engineering Institute (Baku, Azerbaijan) Batyrshin I.Z. – Dr.Sc. (Engineering), Professor of Mexican Petroleum Institute (Mexico City, Mexico) Vagin V.N. – Dr.Sc. (Engineering), Professor of Moscow Power Engineering Institute (Technical University) (Mosсow, Russian Federation) Golenkov V.V. – Dr.Sc. (Engineering), Professor of Belarusian State University of Informatics and Radioelectronics (Minsk, Republic of Belarus) Eremeev A.P. – Dr.Sc. (Engineering), Professor of Moscow Power Engineering Institute (Technical University) (Moscow, Russian Federation) Kotov A.S. – Ph.D. (Computer Science), Assistant Professor, Wayne State University (Detroit, MI, USA) Kuznetsov O.P. – Dr.Sc. (Engineering), Professor of the Institute of Control Sciences of the Russian Academy of Sciences (Moscow, Russian Federation) Kureichik V.M. – Dr.Sc. (Engineering), Professor of Academy of Engineering and Technology Southern Federal University (Taganrog, Russian Federation) Lisetskiy Yu.M. – Ph.D.Tech.Sc., CEO of S&T Ukraine (Kiev, Ukraine) Mamrosenko K.A. – Ph.D. (Engineering), Associate Professor of Russian State Technological University (MATI), Head of Department of Center of Visualization and Satellite Information Technologies SRISA RAS (Moscow, Russian Federation) Meyer B. – Dr.Sc., Professor, Head of Department in Swiss Federal Institute of Technology in Zurich, ETH (Zurich, Switzerland) Nguyen Thanh Nghi – Dr.Sc. (Physics and Mathematics), Professor, Vice-Principal of Hanoi Open University (Hanoi, Vietnam) Nikolov R.V. – Full Professor of the University of Library Studies and Information Technology (Sofia, Bulgaria) Osipov G.S. – Dr.Sc. (Physics and Mathematics), Professor, Deputy of the Principal of Institute of Systems Analysis of the Russian Academy of Sciences (Mosсow, Russian Federation) Palyukh B.V. – Dr.Sc. (Engineering), Professor of Tver State Technical University (Tver, Russian Federation) Rakhmanov A.A. – Dr.Sc. (Engineering), Professor, Deputy of the CEO of Concern RTI Systems (Mosсow, Russian Federation) Serov V.S. – Dr.Sc. (Physics and Mathematics), Professor of the Oulu University of Applied Sciences (Oulu, Finland) Sotnikov A.N. – Dr.Sc. (Physics and Mathematics), Professor, Joint Supercomputer Center of the Russian Academy of Sciences (Moscow, Russian Federation) Suleimanov D.Sh. – Academician of TAS, Dr.Sc. (Engineering), Professor of Kazan State Technical University (Kazan, Republic of Tatarstan, Russian Federation) Tarassov V.B. – Ph.D. (Engineering), Associate Professor of Bauman Moscow State Technical University (Mosсow, Russian Federation) Taratoukhine V.V. – Ph.D. (Engineering), Dr.Ph., Managing Director of the Competence Centre ERP and ERCIS Lab Russia of the ERCIS (Muenster, Germany) Khoroshevsky V.F. – Dr.Sc. (Engineering), Professor of Moscow Institute of Physics and Technology (Moscow, Russian Federation) Yazenin A.V. – Dr.Sc. (Physics and Mathematics), Professor of Tver State University (Tver, Russian Federation) ASSOCIATED EDITORIAL BOARD MEMBERS Moscow Power Engineering Institute (Technical University), Moscow, Russian Federation Technology Institute at Southern Federal University, Taganrog, Russian Federation Tver State Technical University, Tver, Russian Federation Research Institute CENTERPROGRAMSYSTEM, Tver, Russian Federation EDITORIAL OFFICE ADDRESS 50 let Oktyabrya Ave. 3а, Tver, 170024, Russian Federation Phone: (482-2) 39-91-49 Fax: (482-2) 39-91-00 E-mail: red@cps.tver.ru www.swsys.ru Passed for printing 25.05.2016 Printed in printing-office “Faktor i K” Lukina St. 4/1, Tver, 170028, Russian Federation Published quarterly. 29th year of publication Format 6084 1/8. Circulation 1000 copies Prod. order № 17. Wordage 212 pages. Price 257,40 rub.
Вниманию авторов! Международный журнал «Программные продукты и системы» публикует материалы научного и научно-практического характера по новым информационным технологиям, результаты академических и отраслевых исследований в области использования средств вычислительной техники. Практикуются выпуски тематических номеров по искусственному интеллекту, системам автоматизированного проектирования, по технологиям разработки программных средств и системам защиты, а также специализированные выпуски, посвященные научным исследованиям и разработкам отдельных вузов, НИИ, научных организаций. Решением Президиума Высшей аттестационной комиссии (ВАК) Министерства образования и науки РФ международ ный журнал «Программные продукты и системы» внесен в Перечень ведущих рецензируемых научных журналов и изданий, в которых должны быть опубликованы основные научные результаты диссертаций на соискание ученых степеней кандидата и доктора наук. Информация об опубликованных статьях по установленной форме регулярно предоставляется в систему Российского индекса научного цитирования (РИНЦ), в CrossRef и готовится для передачи в международные базы цитирования. Условия публикации К рассмотрению принимаются ранее нигде не опубликованные материалы, соответствующие тематике журнала (специализация 05.13.ХХ – Информатика, вычислительная техника и управление) и отвечающие редакционным требованиям. Работа представляется в электронном виде в формате Word. При обилии сложных формул обязательно наличие статьи и в формате PDF. Формулы должны быть набраны в редакторе формул Word (Microsoft Equation или MathType). Объем статьи вместе с иллюстрациями – не менее 10 000 знаков. Диаграммы, схемы, графики должны быть доступными для редактирования (Word, Visio, Exel). Все иллюстрации для полиграфического воспроизведения представляются в черно-белом варианте. Цветные, тонированные, отсканированные, не подлежащие редактированию средствами Word рисунки и экранные формы следует присылать в хорошем качестве для их дополнительного размещения на сайте журнала в макете статьи с доступом по ссылке. (Публикация материалов с использованием гипертекста, графики, аудио-, видео-, программных средств и др. возможна в электронном издании «Программные продукты, системы и алгоритмы», сайт www.swsys-web.ru.) Заголовок должен быть информативным; сокращения, а также терминологию узкой тематики желательно в нем не использовать. Количество авторов на одну статью – не более 4, количество статей одного автора в номере, включая соавторство, – не более 2. Список литературы (оформленный в соответствии с ГОСТ Р 7.05–2008), наличие которого обязательно, должен включать не менее 10 пунктов. Необходимы также аннотация (не менее 200 слов), ключевые слова (7–10) и индекс УДК. Название статьи, аннота ция и ключевые слова должны быть переведены на английский язык (машинный перевод недопустим), а фамилии авторов, названия и юридические адреса организаций (если нет официального перевода), пристатейные списки литературы – транслитерированы по стандарту BGN/PCGN. Вместе со статьей следует прислать отзыв-рекомендацию в произвольной форме, экспертное заключение, лицензи онное соглашение, а также сведения об авторах: фамилия, имя, отчество, название и юридический адрес организации, должность, ученые степень и звание (если есть), контактный телефон, электронный адрес, почтовый адрес для отправки бесплатного авторского экземпляра журнала. Порядок рецензирования Все статьи, поступающие в редакцию (соответствующие тематике и оформленные согласно требованиям к публи кации), подлежат обязательному рецензированию в течение месяца с момента поступления. В редакции есть устоявшийся коллектив рецензентов, среди которых члены международной редколлегии журнала, эксперты из числа крупных специалистов в области информатики и вычислительной техники ведущих вузов страны, а также ученые и специалисты НИИ «Центрпрограммсистем» (г. Тверь). Рецензирование проводится конфиденциально. Автору статьи предоставляется возможность ознакомиться с тек стом рецензии. При необходимости статья отправляется на доработку. Рецензии обсуждаются на заседаниях рабочей группы, состоящей из членов научного совета журнала. Заседания проводятся раз в месяц в НИИ «Центрпрограммсистем» (г. Тверь), где принимается решение о целесообразности публикации статьи. Статьи, одобренные редакционным советом, публикуются бесплатно в течение года с момента одобрения, а отправ ленные на доработку – с момента поступления после устранения замечаний. Редакция международного журнала «Программные продукты и системы» в своей работе руководствуется сводом правил Кодекса этики научных публикаций, разработанным и утвержденным Комитетом по этике научных публикаций.
Программные продукты и системы / Software & Systems № 2 (114), 2016 5 УДК 007:004.451.2:004.434 Дата подачи статьи: 29.02.16 DOI: 10.15827/0236-235X.114.005-010 ВОЗМОЖНОСТИ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ В МАТЕМАТИЧЕСКИХ ПАКЕТАХ (Работа выполнена при финансовой поддержке РФФИ, проект № 16-37-00010, и в рамках государственного задания по теме «Локальная информационно-вычислительная система ВЦ РАН – среда для фундаментальных и прикладных исследований учреждения») А.М. Чернецов, к.т.н., научный сотрудник, доцент, an@ccas.ru, chernetsovam@mpei.ru (Вычислительный центр им. А.А. Дородницына ФИЦ ИУ РАН, ул. Вавилова, 40, г. Москва, 119333, Россия; Национальный исследовательский университет «Московский энергетический институт», ул. Красноказарменная, 14, г. Москва, 111250, Россия) За последние годы при решении множества трудновычислимых задач стали применяться средства и возможности параллельного программирования. Широко известны модели программирования в общей и распределенной памяти, позднее к ним прибавились гибридные модели. Однако все упомянутые средства относятся к достаточно низкоуровневому программированию, когда производится значительная переделка исходного кода. Немалое число математических расчетов выполняется не на алгоритмических языках (C/C++, Fortran), а в специа лизированных математических пакетах MATLAB, Maple, Mathematica, MathCad. В работе рассмотрены средства параллельного программирования в современных математических пакетах. При веден краткий обзор развития средств параллельного программирования в широко распространенных пакетах MATLAB, Maple, Mathematica и MathCad. Для MATLAB кратко описываются основные примитивы параллельного программирования и их соответствия в среде MPI, а также приводятся другие операторы параллельного программирования. Рассматриваются различные средства обеспечения параллелизма в пакете Maple (работа с нитями, высокоуровневыми абстракциями Task Programming Model, параллельное программирование). Для Mathematica приводятся некоторые базовые конструкции параллельного программирования, имеющиеся в языке Mathematica Wolfram Language. Рассматриваются различные примеры. В зависимости от того, в каком пакете происходит работа, доступны несколько отличающиеся возможности, од нако любая задача может быть решена в каждом из рассматриваемых пакетов (за исключением MathCad). Ключевые слова: параллельное программирование, математические пакеты, MPI, WSTP. В последние годы для решения множества труд новычислимых задач стали применяться методы и средства параллельного программирования. Широко известны модели программирования в общей и распределенной памяти [1], позднее к ним добавились гибридные модели [2]. Однако упомянутые средства чаще всего реализуются при достаточно низкоуровневом программировании, что требует значительной переделки исходного последовательного кода. Следует отметить, что немало математических расчетов выполняется не на алгоритмических языках (C/C++, Fortran), а в специализированных математических пакетах MATLAB [3], Maple [4], Mathematica [5], MathCad [6]. Производители пакетов тоже задумались о реализации возможностей параллелизма в своих продуктах. К 2016 году сложилась следующая картина. Изначально возможности параллельного про граммирования в пакете Mathematica появились в 2001 г. [7]. Для их обеспечения было выпущено дополнительное средство – Parallel Computing Toolkit (требовалась отдельная лицензия, но после выхода версии 7.0 в 2008 г. для работы на локальном компьютере лицензия уже не требуется). В пакете MATLAB возможности параллельного программирования появились в 2005 г. В 2009 г. о реализации средств параллельного программирования было заявлено в Maple. В среде Maple 13 было реализовано программирование в модели общей памяти. Однако средства именно параллельного программирования появились только в выпуске Maple 15 в 2011 г. Следует отметить, что независимые решения предлагались и ранее (см., например, Distributed Maple [8]). Пакет MathCad чрезвычайно долгое время ни как не развивался в этом направлении. Только в версии MathCad Prime 2.0 (2012 г.) появились некоторые изменения: параллелизм на основе средств многоядерных процессоров обеспечивается за счет использования библиотеки Intel MKL [9, 10]. В данной работе рассмотрены средства параллельного программирования в пакетах MATLAB, Maple и Mathematica. Средства параллельного программирования в MATLAB До момента реализации функционала па раллельного программирования производителем (компанией MathWorks) существовали различные подходы к решению [11]. После обеспечения возможностей параллельного программирования появились два вида параллелизма: distributed computing – распределенные вычисления, когда фактически обеспечивается параллелизм по данным [1], и собственно parallel computing, когда взаимодей
Программные продукты и системы / Software & Systems № 2 (114), 2016 6 ствие между параллельными процессами осу ществляется с помощью вызовов специальных команд MATLAB. Для обеспечения возможностей параллелизма в пакете был разработан тулбокс Parallel Computing Toolbox, лицензируемый отдельно. Параллельное программирование в MATLAB основано на парадигме модели передачи сообщений. Последний (на январь 2016 г.) выпуск R2015b использует на низком уровне библиотеку MPICH2 v.1.4.1p1 [12]. Кроме того, допускается работа с собственной реализацией MPI, удовлетворяющей определенным условиям [13]. Для конечного пользователя есть два режима работы: интерактивный режим pmode [11] и непосредственно параллельное программирование в модели передачи сообщений (модели распределенной памяти). В таблице 1 приведены основные примитивы параллельного программирования в MATLAB. Таблица 1 Команды (переменные) MATLAB и их соответствие в MPI Table 1 MATLAB commands (variable) and their matching in MPI Команда MATLAB Функция MPI Numlabs MPI_Comm_size(size) Labindex MPI_Comm_rank(rank, MPI_COMM_WORLD) LabBarrier() MPI_Barrier(MPI_COMM _WORLD) Shared_data=LabBroadcast(root, buffer) MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_COMM_WORLD) LabSend(buf,dest) LabSend(data,dest,tag) MPI_Send(void *buf, int count, int tag, MPI_COMM_WORLD) data=LabReceive(source,tag), data=LabReceive('any',tag) MPI_Recv(void *buf, int count, int source, int tag, MPI_COMM_WORLD, MPI_Status *status) is_data_available= =LabProbe(source,tag) MPI_Probe(int source, int tag, MPI_COMM_WORLD, MPI_Status *status) Как видим, пакет реализует базовый набор ди ректив для параллельного программирования. Опишем реализацию параллельного алгоритма умножения матрицы на вектор z=y+Ax, ARnn, x, y, zRn [11]. На начальной стадии перед вычислениями в каждой сессии (в каждом рабочем пространстве процесса) доступен соответствующий блок матрицы A, вектора x и вектора y. Вычисления начинаются с того, что каждый рабочий процесс отправляет доступный ему блок вектора x сосед нему (по номеру ID) процессу. Следующий шаг – получение с помощью функции labReceive блока вектора x от соседнего рабочего процесса, который к этому моменту уже отправил его. После получения блока x происходит непосред ственное вычисление вектора yk = yk + Ap,x , где – номер доступного блока вектора x (на каждом шаге, у каждого рабочего процесса определена своя переменная ). Приведем реализацию алгоритма на языке MATLAB: function z=par_multiplication(A, x, y) % A – матрица % x,y,z вектор-столбцы % z=Ax+y; q=mod(n,numlabs);% остаток от деления if q==0 r=n/numlabs; x=x((labindex-1)*r+1:labindex*r); y=y((labindex-1)*r+1:labindex*r); A=A((labindex-1)*r+1:labindex*r,:); else % делится с остатком r=(n-q)/numlabs; if labindex==1 x=x(1:r+q); y=y(1:r+q); A=A(1:r+q,:); else x=x((labindex-1)*r+1+q:labindex*r+q); y=y((labindex-1)*r+1+q:labindex*r+q); A=A((labindex-1)*r+1+q:labindex*r+q,:); end end for t=1:numlabs if labindex==numlabs labSend(x,1); % последний сразу отправил первому else labSend(x,labindex+1); % остальные отправляют своим соседям (справа) end if labindex==1 x=labReceive(numlabs); % первый получил от последнего else x=labReceive(labindex-1); % остальные получают от своих соседей (слева) end tau=labindex-t; if tau<=0 tau=tau+numlabs; end y=y+A(:,1+(tau-1)*r:tau*r)*x; end z=y; Достаточно часто встречаются типовые ситуа ции, имеющие понятный способ решения. Для некоторых таких случаев предусмотрены штатные средства. Рассмотрим два из них: векторизацию циклов (директива parfor) и частный случай MIMD (в классификации Флинна [1]) типа Single Program Multiple Data (директива spmd).
Программные продукты и системы / Software & Systems № 2 (114), 2016 7 Цикл parfor – параллельная модификация стан дартного цикла for. Оператор parfor полезен в случаях, когда нужно провести много однотипных расчетов, например, при моделировании методом Монте-Карло. Итерации цикла считаются независимо в произвольном порядке рабочими процессами. Понятно, что оператор parfor нельзя применять тогда, когда имеется зависимость по данным между итерациями. Также существуют дополнительные ограничения, о которых можно узнать в документации на продукт. Операторы внутри блока spmd выполняются од новременно во всех рабочих процессах. Синтаксис команды выглядит следующим образом: spmd [(m, n)] <statements> end spmd, где опциональные параметры m и n – минимальное и максимальное число рабочих процессов соответственно. Помимо описанных способов, начиная с MATLAB R2007b предусмотрено автоматическое распараллеливание функций различных тулбоксов (ядро, Image Processing, Statistics, Optimization Toolbox и т.д.). Система производит автоматическое распределение расчетов на все доступные мощности (например, на все 8 ядер процессора). Кроме того, MATLAB с выпуска R2010b поддерживает параллельные вычисления на графических процессорах (GPU) NVIDIA – программирование в модели CUDA. Соответственно, есть директивы для копирования данных из основной памяти в GPU и, наоборот, директивы для выполнения операций на GPU. Вычисления на GPU происходят как с одинарной, так и с двойной точностью. MATLAB также поддерживает выполнение параллельных задач на кластерных системах с использованием функционала MATLAB Distributed Computing Server (лицензируется отдельно). В его рамках возможен запуск параллельных задач в системе управления пакетными заданиями (СУПЗ) Microsoft, PBS, Torque, LSF, Condor [14]. Средства параллельного программирования в Maple Еще в старых версиях Maple были реализованы средства работы с нитями (threads). В качестве примера можно привести реализацию классической задачи «производитель–потребитель» [15, 16]. В этой задаче один процесс (Producer) выдает информацию, а другой (Consumer) ее получает и обрабатывает. При решении задачи могут возникать проблемы потери данных и повторного использования данных. В версии Maple 13 появилось средство Task Pro gramming Model [17], позволяющее работать в модели общей памяти на высоком уровне абстракции. На более низком уровне Task Programming Model реализуется как работа с нитями (threads). Разработчик не рекомендует конечным пользователям работать на этом уровне [15]. При выполнении программы Maple создаются подзадачи (Tasks), которые средой распределяются на все доступные ресурсы процессоров. Каждая подзадача – это вызов функции, который выполняется отдельной нитью. В качестве примера приведем реализацию алго ритма сложения большого количества чисел: > cont := proc(a, b) return a + b; end proc; task := proc(i, j) local k; if (j-i < 1000) then return add(k, k=i..j); else k := floor( (j-i)/2 )+i; Threads:-Task:-Continue( cont, Task=[task, i, k], Task=[task, k+1, j]); end if; end proc; Threads:-Task:-Start(task, 1, 10^8); Команда Start создает начальную задачу и ожи дает, пока она не завершится. В развитии данного подхода в версии Maple 15 появились средства именно параллельного программирования, которые реализованы в дополнительном пакете Grid Package (Toolbox). Как и в MATLAB, пакет позволяет работать с различными реализациями MPI. По умолчанию в среде Windows используется реализация Microsoft MPI, включенная в Windows HPC Server, а в среде Linux – MPICH2. В таблице 2 приведены основные примитивы параллельного программирования в Maple. Более подробно с ними можно ознакомиться в документации на продукт. Как видно из таблицы, пакет реализует базовый набор директив для параллельного программирования, при этом он отличается по функционалу от MATLAB. Также отметим, что весь функционал уже лицензирован в рамках пакета и дополнительные лицензии не требуются. После выхода Maple 2015 расширились функ ции Maple в тулбоксе grid. Были добавлены директивы ожидания выполнения (Wait, WaitForFirst) и запуска на выполнение (Run). Для указания на то, что вычисления необходимо производить параллельно, служит директива Launch. На всех узлах выполняется одинаковая команда. Все вычисления прекращаются, как только закончит работу главный процесс (номер 0). С целью предотвращения взаимоблокировок вычисления прекращаются автоматически по тайм-ауту, если все узлы ожидают сообщений и нет ни одного узла, который их отправляет. Пакет Maple позволяет производить ограниченные параллельные вычисления на GPU.
Программные продукты и системы / Software & Systems № 2 (114), 2016 8 Однако в отличие от MATLAB нет возможности вычислять произвольные функции на GPU. Доступен только ограниченный набор действий. Maple поддерживает выполнение параллельных задач на кластерных системах с использованием функционала тулбокса Grid. В его рамках возможен запуск параллельных задач в СУПЗ Microsoft, PBS, Torque. В этом случае уже требуется дополнительная лицензия на удаленных клиентах-узлах. Таблица 2 Функции Maple и их соответствие в MPI Table 2 Maple functions and their matching in MPI Функция Maple Функция MPI NumNodes() MPI_Comm_size(size) MyNode() MPI_Comm_rank(rank, MPI_COMM_WORLD) Barrier() MPI_Barrier(MPI_COMM_WORLD) Set(node,v1, v2, ...) int MPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_COMM_WORLD) int root, MPI_COMM_WORLD) Send( node, msg) MPI_Send(void *buf, int count, int tag, MPI_COMM_WORLD) Receive() Receive(node) – получить от конкретного узла MPI_Recv(void *buf, int count, MPI_COMM_WORLD, MPI_Status *status) Средства параллельного программирования в Mathematica Начиная с версии 7.0 (2008 г.) в пакете Mathe matica средства параллельного программирования были интегрированы прямо в пакет, не требуя дополнительных программных продуктов (Parallel Computing Toolkit). В версии 8.0 (2010 г.) были произведены некоторые изменения (добавлены subkernels), реализована поддержка Windows HPC Server, Microsoft Compute Cluster Server и Sun Grid. В отличие от остальных математических пакетов в Mathematica нет привязки к какой-либо системной библиотеке передачи сообщений. Все действия производятся исключительно средствами среды Wolfram Mathematica. На низком уровне взаимодействие организуется средствами протокола Wolfram Symbolic Transfer Protocol (WSTP) [18]. Он позволяет работать с гетерогенной средой (Windows, Unix, Mac). Поскольку все параллельные возможности «привязаны» к языку, нельзя установить прямые аналогии с функциями MPI, как в случае работы с другими пакетами. В таблице 3 приведены основные примитивы параллельного программирования в Mathematica. Таблица 3 Команды Mathematica для параллельных вычислений Table 3 Mathematica commands for parallel computations Функция Mathematica Смысл $KernelCount Число ядер для параллельного вычисления $KernelId Уникальный номер (ID) параллельного вычисления SetSharedVariable [s1, s2, …] Установить символы si как общие переменные, чьи значения синхронизированы во всех ядрах WaitAll[{pid1, pid2, …}] Дождаться, пока все параллельные вычисления не будут завершены ParallelSubmit[{var1, var2, …}, expr] Посылает expr на вычисление следующим доступным параллельным ядром ParallelTable[expr, {i, imax}] Создает параллельно список значений expr, когда i в диапазоне от 1 до imax ParallelEvaluate[expr, kernel] Вычислить expr на заданном параллельном kernel Parallelize[expr] Вычислить expr, используя автоматическое распараллеливание ParallelDo [expr, {i, imin, imax}] Вычислить expr параллельно, начиная с i=imin и до i=imax DistributeDefinitions[s1, s2, …] Распространить определения символов si на все параллельные ядра CUDAFunctionLoad Загрузить CUDA-функцию в пакет и сделать доступной для языка Wolfram OpenCLFunctionLoad Загрузить функцию OpenCL в пакет Для иллюстрации приведем реализацию реше ния задачи нахождения списка чисел n, для которых значение n!+1 простое [19]: In(1):= n = 1; primes= {}; SetSharedVariable[n, primes]; In(2):= PrintTemporary[Dynamic[{n, primes}]]; CheckAbort[ ParallelEvaluate[While[True, With[{n = n++}, If[PrimeQ[n! + 1], AppendTo[primes, n]]]]], {n, primes}] В данном случае организуется бесконечный цикл, прерываемый по внешнему воздействию пользователя. Начиная с версии 8.0 среда может работать с графическими процессорами NVIDIA и поддерживает технологии CUDA и OpenCL (что позволяет работать и с графическими процессорами AMD).
Программные продукты и системы / Software & Systems № 2 (114), 2016 9 Для этого реализованы свободно доступные модули CudaLink [20] и OpenCLLink [21]. Как и все предыдущие пакеты, Mathematica поз воляет производить распределенные параллельные вычисления на кластерных системах, для чего используется тулбокс GridMathematica [22]. Тулбокс разработан еще в 2002 г. Он также лицензируется отдельно. В настоящее время он позволяет запускать задания на СУПЗ Wolfram Lightweight Grid Manager, PBS, Microsoft, Platform LSF и Sun Grid Engine. В качестве вычислительных мощностей выступают как процессоры, так и графические ускорители. В заключение отметим, что средства параллель ного программирования в пакетах MATLAB и Mathematica достаточно хорошо описаны в литературе (например [23, 24]). Для работы со средствами параллельного программирования в пакете Maple нет литературных источников, однако документация на продукт достаточно высокого качества, что позволяет использовать ее для полноценного решения задач. Отметим, что средства параллельного программирования в математических пакетах регулярно развиваются. В зависимости от того, в каком пакете происходит работа, доступны несколько отличающиеся возможности, однако любая задача может быть решена в каждом из рассмотренных пакетов, за исключением MathCad. Литература 1. Воеводин В.В., Воеводин Вл.В. Параллельные вычис ления. СПб: BHV-Петербург, 2002. 608 с. 2. Эндрюс Г.Р. Основы многопоточного, параллельного и распределенного программирования; [пер. с англ.]. М.: Вильямс, 2003. 512 с. 3. MathWorks. URL: http://www.mathworks.com (дата обра щения: 01.01.2016). 4. Maplesoft. URL: http://www.maplesoft.com (дата обраще ния: 01.01.2016). 5. Wolfram. URL: http://www.wolfram.com (дата обраще ния: 01.01.2016). 6. PTC Mathcad. URL: http://www.ptc.com/mathcad (дата обращения: 01.01.2016). 7. Mäder R. Parallel Computing with Mathematica. Proc. 4th Intern. Workshop on Computer Algebra in Scientific Computing, Konstanz, Sept. 22–26, 2001, p. 399. 8. Schreiner W., Mittermaier C., Bosa K. Distributed Maple: parallel computer algebra in networked environ-ments. Journ. of Symbolic Computation, 2003. vol. 35, iss. 3, pp. 305–347. 9. Kucan J. Multi-threading, multi-core and parallel calcu lation in Mathcad. URL: http://blogs.ptc.com/2012/05/16/multithreading-multi-core-and-parallel-calculation-in-mathcad/ (дата обращения: 01.01.2016). 10. Intel® Math Kernel Library (Intel® MKL). URL: https:// software.intel.com/en-us/intel-mkl (дата обращения: 01.01.2016). 11. Оленев Н.Н., Печенкин Р.В., Чернецов А.М. Параллель ное программирование в MATLAB и его приложения. М.: Издво ВЦ РАН, 2007. 120 с. 12. Чернецов А.М. Использование сторонних библиотек MPI для параллельного программирования в MATLAB // Радиоэлектроника, электротехника и энергетика: тр. 14 Междунар. науч.-технич. конф. студентов и аспирантов в 3-х т. М.: Изд-во МЭИ, 2008. Т. 1. C. 309–310. 13. MPICH. URL: http://www.mpich.org (дата обращения: 01.01.2016). 14. Чернецов А.М. Использование средств MATLAB для организации распределенной обработки // Информатизация инженерного образования: тр. междунар. конф. М.: Изд-во МЭИ, 2012. С. 127–130. 15. Multithreaded Programming. URL: http://www.maplesoft. com/support/help/Maple/view.aspx?path=multithreaded (дата обращения: 01.01.2016). 16. Таненбаум Э. Современные операционные системы; [пер. с англ.]. СПб: Питер, 2013. 1120 с. 17. Task Programming Model URL: http://www.maplesoft. com/support/help/Maple/view.aspx?path= TaskProgrammingModel (дата обращения: 01.01.2016). 18. WSTP API. URL: http://reference.wolfram.com/language/ guide/WSTPAPI.html (дата обращения: 01.01.2016). 19. Parallel Computing. URL: https://reference.wolfram.com/ language/guide/ParallelComputing.html (дата обращения: 01.01.2016). 20. CUDALink Overview. URL: http://reference.wolfram. com/language/CUDALink/tutorial/Overview.html (дата обращения: 01.01.2016). 21. OpenCLLink Overview URL: http://reference.wolfram. com/language/OpenCLLink/tutorial/Overview.html (дата обращения: 01.01.2016). 22. Wolfram gridMathematica. URL: http://www.wolfram. com/gridmathematica/ (дата обращения: 01.01.2016). 23. Кепнер Дж. Параллельное программирование в среде MATLAB для многоядерных и многоуровневых вычислительных машин; [пер. с англ.]. М.: Изд-во МГУ, 2013. 296 с. 24. Аладьев В., Гринь Д., Ваганов В. Избранные системные задачи в программной среде Mathematica. М.: Олди-плюс, 2013. 555 с. DOI: 10.15827/0236-235X.114.005-010 Received 29.02.16 PARALLEL PROGRAMMING IN MATHEMATICAL SUITES (The work was supported by RFBR, project no. 16-37-00010, within a State task on the topic “Local information computer system of the Computing Centre of RAS. The environment for fundamental and applied research in an institute”) Chernetsov A.M., Ph.D. (Engineering), Research Associate, Associate Professor, an@ccas.ru, chernetsovam@mpei.ru (Dorodnicyn Computing Centre FRC CSC RAS, Vavilov St. 40, Moscow, 119333, Russian Federation; National Research University “MPEI”, Krasnokazarmennaya St. 14, Moscow, 111250, Russian Federation) Abstract. Recently tools and features of parallel programming have been used for calculating difficult tasks. Programming models in shared and distributed memory are well-known. Later hybrid models have appeared. However, all these tools suppose fairly low-level programming when a source code is modified significantly.
Программные продукты и системы / Software & Systems № 2 (114), 2016 10 A significant number of mathematical calculations is performed not in algorithmic languages (C/C++, Fortran), but in special mathematical suites such as MATLAB, Maple, Mathematica, MathCad. The paper discusses parallel programming tools in modern mathematical suites. There is a short review of parallel pro gramming tools development in well-known suites, such as MATLAB, Maple, Mathematica and Mathcad. The paper briefly describes the main primitives of parallel programming and their analogs in MPI for MATLAB. It also mentions other operators of parallel programming. It describes different features of parallelism in Maple (threads programming, high-level Task Programming Model, parallel programming). There are some basic constructions of parallel programming in Mathematica Wolfram language. The paper describes different examples. Different possibilities are available depending on an operation suite. However, any problem can be solved in each of these suites (except MathCad). Keywords: parallel programming, mathematical suites, MPI, WSTP. References 1. Voevodin V.V., Voevodin Vl.V. Parallelnye vychisleniya [Parallel Computations]. St.-Petersburg, BHV-Petersburg Publ., 2002, 608 p. 2. Andrews G.R. Foundations of Multithreaded, Parallel and Distributed Programming 1st ed. Pearson Prentice Hall Publ., 2002 (Russ. Ed.: Moscow, Williams Publ., 2003, 512 p.). 3. MathWorks. Available at: http://www.mathworks.com (accessed January 1, 2016). 4. Maplesoft. Available at: http://www.maplesoft.com (accessed January 1, 2016). 5. Wolfram. Available at: http://www.wolfram.com (accessed January 1, 2016). 6. PTC Mathcad. Available at: http://www.ptc.com/mathcad (accessed January 1, 2016). 7. Mäder R. Parallel Computing with Mathematica. Proc. of the 4th Int. Workshop on Computer Algebra in Scientific Computing. Konstanz, 2001, 399 p. 8. Schreiner W., Mittermaier C., Bosa K. Distributed Maple: parallel computer algebra in networked environ-ments. Journ. of Symbolic Computation. 2003, vol. 35, iss. 3, pp. 305–347. 9. Kucan J. Multi-threading, multi-core and parallel calculation in Mathcad. Available at: http://blogs.ptc.com/2012/ 05/16/multi-threading-multi-core-and-parallel-calculation-in-mathcad/ (accessed January 1, 2016). 10. Intel® Math Kernel Library (Intel® MKL). Available at: https://software.intel.com/en-us/intel-mkl (accessed January 1, 2016). 11. Olenev N.N., Pechenkin R.V., Chernetsov A.M. Parallelnoe programmirovanie v MATLAB i ego prilozheniya [Parallel Programming in MATLAB and its Applications]. Moscow, Dorodnicyn Computing Centre RAS Publ., 2007, 120 p. (in Russ.). 12. Chernetsov A.M. Using foreign MPI libraries for parallel programming in MATLAB. Radioelektronika, elec trotekhnika i energetika. 14 Mezhdunar. nauch.-tekhnich. konf. studentov i aspirantov [Proc. of the 14th Int. Science and Tech. Conf. for Undergraduate and Postgraduate Students “Radioelectronics, Electrical Engineering and Energetics”]. Moscow, MPEI Publ., 2008, pp. 309–310 (in Russ.). 13. MPICH. Available at: http://www.mpich.org (accessed January 1, 2016). 14. Chernetsov A.M. Using MATLAB features for distributed computing. Trudy pervoy mezhdunar. konf. “Informati zatsiya inzhenernogo obrazovaniya“ [Proc. of the 1st Int. Conf. “Informatization of Engineering Research”]. Moscow, MPEI Publ., 2012, pp. 127–130 (in Russ.). 15. Multithreaded Programming. Available at: http://www.maplesoft.com/support/help/Maple/view.aspx?path=multi threaded (accessed January 1, 2016). 16. Tannenbaum A.S. Modern Operating Systems 3rd ed. Pearson Prentice Hall, 2009 (Russ. ed.: Kozyrev V.P., Moscow, Piter Publ., 2013, 1120 p.). 17. Task Programming Model. Available at: http://www.maplesoft.com/support/help/Maple/view.aspx?path=TaskPro grammingModel (accessed January 1, 2016). 18. WSTP API. Available at: http://reference.wolfram.com/language/guide/WSTPAPI.html (accessed January 1, 2016). 19. Parallel Computing. Available at: https://reference.wolfram.com/language/guide/ParallelComputing.html (accessed January 1, 2016). 20. CUDALink Overview. Available at: http://reference.wolfram.com/language/CUDALink/tutorial/Overview.html (ac cessed January 1, 2016). 21. OpenCLLink Overview. Available at: http://reference.wolfram.com/language/OpenCLLink/tutorial/Overview.html (accessed January 1, 2016). 22. Wolfram gridMathematica. Available at: http://www.wolfram.com/gridmathematica/ (accessed January 1, 2016). 23. Kepner J. Parallel MATLAB for Multicore and Multimode Computers. SIAM, 2009. (Russ. ed.: Moscow, MSU Publ., 2013, 296 p.). 24. Aladyev V., Grin D., Vaganov V. Izbrannye sistemnye zadachi v programmnoy srede Mathematica [Selected System Problems in Mathematica System]. Moscow, Oldi-plus Publ., 2013, 555 p.