Automated design of programs for .NET platform using Task Parallel Library

The necessity to improve the performance of software solving labour-intensive tasks, on the one hand, and new capabilities provided by multicore architecture of contemporary microprocessors, on the other, encourages the development of specialized software tools for automated development of parallel...

Ausführliche Beschreibung

Gespeichert in:
Bibliographische Detailangaben
Datum:2020
Hauptverfasser: Doroshenko, А.Yu., Yatsenko, O.A.
Format: Artikel
Sprache:Ukrainian
Veröffentlicht: PROBLEMS IN PROGRAMMING 2020
Schlagworte:
Online Zugang:https://pp.isofts.kiev.ua/index.php/ojs1/article/view/387
Tags: Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
Назва журналу:Problems in programming
Завантажити файл: Pdf

Institution

Problems in programming
id pp_isofts_kiev_ua-article-387
record_format ojs
resource_txt_mv ppisoftskievua/2d/34ce2519b1b4c10032bd5c50bc3f3d2d.pdf
spelling pp_isofts_kiev_ua-article-3872020-12-02T14:52:38Z Automated design of programs for .NET platform using Task Parallel Library Автоматизированное проектирование программ для платформы .NET, ис-пользующих библиотеку параллельных задач Автоматизоване проектування програм для платформи .net, що використовують бібліотеку паралельних задач Doroshenko, А.Yu. Yatsenko, O.A. automated software design; algorithm algebra; multi-threading; parallel computation; software synthesis; task parallel library; TPL UDC 004.4'24 автоматизированное проектирование программ; алгебра алгоритмов; библиотека параллельных задач; многопоточность; параллельные вычисления; синтез программ; TPL УДК 004.4'24 автоматизоване проектування програм; алгебра алгоритмів; багатопотоковість; бібліотека паралельних задач; паралельні обчислення; синтез програм; TPL УДК 004.4'24 The necessity to improve the performance of software solving labour-intensive tasks, on the one hand, and new capabilities provided by multicore architecture of contemporary microprocessors, on the other, encourages the development of specialized software tools for automated development of parallel programs for such architectures. Further progress in improving the efficiency of multithreaded programs on .NET platform is using the task parallel library TPL. The paper proposes the further development of previously developed algebra-algorithmic tools in the direction of formalized design and synthesis of C# programs using TPL. The library raises the labour productivity of developers by simplifying the procedure of adding parallelism to a program and dynamically scales parallelism level to use all available processors in the most efficient way. The proposed approach uses high-level language based on Glushkov’s system of algorithmic algebra and the method of designing syntactically correct programs that excludes the possibility of appearance of syntactic errors during scheme design. The results of the experiment consisting in executing examples of generated parallel programs on a multicore processor are given.Problems in programming 2020; 1: 17-24 Необходимость в повышении производительности программного обеспечения для решения трудоемких задач, с одной стороны, и новые возможности распараллеливания вычислений, предоставляемые многоядерной архитектурой современных микропроцессоров, с другой, побуждает к созданию специализированных инструментальных средств для разработки параллельных программ для таких архитектур. Одним из способов дальнейшего повышения эффективности многопоточных программ, разработанных на платформе .NET, является использование библиотеки параллельных задач TPL. В статье выполнено дальнейшее развитие ранее разработанного алгебро-алгоритмического инструментария в направлении формализованного проектирования и синтеза параллельных программ на языке C#, использующих средства TPL. Упомянутая библиотека повышает производительность труда разработчиков за счет упрощения процедуры добавления параллелизма в программу и динамически масштабирует степень параллелизма для наиболее эффективного использования всех доступных процессоров. В основу предлагаемого подхода положены язык систем алгоритмических алгебр Глушкова и метод конструирования синтаксически правильных программ, который исключает возможность появления синтаксических ошибок в процессе проектирования схем. Проведен эксперимент по выполнению сгенерированных с помощью разработанного инструментария примеров параллельных программ на многоядерном процессоре.Problems in programming 2020; 1: 17-24 Виконане налаштування алгебро-алгоритмічного інструментарію на формалізоване проектування та синтез паралельних програм мовою C# для платформи .NET, що використовують засоби бібліотеки паралельних задач TPL. Згадана бібліотека підвищує продуктивність праці розробників за рахунок спрощення процедури додавання паралелізму в програму та динамічно масштабує степінь паралелізму для найбільш ефективного використання усіх доступних процесорів. В основу пропонованого підходу покладені мова САА-схем, перевагою якої є простота в навчанні й використанні, а також метод конструювання синтаксично правильних програм, що виключає можливість появи синтаксичних помилок у процесі проектування схем. Проведено експеримент з виконання згенерованих за допомогою розробленого інструментарію прикладів паралельних програм на багатоядерному процесоріProblems in programming 2020; 1: 17-24 PROBLEMS IN PROGRAMMING ПРОБЛЕМЫ ПРОГРАММИРОВАНИЯ ПРОБЛЕМИ ПРОГРАМУВАННЯ 2020-02-28 Article Article application/pdf https://pp.isofts.kiev.ua/index.php/ojs1/article/view/387 10.15407/pp2020.01.017 PROBLEMS IN PROGRAMMING; No 1 (2020); 17-24 ПРОБЛЕМЫ ПРОГРАММИРОВАНИЯ; No 1 (2020); 17-24 ПРОБЛЕМИ ПРОГРАМУВАННЯ; No 1 (2020); 17-24 1727-4907 10.15407/pp2020.01 uk https://pp.isofts.kiev.ua/index.php/ojs1/article/view/387/392 Copyright (c) 2020 PROBLEMS IN PROGRAMMING
institution Problems in programming
baseUrl_str https://pp.isofts.kiev.ua/index.php/ojs1/oai
datestamp_date 2020-12-02T14:52:38Z
collection OJS
language Ukrainian
topic automated software design
algorithm algebra
multi-threading
parallel computation
software synthesis
task parallel library
TPL
UDC 004.4'24
spellingShingle automated software design
algorithm algebra
multi-threading
parallel computation
software synthesis
task parallel library
TPL
UDC 004.4'24
Doroshenko, А.Yu.
Yatsenko, O.A.
Automated design of programs for .NET platform using Task Parallel Library
topic_facet automated software design
algorithm algebra
multi-threading
parallel computation
software synthesis
task parallel library
TPL
UDC 004.4'24
автоматизированное проектирование программ
алгебра алгоритмов
библиотека параллельных задач
многопоточность
параллельные вычисления
синтез программ
TPL
УДК 004.4'24
автоматизоване проектування програм
алгебра алгоритмів
багатопотоковість
бібліотека паралельних задач
паралельні обчислення
синтез програм
TPL
УДК 004.4'24
format Article
author Doroshenko, А.Yu.
Yatsenko, O.A.
author_facet Doroshenko, А.Yu.
Yatsenko, O.A.
author_sort Doroshenko, А.Yu.
title Automated design of programs for .NET platform using Task Parallel Library
title_short Automated design of programs for .NET platform using Task Parallel Library
title_full Automated design of programs for .NET platform using Task Parallel Library
title_fullStr Automated design of programs for .NET platform using Task Parallel Library
title_full_unstemmed Automated design of programs for .NET platform using Task Parallel Library
title_sort automated design of programs for .net platform using task parallel library
title_alt Автоматизированное проектирование программ для платформы .NET, ис-пользующих библиотеку параллельных задач
Автоматизоване проектування програм для платформи .net, що використовують бібліотеку паралельних задач
description The necessity to improve the performance of software solving labour-intensive tasks, on the one hand, and new capabilities provided by multicore architecture of contemporary microprocessors, on the other, encourages the development of specialized software tools for automated development of parallel programs for such architectures. Further progress in improving the efficiency of multithreaded programs on .NET platform is using the task parallel library TPL. The paper proposes the further development of previously developed algebra-algorithmic tools in the direction of formalized design and synthesis of C# programs using TPL. The library raises the labour productivity of developers by simplifying the procedure of adding parallelism to a program and dynamically scales parallelism level to use all available processors in the most efficient way. The proposed approach uses high-level language based on Glushkov’s system of algorithmic algebra and the method of designing syntactically correct programs that excludes the possibility of appearance of syntactic errors during scheme design. The results of the experiment consisting in executing examples of generated parallel programs on a multicore processor are given.Problems in programming 2020; 1: 17-24
publisher PROBLEMS IN PROGRAMMING
publishDate 2020
url https://pp.isofts.kiev.ua/index.php/ojs1/article/view/387
work_keys_str_mv AT doroshenkoayu automateddesignofprogramsfornetplatformusingtaskparallellibrary
AT yatsenkooa automateddesignofprogramsfornetplatformusingtaskparallellibrary
AT doroshenkoayu avtomatizirovannoeproektirovanieprogrammdlâplatformynetispolʹzuûŝihbibliotekuparallelʹnyhzadač
AT yatsenkooa avtomatizirovannoeproektirovanieprogrammdlâplatformynetispolʹzuûŝihbibliotekuparallelʹnyhzadač
AT doroshenkoayu avtomatizovaneproektuvannâprogramdlâplatforminetŝovikoristovuûtʹbíblíotekuparalelʹnihzadač
AT yatsenkooa avtomatizovaneproektuvannâprogramdlâplatforminetŝovikoristovuûtʹbíblíotekuparalelʹnihzadač
first_indexed 2025-07-17T09:34:48Z
last_indexed 2025-07-17T09:34:48Z
_version_ 1850411691091689472
fulltext Інструментальні засоби і середовища програмування © А.Ю. Дорошенко, О.А. Яценко, 2020 ISSN 1727-4907. Проблеми програмування. 2020. № 1 17 УДК 004.4'24 https://doi.org/10.15407/pp2020.01.017 А.Ю. Дорошенко, О.А. Яценко АВТОМАТИЗОВАНЕ ПРОЕКТУВАННЯ ПРОГРАМ ДЛЯ ПЛАТФОРМИ .NET, ЩО ВИКОРИСТОВУЮТЬ БІБЛІОТЕКУ ПАРАЛЕЛЬНИХ ЗАДАЧ Виконане налаштування алгебро-алгоритмічного інструментарію на формалізоване проектування та синтез паралельних програм мовою C# для платформи .NET, що використовують засоби бібліотеки па- ралельних задач TPL. Згадана бібліотека підвищує продуктивність праці розробників за рахунок спро- щення процедури додавання паралелізму в програму та динамічно масштабує ступінь паралелізму для найбільш ефективного використання усіх доступних процесорів. В основу пропонованого підходу пок- ладені мова САА-схем, перевагою якої є простота в навчанні й використанні, а також метод конструю- вання синтаксично правильних програм, що виключає можливість появи синтаксичних помилок у про- цесі проектування схем. Проведено експеримент з виконання згенерованих за допомогою розробленого інструментарію прикладів паралельних програм на багатоядерному процесорі. Ключові слова: автоматизоване проектування програм, алгебра алгоритмів, багатопотоковість, бібліо- тека паралельних задач, паралельні обчислення, синтез програм, TPL. Вступ Необхідність у підвищенні продук- тивності програмного забезпечення для вирішення трудомістких задач, з одного боку, і нові можливості розпаралелювання обчислень, що надаються багатоядерною архітектурою сучасних мікропроцесорів – з іншого, спонукає до створення спеціалі- зованих інструментальних засобів для роз- робки паралельних програм для таких ар- хітектур. Головним способом підвищення продуктивності програм для згаданих пла- тформ є розпаралелювання програм із ви- користанням багатопотоковості. У попере- дніх роботах [1–5] запропоновані теорія, методологія та інструментарій для автома- тизованого проектування, синтезу та пере- творення послідовних та паралельних про- грам, що ґрунтуються на засобах алгебр алгоритмів та переписувальних правил. Зокрема, розглянуті засоби автоматизова- ної розробки програм для платформи .NET [3–5]; для розпаралелювання про- грам використовувалися стандартні засоби роботи з потоками. Одним із способів подальшого під- вищення ефективності багатопотокових програм є використання бібліотеки пара- лельних задач TPL (Task Parallel Library) [6, 7]. Мета TPL полягає у підви- щенні продуктивності праці розробників за рахунок спрощення процедури додавання паралелізму в програмні застосунки. TPL динамічно масштабує ступінь паралелізму для найбільш ефективного використання усіх доступних процесорів. Крім того, у бібліотеці паралельних задач здійснюється секціонування роботи, планування потоків у пулі, підтримка відміни, керування ста- ном і виконуються інші низькорівневі за- дачі. Використовуючи бібліотеку парале- льних задач, можна підвищити продуктив- ність коду, зосередившись на роботі, для якої призначена програма. У даній роботі запропонований по- дальший розвиток алгебро-алгоритмічного інструментарію на автоматизоване проек- тування та генерацію паралельних програм мовою C#, що використовують TPL. Про- ведено експеримент з виконання згенеро- ваних за допомогою розробленого інстру- ментарію прикладів програм на багатояде- рному процесорі. 1. Алгебро-алгоритмічні засоби проектування паралельних програм Пропонований підхід до конструю- вання програм ґрунтується на апараті сис- тем алгоритмічних алгебр (САА) та їх мо- дифікацій [1, 2] (САА-М), призначених для формалізації процесів мультиобробки, що виникають при проектуванні програм- ного забезпечення в мультипроцесорних https://doi.org/10.15407/pp2020.01.003 Інструментальні засоби і середовища програмування 18 системах. САА-М покладено в основу роз- роблених інструментальних засобів авто- матизованого проектування та генерації програм [3–5]. 1.1. Системи алгоритмічних ал- гебр. Модифіковані САА – двоосновна ал- гебра , ; GAGA Pr Op   , де Pr – мно- жина логічних умов (предикатів); Op – множина операторів; GA – сигнатура, що складається з логічних операцій (диз’юнк- ції, кон’юнкції, заперечення) та оператор- них операцій (композиції, альтернативи, циклу та ін.), що будуть розглянуті далі. На САА-М ґрунтується алгоритміч- на мова САА/1 [1, 2], призначена для бага- торівневого структурного проектування й документування послідовних та паралель- них алгоритмів і програм. Перевагою її ви- користання є подання алгоритмів у приро- дно-лінгвістичній формі. Специфікації операторів мовою САА/1 називаються САА-схемами. Предикати та оператори САА-М поділяються на базисні та складені. Базис- ні елементи вважаються атомарними, не- подільними абстракціями та пов’язані з предметною областю алгоритму, що конс- труюється. Складені умови будуються з базис- них на основі таких узагальнених булевих операцій [1]: 1) диз’юнкція: “condition 1” OR “condition 2”; 2) кон’юнкція: “condition 1” AND “condition 2”; 3) заперечення: NOT “condition 1”. Складені оператори будуються на основі базисних предикатів і операторів та операцій послідовного й паралельного ви- конання: 1) послідовне виконання операторів (композиція): “operator 1”; “operator 2”; 2) умовний оператор (альтернати- ва): IF ‘condition’ THEN “operator 1” ELSE “operator 2” END IF; 3) цикл типу while: WHILE ‘condition’ LOOP “operator” END OF LOOP; 4) цикл типу for: FOR (counter FROM start TO fin) LOOP “operator” END OF LOOP; 5) паралельне виконання n операто- рів (асинхронна диз’юнкція): PARALLEL(i = 0, ..., n) ( “operator i” ); 6) контрольна точка, яка встанов- лює значення “істина” для умови ‘condition’: CP ‘condition’; 7) синхронізатор, що виконує за- тримку обчислень доти, поки значення вказаної умови не стане істинним: WAIT ‘condition’, де ‘condition’ може бути пов’язана з умо- вами, вказаними у контрольних точках. Приклад 1. Далі як ілюстрація на- ведено фрагмент послідовної САА-схеми знаходження кількості простих чисел на відрізку [start, end]. Схема містить складе- ний оператор “SequentialPrimes (start, end)” та умову ‘Is prime (number)’, що відпові- дають підпрограмам (методам) у цільовій Інструментальні засоби і середовища програмування 19 мові програмування. У схемі виконується послідовна перевірка кожного непарного числа, чи ділиться воно на менші непарні числа. Кількість знайдених чисел зберіга- ється у змінній result. “SequentialPrimes(start, end)” ==== “Declare a variable (result) of type (long) = (0)”; FOR (number FROM start TO end – 1) IF ‘Is prime (number)’ THEN “Increase (result) by (1)” END IF END OF LOOP; “Return value (result)”; ‘Is prime (number)’ ==== IF (number = 2) THEN “Return value (true)” END IF; IF (number % 2 = 0) THEN “Return value (false)” END IF; “Declare a variable (divisor) of type (long) = (3)”; WHILE NOT (divisor >= number / 2) LOOP IF (number % divisor = 0) THEN “Return value (false)” END IF; “Increase (divisor) by (2)” END OF LOOP; “Return value (true)”; Приклад 2. Розглянемо далі пара- лельний варіант алгоритму знаходження кількості простих чисел: “StandardThreadsPrimes(start, end)” ==== “Declare a variable (result) of type (long) = (0)”; “Declare a variable (range) of type (long) = (end – start)”; “Declare a variable (numberOfThreads) of type (long)”; (numberOfThreads := “Get the number of processors”); “Declare a variable (chunkSize) of type (long) = (range / numberOfThreads)”; PARALLEL(i = 0, ..., numberOfThreads – 1) ( “Declare the list of variables (chunkStart, chunkEnd) of type (long)”; (chunkStart := start + i * chunkSize); IF (i = numberOfThreads – 1) THEN (chunkEnd := end) ELSE (chunkEnd := chunkStart + chunkSize) END IF; FOR (number FROM chunkStart TO chunkEnd – 1) IF ‘Is prime (number)’ THEN “Increase (result) by (1) interlocked” END IF END OF LOOP; CP ‘Thread (i) completed work’ ); WAIT ‘All threads completed work’; “Return value (result)”; Обчислення у даному алгоритмі здійснюються паралельними гілками, кож- на з яких обробляє свою порцію даних на ділянці [chunkStart, chunkEnd], на які порі- вну розділений відрізок [start, end]. Кіль- кість потоків дорівнює кількості доступ- них у системі процесорів. Синхронізація гілок виконується за допомогою контроль- них точок та синхронізатора. Сумісно ви- користовуваним потоками ресурсом є змінна result. На відміну від послідовного алгоритму, у паралельному для збільшення значення цієї змінної використовується оператор інкременту з блокуванням, а са- ме: “Increase (result) by (1) interlocked”. 1.2. Інструментарій автоматизо- ваної розробки програм. Розроблений ін- тегрований інструментарій проектування та синтезу програм (ІПС) ґрунтується на використанні розглянутих засобів САА-М та методу діалогового конструювання синтаксично правильних програм (ДСП- методу) [1, 2]. На відміну від традиційних синтаксичних аналізаторів, ДСП-метод орієнтований не на пошук і виправлення синтаксичних помилок, а на виключення можливості їх появи в процесі побудови алгоритму. Метод полягає у порівневому конструюванні схем зверху вниз за допо- Інструментальні засоби і середовища програмування 20 могою суперпозиції мовних конструкцій САА-М. На кожному кроці конструюван- ня система надає користувачу на вибір лише ті конструкції, підстановка яких у текст алгоритму, що проектується, не по- рушує синтаксичну правильність схеми. На основі побудованої схеми алгоритму виконується автоматична генерація тексту програми цільовою мовою програмуван- ня. Відображення операцій САА-М у текст мовою програмування подане у вигляді шаблонів і зберігається в базі даних інструментарію. На рис. 1 показано копію екрану системи ІПС із сконструйо- ваним паралельним алгоритмом StandardThreadsPrimes. Для автоматизації виконання тран- сформацій алгоритмів система ІПС може застосовуватися спільно з системою TermWare [3–5], що ґрунтується на техніці переписувальних правил. 2. Налаштування алгебро- алгоритмічних засобів на генерацію паралельних програм, що використовують бібліотеку TPL Бібліотека паралельних задач (TPL) є набором відкритих типів і API- інтерфейсів в просторах імен System.Threading і System.Threading.Tasks в рамках платформи .NET [6]. Ця бібліоте- ка дозволяє автоматично розподіляти на- вантаження застосувань між доступними процесорами в динамічному режимі, вико- ристовуючи пул потоків CLR та конструк- ції Parallel.For і Parallel.ForEach [7]. Бібліо- тека TPL виконує розподіл роботи, плану- вання потоків, управління станом та інші низькорівневі задачі. В результаті з’являється можливість максимізувати продуктивність застосувань .NET, не маю- чи справи із складнощами безпосередньої роботи з потоками. Рис. 1. Копія екрану інструментарію ІПС з побудованою схемою StandardThreadsPrimes Інструментальні засоби і середовища програмування 21 Сутність пулу потоків CLR полягає в наступному. При використанні різних коротких задач, що підлягають виконанню, можна заздалегідь створити набір потоків і потім відправляти відповідні запити, коли настає черга для їх виконання, таким чи- ном, щоб кількість цих потоків автоматич- но збільшувалася із зростанням необхідно- сті в цих потоках і зменшувалася при ви- никненні потреби в звільненні ресурсів. Для управління списком потоків в TPL пе- редбачений клас ThreadPool, який в міру необхідності зменшує і збільшує кількість потоків у пулі до максимально допустимо- го значення. Значення максимально допус- тимої кількості потоків у пулі може змі- нюватися. У випадку двоядерного проце- сора воно за умовчанням становить 1023 робочих потоків і 1000 потоків введення- виведення [8]. Для підтримки використання пулу потоків у САА-М та систему ІПС введено конструкцію, яка відправляє певну опера- цію “operator” (задачу) у чергу на вико- нання: QUEUE WORK ITEM ( “operator” ). Вказана операція виконується, коли стає доступним потік із пулу потоків. Син- хронізація потоків виконується за допомо- гою розглянутих у розділі 1 операцій кон- трольної точки та синхронізатора. Приклад 3. САА-схема паралель- ного алгоритму знаходження кількості простих чисел із використанням пулу по- токів є такою: “ThreadPoolPrimes(start, end)” ==== “Declare a variable (result) of type (long) = (0)”; “Declare a variable (chunkSize) of type (const long) = (100)”; “Declare a variable (chunks) of type (long)”; (chunks := (end – start) / chunkSize); FOR (i FROM 0 TO chunks – 1) “Declare the list of variables (chunkStart, chunkEnd) of type (long)”; (chunkStart := start + i * chunkSize); IF (i = chunks – 1) THEN (chunkEnd := end) ELSE (chunkEnd := chunkStart + chunkSize) END IF; QUEUE WORK ITEM ( FOR (number FROM chunkStart TO chunkEnd – 1) IF ‘Is prime (number)’ THEN “Increase (result) by (1) interlocked” END IF END OF LOOP; CP ‘Thread (i) completed work’ ) END OF LOOP; WAIT ‘All threads completed work’; “Return value (result)”. У даному алгоритмі вхідний відрі- зок [start, end] поділяється на ділянки роз- міром chunkSize = 100, які обробляються задачами, що заносяться у чергу на вико- нання і виконуються потоками з пулу. До алгебро-алгоритмічних засобів було включено також операцію паралель- ного циклу, яка відповідає конструкції Parallel.For бібліотеки TPL, і ітерації якої розподіляються між доступними у системі процесорами: PARALLEL FOR (counter FROM start TO fin) LOOP “operator” END OF LOOP Синхронізація потоків у рамках да- ної операції виконується автоматично. Приклад 4. САА-схема паралель- ного алгоритму знаходження простих чи- сел, що використовує паралельний цикл, наведена далі. “ParallelForPrimes(start, end)” ==== “Declare a variable (result) of type (long) = (0)”; PARALLEL FOR (number FROM start TO end) Інструментальні засоби і середовища програмування 22 IF ‘Is prime (number)’ THEN “Increase (result) by (1) interlocked” END IF END OF LOOP; “Return value (result)”. На основі розглянутих у прикла- дах 1–4 схем в системі ІПС виконана гене- рація програм мовою C# із використанням бібліотеки TPL. Зокрема, реалізації, що використовують пул потоків та паралель- ний цикл, є такими: public static long ThreadPoolPrimes( long start, long end) { long result = 0; const long chunkSize = 100; long chunks; chunks = (end - start) / chunkSize; var completed = 0; var allDone = new ManualResetEvent(initialState: false); for (long i = 0; i <= chunks - 1; i++) { long chunkStart, chunkEnd; chunkStart = start + i * chunkSize; if (i == chunks - 1) { chunkEnd = end; } else { chunkEnd = chunkStart + chunkSize; }; ThreadPool.QueueUserWorkItem( _ => { for (var number = chunkStart; number <= chunkEnd - 1; ++number) { if (IsPrime(number)) { Interlocked.Increment(ref result); }; }; if (Interlocked.Increment( ref completed) == chunks) { allDone.Set(); } }); }; allDone.WaitOne(); return result; } public static long ParallelForPrimes( long start, long end) { long result = 0; Parallel.For(start, end, number => { if (IsPrime(number)) { Interlocked.Increment(ref result); }; }); return result; } Результати виконання програм на- ведено у наступному розділі. 3. Результати експерименту Проведено експеримент з виконан- ня розроблених програм знаходження про- стих чисел SequentialPrimes, StandardThre- adsPrimes, ThreadPoolPrimes та Parallel- ForPrimes на 4-ядерному процесорі Intel Core 2 Quad Q9300, 2.5 ГГц. На рис. 2 показано графік залежності часу виконан- ня програм знаходження простих чисел на відрізку ][1,m від значення m . Як видно з графіка, час виконання програм, що вико- ристовують TPL, а саме, ParallelForPrimes та ThreadPoolPrimes практично збігається, і є суттєво меншим ніж час виконання програми StandardThreadPrimes, яка за- стосовує стандартні засоби роботи з пото- ками. Максимальне мультипроцесорне прискорення для StandardThreadPrimes становило 2.42 (ефективність використан- ня ядер процесора 0.6), тоді як для про- грам, що використовують TPL – приблиз- но 4.0 (ефективність 1.0). Сумарний час виконання програми ThreadPoolPrimes (189.6 секунд) трохи перевищив час вико- нання ParallelForPrimes (187,9 секунд). Ві- дмітимо також, що реалізація ParallelFor- Primes є більш простою та компактною. Інструментальні засоби і середовища програмування 23 Рис. 2. Залежність часу виконання програм знаходження кількості простих чисел від розміру вхідних даних m Висновки Виконане налаштування алгебро- алгоритмічного інструментарію на форма- лізоване проектування та синтез паралель- них програм мовою C#, що використову- ють засоби бібліотеки паралельних задач TPL. В основу пропонованого підходу по- кладені мова САА-схем, перевагою якої є простота в навчанні й використанні, та ме- тод конструювання синтаксично правиль- них програм, що виключає можливість по- яви синтаксичних помилок у процесі прое- ктування схем. Проведено експеримент з виконан- ня згенерованих за допомогою системи ІПС паралельних програм знаходження простих чисел на багатоядерному проце- сорі. Результати експерименту продемонс- трували кращий ступінь розпаралелювано- сті обчислень для програм, що використо- вують TPL порівняно з програмою, що ви- користовує стандартні засоби програму- вання потоків. Література 1. Андон Ф.И., Дорошенко А.Е., Жереб К.А., Шевченко Р.С., Яценко Е.А. Методы алге- браического программирования. Формаль- ные методы разработки параллельных про- грамм. Киев: Наукова думка, 2017. 440 с. 2. Андон Ф.И., Дорошенко А.Е., Цейт- лин Г.Е., Яценко Е.А. Алгебро-алгоритми- ческие модели и методы параллельного программирования. Киев: Академпериоди- ка, 2007. 631 с. 3. Жереб К.А. Программный инструмента- рий, основанный на правилах, для автома- тизации разработки приложений на плат- форме Microsoft .NET. Управляющие сис- темы и машины. 2009. № 4. С. 51–59. 4. Дорошенко А.Е., Жереб К.А., Яценко Е.А. Об оценке сложности и координации вы- числений в многопоточных программах. Проблеми програмування. 2007. № 2. С. 41–55. 5. Doroshenko A., Zhereb K., Yatsenko O. Developing and optimizing parallel programs with algebra-algorithmic and term rewriting tools. Communications in Computer and In- formation Science. Information and Commu- nication Technologies in Education, Research, Інструментальні засоби і середовища програмування 24 and Industrial Applications. Springer, Heidelberg, 2013. Vol. 412. P. 70–92. 6. Task Parallel Library (TPL): сайт. URL: https://docs.microsoft.com/uk-ua/dotnet/ standard/parallel-programming/task-parallel- library-tpl (дата звернення: 8.01.2020). 7. Microsoft Task Parallel Library* (TPL): сайт. URL: https://software.intel.com/en-us/node/ 811328 (дата звернення: 8.01.2020). 8. Васюткина И.А. Разработка клиент- серверных приложений на языке C#. Ново- сибирск: Изд-во НГТУ, 2016. 112 с. References 1. Andon, P.I. et al. (2017) Methods of algebraic programming. Formal methods of parallel program development. Kyiv: Naukova dumka. (in Russian). 2. Andon, P.I. et al. (2007) Algebra-algorithmic models and methods of parallel programming. Kyiv: Akademperiodyka. (in Russian). 3. Zhereb K.A. The rule-based software toolkit for automation of development of applications on Microsoft.NET platform. Upravl. Sistemy i Mashiny. 2009. (4). P. 51–59. (in Russian). 4. Doroshenko A.Yu., Zhereb K.A., Yatsenko O.A. On complexity and coordination of computation in multithreaded programs. Problems in programming. 2007. (2). P. 41–55. (in Russian). 5. Doroshenko, A., Zhereb, K. & Yatsenko, O. (2013) Developing and optimizing parallel programs with algebra-algorithmic and term rewriting tools. In Proc. 9th International Conference “ICT in Education, Research, and Industrial Applications” (ICTERI 2013), Revised Selected Papers. Kherson, Ukraine, 19-22 June 2013. Berlin: Springer. 412. P. 70-92. 6. Docs.microsoft.com. Task Parallel Library (TPL). [online] Available from: https://docs.microsoft.com/uk-ua/dotnet/ standard/parallel-programming/task-parallel- library-tpl [Accessed 8 Jan. 2020]. 7. Software.intel.com. Microsoft Task Parallel Library* (TPL). [online] Available from: https://software.intel.com/en-us/node/ 811328 [Accessed 8 Jan. 2020]. 8. Vasyutkina I.A. (2016) Development of client- server applications in C# language. Novosibirsk: Publishing House of Novosibirsk State Technical University. (in Russian). Одержано 11.01.2020 Про авторів: Дорошенко Анатолій Юхимович, доктор фізико-математичних наук, професор, завідувач відділу теорії комп’ютерних обчислень, професор кафедри автоматики і управлін- ня в технічних системах НТУУ “КПІ імені Ігоря Сікорського”. Кількість наукових публікацій в українських виданнях – понад 150. Кількість наукових публікацій в зарубіжних виданнях – понад 50. Індекс Гірша – 5. http://orcid.org/0000-0002-8435-1451, Яценко Олена Анатоліївна, кандидат фізико-математичних наук, старший науковий співробітник. Кількість наукових публікацій в українських виданнях – 44. Кількість наукових публікацій в зарубіжних виданнях – 14. Індекс Гірша – 2. http://orcid.org/0000-0002-4700-6704. Місце роботи авторів: Інститут програмних систем НАН України, 03187, м. Київ-187, проспект Академіка Глушкова, 40. Тел.: (044) 526 3559. E-mail: doroshenkoanatoliy2@gmail.com, oayat@ukr.net mailto:oayat@ukr.net