<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.3 20210610//EN" "JATS-journalpublishing1-3.dtd">
<article article-type="research-article" dtd-version="1.3" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="ru"><front><journal-meta><journal-id journal-id-type="publisher-id">mais</journal-id><journal-title-group><journal-title xml:lang="ru">Моделирование и анализ информационных систем</journal-title><trans-title-group xml:lang="en"><trans-title>Modeling and Analysis of Information Systems</trans-title></trans-title-group></journal-title-group><issn pub-type="ppub">1818-1015</issn><issn pub-type="epub">2313-5417</issn><publisher><publisher-name>Yaroslavl State University</publisher-name></publisher></journal-meta><article-meta><article-id pub-id-type="doi">10.18255/1818-1015-2018-4-347-357</article-id><article-id custom-type="elpub" pub-id-type="custom">mais-728</article-id><article-categories><subj-group subj-group-type="heading"><subject>Research Article</subject></subj-group><subj-group subj-group-type="section-heading" xml:lang="ru"><subject>Оригинальные статьи</subject></subj-group><subj-group subj-group-type="section-heading" xml:lang="en"><subject>Articles</subject></subj-group></article-categories><title-group><article-title>Оптимизация инварианта цикла в языке Пифагор</article-title><trans-title-group xml:lang="en"><trans-title>Loop-invariant Optimization in the Pifagor Language</trans-title></trans-title-group></title-group><contrib-group><contrib contrib-type="author" corresp="yes"><contrib-id contrib-id-type="orcid">https://orcid.org/0000-0002-3340-6678</contrib-id><name-alternatives><name name-style="eastern" xml:lang="ru"><surname>Васильев</surname><given-names>Владимир Сергеевич</given-names></name><name name-style="western" xml:lang="en"><surname>Vasilev</surname><given-names>Vladimir S.</given-names></name></name-alternatives><bio xml:lang="ru"><p>аспирант</p></bio><bio xml:lang="en"><p>graduate student</p></bio><email xlink:type="simple">vsvasilev@sfu-kras.ru</email><xref ref-type="aff" rid="aff-1"/></contrib><contrib contrib-type="author" corresp="yes"><contrib-id contrib-id-type="orcid">https://orcid.org/0000-0002-5487-0699</contrib-id><name-alternatives><name name-style="eastern" xml:lang="ru"><surname>Легалов</surname><given-names>Александр Иванович</given-names></name><name name-style="western" xml:lang="en"><surname>Legalov</surname><given-names>Alexander I.</given-names></name></name-alternatives><bio xml:lang="ru"><p>д-р техн. наук, профессор</p></bio><bio xml:lang="en"><p>doctor of science</p></bio><email xlink:type="simple">legalov@mail.ru</email><xref ref-type="aff" rid="aff-1"/></contrib></contrib-group><aff-alternatives id="aff-1"><aff xml:lang="ru"><institution>Сибирский федеральный университет, Институт космических и информационных технологий</institution><country>Россия</country></aff><aff xml:lang="en"><institution>Siberian Federal University, Institute of Space and Information Technology</institution><country>Russian Federation</country></aff></aff-alternatives><pub-date pub-type="collection"><year>2018</year></pub-date><pub-date pub-type="epub"><day>27</day><month>08</month><year>2018</year></pub-date><volume>25</volume><issue>4</issue><fpage>347</fpage><lpage>357</lpage><permissions><copyright-statement>Copyright &amp;#x00A9; Васильев В.С., Легалов А.И., 2018</copyright-statement><copyright-year>2018</copyright-year><copyright-holder xml:lang="ru">Васильев В.С., Легалов А.И.</copyright-holder><copyright-holder xml:lang="en">Vasilev V.S., Legalov A.I.</copyright-holder><license xml:lang="ru" license-type="creative-commons-attribution" xlink:href="https://creativecommons.org/licenses/by/4.0/" xlink:type="simple"><license-p>Данная работа распространяется под лицензией Creative Commons Attribution 4.0.</license-p></license><license xml:lang="en" license-type="creative-commons-attribution" xlink:href="https://creativecommons.org/licenses/by/4.0/" xlink:type="simple"><license-p>This work is licensed under a Creative Commons Attribution 4.0 License.</license-p></license></permissions><self-uri xlink:href="https://www.mais-journal.ru/jour/article/view/728">https://www.mais-journal.ru/jour/article/view/728</self-uri><abstract><p>В работе рассматриваются методы преобразования программ, эквивалентные оптимизации инварианта цикла, применительно к функционально-потоковой модели параллельных вычислений, реализованной в языке программирования Пифагор. В императивных языках при оптимизации инварианта из цикла выносятся вычисления, не зависящие от изменяемых в нем переменных. Особенностью языка функционально-потокового параллельного программирования Пифагор является отсутствие явно задаваемых циклических вычислений (оператора цикла). Тем не менее, повторяющиеся вычисления в этом языке можно задать рекурсивно или за счет применения специфических языковых конструкций (параллельных списков). Оба механизма обеспечивают возможность параллельного выполнения. В случае оптимизации рекурсивной функции повторяющиеся операции выносятся во вспомогательную функцию, а основная функция выполняет лишь вычисление инварианта. При оптимизации внутри параллельных списков вычисление инварианта перемещается в дополнительную функцию, содержащую вызов функции, использующую данный параллельный список. В статье приводится определение «инварианта» применительно к языку Пифагор, алгоритмы его оптимизации, а также примеры программ, их графовых представлений (граф программных зависимостей) до и после оптимизации. Алгоритм оптимизации, описанный для вычислений над параллельными списками, применим только для языка Пифагор, так как опирается на специфические структуры данных и модель вычислений этого языка. Вместе с тем, алгоритм преобразования рекурсивных функций может быть применим и для других языков программирования.</p></abstract><trans-abstract xml:lang="en"><p>The paper considers methods of program transformation equivalent to optimizing the cycle invariant, applied to the functional data-flow model implemented in the Pifagor programming language. Optimization of the cycle invariant in imperative programming languages is reduced to a displacement from the cycle of computations that do not depend on variables that are changes in the loop. A feature of the functional data flow parallel programming language Pifagor is the absence of explicitly specified cyclic computations (the loop operator). However, recurring calculations in this language can be specified recursively or by applying specific language constructs (parallel lists). Both mechanisms provide the possibility of parallel execution. In the case of optimizing a recursive function, repeated calculations are carried out into an auxiliary function, the main function performing only the calculation of the invariant. When optimizing the invariant in computations over parallel lists, the calculation of the invariant moves from the function that executes over the list items to the function containing the call. The paper provides a definition of ”invariant” applied to the Pifagor language, algorithms for its optimization, and examples of program source codes, their graph representations (the program dependence graph) before and after optimization. The algorithm shown for computations over parallel lists is applicable only to the Pifagor language, because it rests upon specific data structures and the computational model of this language. However, the algorithm for transforming recursive functions may be applied to other programming languages.</p></trans-abstract><kwd-group xml:lang="ru"><kwd>функционально-потоковое параллельное программирование</kwd><kwd>язык программирования Пифагор</kwd><kwd>оптимизация кода</kwd><kwd>оптимизация циклов</kwd><kwd>оптимизация инварианта</kwd><kwd>граф программных зависимостей</kwd></kwd-group><kwd-group xml:lang="en"><kwd>data driven functional parallel programming</kwd><kwd>Pifagor programming language</kwd><kwd>code optimization</kwd><kwd>loop optimization</kwd><kwd>invariant optimization</kwd><kwd>program dependence graph</kwd></kwd-group><funding-group><funding-statement xml:lang="ru">Исследование выполняется при финансовой поддержке РФФИ в рамках научного проекта № 17-07-00288</funding-statement><funding-statement xml:lang="en">The research is supported by RFBR (research project No 17-07-00288)</funding-statement></funding-group></article-meta></front><back><ref-list><title>References</title><ref id="cit1"><label>1</label><citation-alternatives><mixed-citation xml:lang="ru">Ахо А. В., Лам М. С., Сети Р., Ульман Дж. Д., Компиляторы: принципы, технологии и инструментарий, 2-е изд., Вильямс, М., 2008, 1184 с.</mixed-citation><mixed-citation xml:lang="en">In English: Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman, Compilers: Principles, Techniques, and Tools, 2nd Edition, Addison Wesley, 2006, 1000 pp.</mixed-citation></citation-alternatives></ref><ref id="cit2"><label>2</label><citation-alternatives><mixed-citation xml:lang="ru">Дортман П. А., “Подходы к оптимизации программ в системе SFP”, Программные средства и математические основы информатики, Новосибирск, 2004, 43– 49</mixed-citation><mixed-citation xml:lang="en">Dortman P. A., “Program optimizacion in SFP”, Software tools and mathematical foundations of informatics, Novosibirsk, 2004, 43–49, (in Russian).</mixed-citation></citation-alternatives></ref><ref id="cit3"><label>3</label><citation-alternatives><mixed-citation xml:lang="ru">Легалов А. И., Матковский И. В., Кропачева М. С., Удалова Ю. В., Васильев В. М., “Технологические аспекты создания, преобразования и выполнения функциональнопотоковых параллельных программ”, Научный сервис в сети Интернет: все грани параллелизма: Труды Международной суперкомпьютерной конференции, Изд-во МГУ, M., 2013, 443–447</mixed-citation><mixed-citation xml:lang="en">Legalov A. I., Matkovsky I. V., Kropacheva M. S., Udalova Y. V., Vasiliev V. M., “Tekhnologicheskie aspekty sozdaniya, preobrazovaniya i vypolneniya funkcionalno-potokovyh parallelnyh programm”, Nauchnyy servis v seti Internet: vse grani parallelizma: Trudy Mezhdunarodnoy superkompyuternoy konferentsii, Izd-vo MGU, M., 2013, 443–447, (in Russian).</mixed-citation></citation-alternatives></ref><ref id="cit4"><label>4</label><citation-alternatives><mixed-citation xml:lang="ru">Легалов А. И., Васильев В. С., Матковский И. В., Ушакова М. С., “Инструментальная поддержка создания и трансформации функционально-потоковых параллельных программ”, Труды Института системного программирования РАН, 29:5 (2017), 165– 184</mixed-citation><mixed-citation xml:lang="en">Legalov A. I., Vasilyev V. S., Matkovskii I. V., Ushakova M. S., “Support tools for creation and transformation of functional-dataflow parallel programs”, Proceedings of ISP RAS, 29:5 (2017), 165–184, (in Russian).</mixed-citation></citation-alternatives></ref><ref id="cit5"><label>5</label><citation-alternatives><mixed-citation xml:lang="ru">Легалов А. И., “Функциональный язык для создания архитектурно-независимых параллельных программ”, Вычислительные технологии, 10:1 (2005), 71–89</mixed-citation><mixed-citation xml:lang="en">Legalov A. I., “Functional language for creating of architectural independent parallel programs”, Computational Technologies, 10:1 (2005), 71–89, (in Russian).</mixed-citation></citation-alternatives></ref></ref-list><fn-group><fn fn-type="conflict"><p>The authors declare that there are no conflicts of interest present.</p></fn></fn-group></back></article>
