RU2685018C1 - Способ распараллеливания программ в вычислительной системе - Google Patents

Способ распараллеливания программ в вычислительной системе Download PDF

Info

Publication number
RU2685018C1
RU2685018C1 RU2018115087A RU2018115087A RU2685018C1 RU 2685018 C1 RU2685018 C1 RU 2685018C1 RU 2018115087 A RU2018115087 A RU 2018115087A RU 2018115087 A RU2018115087 A RU 2018115087A RU 2685018 C1 RU2685018 C1 RU 2685018C1
Authority
RU
Russia
Prior art keywords
function
data
functions
application
workflow
Prior art date
Application number
RU2018115087A
Other languages
English (en)
Inventor
Алексей Викторович Малов
Original Assignee
Открытое Акционерное Общество "Информационные Технологии И Коммуникационные Системы"
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Открытое Акционерное Общество "Информационные Технологии И Коммуникационные Системы" filed Critical Открытое Акционерное Общество "Информационные Технологии И Коммуникационные Системы"
Priority to RU2018115087A priority Critical patent/RU2685018C1/ru
Application granted granted Critical
Publication of RU2685018C1 publication Critical patent/RU2685018C1/ru

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

Предлагаемое изобретение относится к вычислительной технике и, в частности, к области параллельных вычислений и может быть использовано для решения задач интеллектуального анализа данных.
Уровень техники
Реализация параллельного выполнения вычислений в общем случае является сложной задачей. В большинстве случаев распараллеливание для выполнения задач осуществляется применительно к конкретному приложению и конкретной задаче. Такой подход является весьма трудоемким, и при этом может быть малоэффективным, по причине ошибок, которые может допустить разработчик при осуществлении.
Особенно это характерно для задач интеллектуального анализа данных (ИАД). Такой вид анализа данных обычно предполагает обработку больших объемов данных, что, соответственно, требует использования значительных вычислительных ресурсов для обеспечения приемлемого времени выполнения анализа. Поэтому актуальным направлением в разработке и реализации алгоритмов ИАД является ориентация на выполнение алгоритмов анализа в распределенной вычислительной среде, которое должно поддерживаться поддерживается методами реализации алгоритмов ИАД с целью их распараллеливания.
Известен способ автоматического распараллеливания цикловых областей в алгоритмической части программы (патент РФ №2411569, приоритет от 29.01.2009 г.), позволяющий максимизировать количество параллельных циклов путем применения межпроцедурных и внутрипроцедурных оптимизаций, характеризующийся встраиванием в программу динамических проверок на эффективность распараллеливания, включающий следующие шаги:
• предварительно, на этапе промежуточного представления программы при выполнении преобразований строят любыми известными способами, а если уже построены, то используют, по крайней мере, следующие аналитические структуры данных: граф потока управления, дерево доминаторов, дерево циклов, граф потока данных;
• выполняют подстановки промежуточного представления процедур в места вызовов;
• выполняют межпроцедурный анализ потока данных, для обнаружения эквивалентных операций;
• выполняют анализ потока данных, предпочтительно способом нумераций значений;
• выполняют анализ переменных цикла на инвариантность и индуктивность;
• выполняют анализ операций доступа в массивы,
• строят индексы доступа в массивы в виде канонических форм сумм произведений;
• выполняют слияния циклов;
• выполняют вынос инвариантных условий;
• изменяют порядок обхода итерационного пространства циклов,
• выполняют анализ параллельных циклов,
причем при выполнении межпроцедурного анализа потока данных применяют метод, чувствительный к контексту и чувствительный к потоку управления,
причем подстановку осуществляют в цикловых областях для получения максимального количества циклов, не содержащих вызовы процедур,
причем способ нумераций значений дополнительно проверяют анализом, уточняющим эквивалентность для операций доступа в память,
причем при построении канонических форм используют результаты анализа потока данных методом нумераций значений,
причем при анализе параллельных циклов дерево циклов
• обходят рекурсивно от корневого узла с проверкой на возможность распараллеливания текущего цикла,
• при этом выполняют следующие виды анализа:
Figure 00000001
анализ структуры цикла на наличие единственного выхода, поскольку
Figure 00000002
распараллеливать возможно только циклы с одним выходом, управление которым осуществляется индуктивной переменной с инвариантными верхней и нижней границами, а также инвариантным шагом;
Figure 00000003
анализ на наличие редукций цикла, распознанные редукции исключают при анализе межитерационных зависимостей;
Figure 00000004
анализ межитерационных зависимостей в цикле, преимущественно с помощью решения диофантовых уравнений;
Figure 00000002
анализ массивов на локальность,
причем для параллельных циклов осуществляют построение копии цикла и динамически осуществляют проверку на время исполнения итераций и сравнение этого времени с затратами ресурсов на запуск параллельного цикла,
причем для параллельных циклов выполняют построение операций, которые обеспечат параллельное исполнение циклов, при параллельном исполнении выполняют запуск нескольких потоков, каждый из которых выполняет часть итераций цикла,
причем тело параллельных циклов выделяют в новую процедуру, параметрами которой назначают нелокальные данные итераций цикла, а локальные структуры данных итераций цикла назначают локальными структурами данных созданной процедуры.
Известный способ относится к области компьютерного программирования и, в частности, к области оптимизирующей компиляции - преобразованию текста программы в машинные коды.
Оптимизирующий компилятор выполняет это преобразование так, чтобы достичь наилучшего показателя для получаемого кода по некоторому критерию. Чаще всего этим критерием является максимальная скорость исполнения программы на целевой архитектуре (платформе).
Однако, известный способ имеет недостатки.
Для использования данного способа разработчик должен иметь заранее реализованные компиляторы и среды выполнения программ, при разработке которых использовался данный способ. При этом подобные компиляторы редко реализованы заранее, могут не иметь совместимости с нужными аппаратными и программными платформами. Реализация компиляторов в соответствии с данным способом является отдельной специальной задачей, требующей соответствующих навыков и опыта.
Известный способ позволяет увеличить быстродействие программ на отдельной вычислительной машине. Однако, ИАД связан с анализом больших объемов данных, что, соответственно, требует использования значительных вычислительных ресурсов для обеспечения приемлемого времени выполнения анализа. По данным причинам актуальным направлением в разработке и реализации алгоритмов ИАД является ориентация на выполнение алгоритмов анализа в распределенной вычислительной среде, поэтому для алгоритмов ИАД одной вычислительной машины недостаточно.
Известен также способ выполнения обработки данных в среде распределенной и параллельной обработки (патент США №9612883, приоритет от 06.12.2013 г.), который также иногда называют MapReduce.
Способ включает:
• в совокупности соединенных между собой вычислительных систем, каждая из которых имеет один или несколько процессоров и память:
Figure 00000005
выполнение множества рабочих процессов;
Figure 00000006
выполнение не зависящего от приложения контрольного процесса в совокупности соединенных между собой вычислительных систем, для:
Figure 00000007
определение, для входных файлов, множества задач обработки данных, включая множество данных, специфицирующих задачи отображения из входных файлов, которые будут обработаны [для получения] промежуточных значений данных, и множества задач сокращения, определяющие промежуточные значения данных, которые будут переработаны в финальные выходные данные;
Figure 00000008
присвоение задачам обработки данных статуса незанятых в рабочих процессах:
Figure 00000009
использование совокупности не зависящих от приложения функций отображения, выполняемых 1-м подмножеством из множества рабочих процессов, чтобы считывать части входных файлов, содержащих данные, и сформировать промежуточные значения данных посредством применения, по крайней мере, одной, определенной пользователем, специализированной приложением операции отображения к данным;
• сохранение промежуточных значений данных в совокупности промежуточных структур данных, распределенных среди множества соединенных между собой вычислительных систем; и
• использование совокупности не зависящих от приложения функций сокращения, отличных от совокупности не зависящих от приложения функций отображения, чтобы сформировать финальные выходные данные посредством применения, по крайней мере, одной, определенной пользователем, специализированной приложением операции сокращения с промежуточными значениями данных, причем совокупность не зависящих от приложения функций сокращения выполняется 2-м подмножеством из множества рабочих процессов;
причем совокупность не зависящих от приложения функций отображения и совокупность не зависящих от приложения функций сокращения независимы от специализированных приложением операторов и операций, включая, по крайней мере, одну определенную пользователем, специализированную приложением операцию отображения и, по крайней мере, одну, определенную пользователем, специализированную приложением операцию сокращения.
Способ может также включать применение операции разделения, по крайней мере, к подмножеству промежуточных значений данных, причем для каждого соответствующего промежуточного значения данных, по крайней мере, в подмножестве промежуточных значений данных, операция разделения определяет соответствующую промежуточную структуру данных множества промежуточных структур данных, в которых сохраняются соответствующее промежуточное значение данных.
Способ может также предусматривать, что соответствующая специализированная приложением операция отображения включает специализированную приложением операцию объединения для объединения начальных значений, сформированных посредством выполнения соответствующей специализированной приложением операцией отображения, так чтобы сформировать промежуточные значения данных.
В ходе выполнения способа количество задач отображения превышает значение множества процессов, которым контролирующий процесс может назначить задачи отображения; и контролирующий процесс поддерживает информацию о состоянии относительно задач отображения, ждущих назначения в рабочий процесс.
Описанный способ принят за прототип.
Основным недостатками известного способа являются то, что известный способ подходит только для некоторых задач ИАД. При этом существуют алгоритмы ИАД, например, Apriori, PageRank и др., для которых данный способ не походит, так как алгоритмы не обладают списочным гомоморфизмом (Gorlatch S. Extracting and Implementing List Homomorphisms in Parallel Program Development // Science of Computer Programming, 1999, v. 33, pp. 1-27; Dean J., Ghemawat S. MapReduce: Simplified Data Processing on Large Clusters // In Proceedings of the USENIX Symposium on Operating SystemsDesign & Implementation (OSDI), 2004, pp. 137-147; Harmelen R, Kotoulas S., Oren E., Urbani J. Scalable Distributed Reasoning using Map Reduce // Proceedings of the International Semantic Web Conference, 2009, v. 5823, pp. 293-309).
Алгоритмами не обладающие списочным гомоморфизмом являются алгоритмы, которые дают разные результаты, в случае, если применять их к полному набору данных, и в случае, если применять алгоритм к частям исходных данных с последующим объединением результатов. Если разделить исходные данные алгоритма ИАД, не обладающего списочным гомоморфизмом, на части, и далее применить алгоритм отдельно к полученным частям, а после получения результатов для отдельных частей исходных данных объединить полученные результаты, то финальные результаты будут некорректными (Gibbons J. The Third Homomorphism Theorem // Journal of Functional Programming, 1996, v. 6, pp. 657-665).
Раскрытие сущности изобретения
Техническим результатом является расширение класса решаемых задач, включая задачи (алгоритмы), которые не обладают списочным гомоморфизмом.
Для этого предлагается способ распараллеливания программ в вычислительной системе, включающей совокупность соединенных между собой систем, каждая из которых имеет один или несколько процессоров и память, причем каждая система содержит установленное на каждую систему и сконфигурированное программное обеспечение, выполненное с возможностью
• передачи данных из множества рабочих процессов в главный рабочий процесс,
• приема данных в главном рабочем процессе из множества рабочих процессов,
• определения номера рабочего процесса в системе,
• выполнения множества рабочих процессов, в том числе главного рабочего процесса
• передачи рабочих процессов в системы для выполнения множества рабочих процессов, в том числе и главного рабочего процесса
• считывания из входных файлов или баз данных множества исходных данных, специфицирующих задачу,
• сохранения промежуточных и финальных значений данных;
способ заключается в том, что
• получают входные данные и приложение для их обработки,
• формируют функции отображения, преобразующие исходные данные D из файлов или баз данных в набор списочных структур данных, содержащих списки атрибутов и списки векторов;
• осуществляют декомпозицию приложения в последовательность обособленных функций, реализующих шаги приложения и представляющих собой функции без последействия, причем каждая отдельная функция выполнена с возможностью
Figure 00000010
считывать модели знаний и структуры данных,
Figure 00000011
выполнять заданные преобразования;
• формируют специализированную приложением функцию разбиения исходных данных на части для работы одного из множества рабочих процессов;
• формируют специализированную приложением функцию объединения результатов работы множества рабочих процессов в единые промежуточные модели знаний в виде набора списочных структур данных;
• формируют специализированную приложением функцию для формирования финальной выходной модель знаний из промежуточной модели знаний, полученной на последнем этапе;
• формируют функцию приема данных главного рабочего процесса, выполненную с возможностью принимать данные из множества рабочих процессов;
• формируют функцию главного рабочего процесса, выполненную с возможностью запускать выполнение
Figure 00000012
функции разбиения исходных данных на части;
Figure 00000012
обособленных функций на множестве рабочих процессов;
Figure 00000012
функции объединения;
Figure 00000012
функцию приема данных главного рабочего процесса;
• формируют функцию рабочих процессов, выполненную с возможностью запускать на выполнение
о обособленные функции в данном рабочем процессе;
Figure 00000012
функцию передачи результатов работы обособленных функций в главный рабочий процесс;
• запускают выполнение функцию главного рабочего процесса, с помощью которой выполняет следующие действия
Figure 00000012
преобразуют с помощью функции отображения исходные данные D из файлов или баз данных в набор списочных структур данных, содержащих списки атрибутов и списки векторов;
Figure 00000012
передают исходные данные D и входную модель знаний М на первом шаге в первую обособленную функцию, реализующую шаг приложения;
Figure 00000012
выполняют последовательность обособленных функций, реализующих шаги приложения, начиная с первой, на множестве рабочих процессов, причем на каждом шаге
Figure 00000013
выполняют заданные преобразования в обособленной функции;
Figure 00000013
передают после завершения работы обособленной функции промежуточные структуры данных из множества рабочих процессов в главный рабочий процесс;
Figure 00000014
принимают данные из множества рабочих процессов в главном рабочем процессе;
Figure 00000014
объединяют с помощью функций объединения результаты работы множества рабочих процессов в единую промежуточную модель знаний;
Figure 00000014
передают исходные структуры данных и единую промежуточную модель знаний в следующую обособленную функцию;
Figure 00000015
после окончания работы всех обособленных функций объединяют полученные на последнем шаге единые промежуточные модели знаний в финальную выходную модель знаний;
Figure 00000015
получают финальную выходную модель знаний.
Предлагаемый способ подразумевает подход к распараллеливанию программ на функциональных языках программирования, реализующих алгоритмы ИАД. Способ подразумевает использование функциональных языков программирования. Использование функциональных языков программирования снижает вероятность ошибки пользователя, по сравнению с реализацией на императивных языках. Это достигается, в том числе, благодаря отсутствию при функциональном подходе потенциальных ошибок, связанных с переменными и присваиванием им новых значений. При этом программы на функциональных языках являются менее эффективными по критерию быстродействия (Себеста Роберт У. Основные концепции языков программирования, 5-е изд.: М.: Изд. дом «Вильяме», 2001 г., 672 с.).
Способ предполагает разделение программ на функциональных языках, реализующих алгоритмы ИАД, на отдельные шаги, которые представляют собой обособленные функции без последействия, каждая из которых может выполняться в параллельном режиме. Выполнение в параллельном режиме каждой отдельной обособленной функции, а не всего алгоритма сразу, позволяет, в отличие от MapReduce, применять данный способ для распараллеливания алгоритмов, которые не обладают списочным гомоморфизмом.
Алгоритмы ИАД на входе принимают набор входных данных, а результатом их работы является финальная выходная модель знаний. Таким образом, каждый алгоритм ИАД задает функцию, так как получает на вход набор входных данных и выдает результат применения алгоритма к входным данным в виде финальной выходной модели знаний. Следовательно, алгоритм ИАД можно представить в виде функции, которой в качестве аргумента передается набор входных данных D, а возвращаемым значением является построенная финальная выходная модель знаний М.
В ходе работы алгоритмы ИАД анализируют набор данных и строят промежуточную модель знаний на каждом шаге. Построенная промежуточная модель знаний передается на следующий этап. Таким образом, каждый шаг алгоритма ИАД должен принимать набор данных и промежуточную модель знаний в качестве входных аргументов. Результатом работы шага является новая промежуточная модель знаний.
Таким образом, алгоритм ИАД можно представить в виде последовательности вызовов функций без последействия, представляющих шаг алгоритма. Далее такие функции будут называться обособленными функциями, имеющие вид
Figure 00000016
где Fi - обособленная функция, реализующая i-й шаг алгоритма ИАД, принимает на вход набор исходных данных (D) алгоритма ИАД и промежуточную модель знаний.
Чистой функцией называется детерминированная функция без последействия. Детерминированной функцией называется функция, результат которой зависит только от входных параметров. Функцией без последействия называется функция, которая не изменяет состояния программы, т.е. не изменяет переменные и другие области памяти, значения которых могут обрабатываться после завершения выполнения функции.
При этом обособленная функция F1 реализующая 1-й шаг алгоритма ИАД, принимает набор данных и пустую модель знаний в качестве входных аргументов.
Результатом работы функции является промежуточная модель знаний, которая используется на следующем шаге, а результатом работы функции Fn является финальная выходная модель знаний.
При этом при реализации алгоритма ИАД одна и та же обособленная функция или группа обособленных функций может вызываться рекурсивно до достижения определенного условия, в зависимости от алгоритма.
Ниже приведен пример определения обособленной функции, которая принимает на вход набор исходных данных (D) алгоритма ИАД и промежуточную модель знаний. Здесь и далее для примеров будет использоваться нотация языка функционального программирования Common Lisp
[статья по адресу: http://www.lispworks.com/documentation/HyperSpec/Front/Contents.htm].
Промежуточная модель знаний в примере обозначена параметром функции с именем MP.
(defun <имя_функции> (D MP)
<тело_функции>)
В примере выше <имя_функции> - это имя обособленной функции. D и MP -входные параметры. В языке Common Lisp в определении функции отсутствуют возвращаемые результаты, при этом возвращаемые результаты определяются телом функции. В примере <тело_функции> - реализации тела функции, которое формирует промежуточную модель знаний.
Использование функционального подхода, и, соответственно, чистых функций позволяет обеспечить отсутствие потенциальных ошибок, связанных с переменными и присваиванием им новых значений. На результат работы функций влияют только входные параметры, что исключает появление ошибок, которые трудно обнаружить. Подобные ошибки могут быть связанны, например, с присваиваниями значений одной и той же переменной в различных участках кода.
Кроме того, повышается удобство тестирования и отладки программы. На результат работы функций влияют только входные параметры, поэтому для тестирования функций достаточно проверить значения функций при различных входных параметрах.
Набор исходных данных (D) алгоритма ИАД нужно представить в виде списочных структур данных функционального языка программирования: списка атрибутов и списка векторов. На языке Common Lisp набор исходных данных (D) можно представить в виде структуры, содержащей список атрибутов (attributes_list), список векторов (vectors_list) и список всех возможных классов целевого атрибута (class_list):
Figure 00000017
Список из K атрибутов attributes_list можно определить следующим образом (defparameter attributes_list (list attr0, …, attrK)),
где attr<i> - список возможных значений i-ro атрибута.
Ниже приведен пример для атрибута 0, который может иметь пять значений:
(defparameter attr0 (list 0.5 3.0 4.5 5.4 2.5))
Список из L векторов можно определить следующим образом
(defparameter vectors list (list vector0, vector 1, vectorL))
где vector<i> - список конкретных значений каждого атрибута и значения целевого атрибута.
Значение i-ro атрибута располагается на i-м месте в списке. Если значение целевого атрибута неизвестно, то в языке Common Lisp оно может быть задано символом nil. Значение целевого атрибута можно расположить в конце списка. Ниже приведен пример для вектора 0, в котором первые четыре значения соответствуют значениям атрибутов, а последнее значение соответствует значению целевого атрибута:
(defparameter vector0 (list 1.5 4.0 4.2 5.5 8.5))
Структура промежуточной (MP) и финальной выходной модели знаний (М) зависит от алгоритма и функции, реализующей ИАД. Промежуточную (MP) и финальную выходную модель знаний (М) удобно представлять в виде списочных структур данных. Например, распространенной среди алгоритмов ИАД является модель знаний в виде деревьев решений. Для деревьев решений узлы дерева и соответствующие им множества, можно представить в виде списков. В общем виде промежуточную модель знаний можно представить в виде структуры, содержащей список параметров текущего шага step_list и списка правил rules_list:
Figure 00000018
Список параметров текущего шага step_list может содержать, например, список атрибутов, которые еще не использовались для построения модели знаний, и, следовательно, должны быть обработаны на следующих шагах. Список правил rules_list представляет собой часть сформированной на данный момент финальной выходной модели знаний.
Предложенный подход предполагает введение функций циклов по векторам и атрибутам, так как в алгоритмах ИАД данные циклы являются достаточно частой операцией. Следует отметить, что при функциональном подходе для организации повторений допустима только рекурсия. Использование указанных встроенных функций должно обеспечить однотипность реализации и снизить вероятность ошибки при реализации циклов, так как функционал для циклов по векторам или атрибутам реализуется один раз, а далее должен использоваться в качестве шаблона.
Приложения ИАД в основном характеризуются параллелизмом данных. В этом случае требуется добавление функционала разбиения данных и объединения результатов, полученных в разных рабочих процессах. Выполнение в параллельном режиме каждой отдельной обособленной функции, а не всего алгоритма сразу, позволяет, в отличие от MapReduce, применять данный способ для распараллеливания алгоритмов, которые не обладают списочным гомоморфизмом.
Для параллельного выполнения приложения подход целесообразно добавление функций, которые позволит распараллеливать приложение для системы MPI (Message Passing Interface; статья по адресу: http://parallel.ru/tech/tech_dev/mpi.html). При этом правильно сконфигурированная MPI система, установленная на совокупность соединенных между собой систем, каждая из которых имеет один или несколько процессоров и память, обладает возможностью
• передачи данных из множества рабочих процессов в главный рабочий процесс,
• приема данных в главном рабочем процессе из множества рабочих процессов,
• определения номера рабочего процесса в системе,
• выполнения множества рабочих процессов, в том числе главного рабочего процесса
• передачи рабочих процессов в системы для выполнения множества рабочих процессов, в том числе и главного рабочего процесса
В число функций, которые нужно реализовать для параллельного выполнения приложения входят:
• специализированная приложением функция разбиения исходных данных на части для работы одного из множества рабочих процессов;
• специализированная приложением функция объединения результатов работы множества рабочих процессов в единые промежуточные модели знаний в виде набора списочных структур данных;
• специализированная приложением функция для формирования финальной выходной модель знаний из промежуточной модели знаний, полученной на последнем этапе;
• функция приема данных главного рабочего процесса, выполненная с возможностью принимать данные из множества рабочих процессов;
• функция рабочего процесса, выполненная с возможностью запускать выполнение
Figure 00000019
обособленных функций в данном рабочем процессе;
Figure 00000019
функцию передачи результатов работы обособленных функций в главный рабочий процесс;
• функция главного рабочего процесса, выполненная с возможностью запускать выполнение
Figure 00000019
функции разбиения исходных данных на части;
Figure 00000019
функции объединения;
Figure 00000019
функцию приема данных главного рабочего процесса.
Исходные данные D из файлов или баз данных (БД) должны быть считаны главным рабочим процессом в набор списочных структур данных, содержащих списки атрибутов и списки векторов. Функционалом для считывания из входных файлов или БД множества исходных данных, специфицирующих задачу, должна обладать сконфигурированная MPI система. Так как главный рабочий процесс может быть запущен на любой машине, входящей в систему, то доступ к файлам или БД должен быть у любой машины в системе.
С целью упрощения реализации для некоторых случаев каждый рабочий процесс может считать самостоятельно входные данные из файлов или БД. При этом рабочий процесс может считать не все данные, а только ту часть данных, которая предназначена ему для обработки. Диапазон данных для обработки рабочий процесс может получить от главного рабочего процесса, а также может вычислить его с помощью функции разбиения исходных данных на части, в зависимости от удобства реализации.
При запуске рабочего процесса в системе ему присваивается порядковый номер. Каждый рабочий процесс имеет свой порядковый номер. Каждый процесс может отличить является ли он главным или рабочим процессом по порядковому номеру, порядковый номер главного процесса должен быть изначально задан и соответствующим образом интерпретироваться. На одной машине, входящей в совокупность соединенных между собою систем, может быть запущено несколько рабочих процессов, в зависимости от числа процессорных ядер на машине.
Осуществление изобретения
Реализация предложенного способа может быть осуществлена в вычислительной системе, работающей, например, под управлением операционной системы Linux.
Для реализации способа достаточно реализовать выполнение предложенных операций на каком-либо языке функционального программирования, например, на языке Common Lisp (статья по адресу: http://www.lispworks.com/ documentation/HyperSpec/Front/Contents.htm).
Реализовать действия предложенного способа в составе программы или функции может специалист в области программирования (программист), зная выполняемые действия.
В качестве примера рассмотрим алгоритм С4.5 (Hssina В. et al. A comparative study of decision tree ID3 and C4.5, статья по адресу:
http://saiconference.com/Downloads/SpecialIssueNolO/Paper_3-A_comparative_study_of_decision_tree_ID3_and_C4.5.pdf;
Деревья решений - C4.5 математический аппарат. Часть 1, статья по адресу:
https://basegroup.ru/community/articles/math-c45-partl)
Для реализации использовалась ОС Linux, Steel Bank Common Lisp (SBCL) v1.0.29.11, MPICH (статья по адресу: http://www.mpich.org/downloads/). Алгоритм базируется на теоретико-информационном подходе и является усовершенствованной версией алгоритма ID3 (Iterative Dichotomizer). Алгоритм включает четыре основных шага:
• формируется корневой узел дерева, с которым ассоциируется все множество векторов V из набора исходных данных D; в (2) множество векторов V задает vectors_list;
• для каждого формируемого узла дерева решений и ассоциированного с ним множества векторов Vi выбирается атрибут А для разбиения;
• если выбранный атрибут А принимает п значений А1, А2 … A1n, то выбранный атрибут А разбивает множество векторов Vi на подмножества Vi1, Vi2 … Vin, при А равном, соответственно, А1, А 2 … An;
• шаги повторяются до тех пор, пока в каждом строящемся узле дерева не окажутся векторы, соответствующие одному классу, либо пустое множество векторов.
На втором шаге для выбора наиболее подходящего атрибута используется следующий критерий:
Figure 00000020
где А - атрибут по которому производится разбиение на текущем шаге;
n - количество значений независимого атрибута А;
t - количество значений зависимого атрибута - классов;
cj - класс, для которого производится вычисление;
freq(cj, Vi) - количество векторов из множества Vi, относящихся к классу cj;
Vir - подмножество данных Vi, у которых атрибут А имеет r-е значение;
Vi - подмножество векторов ассоциированных с текущим узлом дерева.
Здесь и далее для примеров будет использоваться нотация языка функционального программирования Common Lisp (статья по адресу:
http://www.lispworks.com/documentation/HyperSpec/Front/Contents.htm).
Алгоритм С4.5 может быть представлен в виде:
Figure 00000021
Figure 00000022
где
recursion_build_tree - рекурсивная функция, которая на последнем шаге возвращает финальную модель знаний в виде дерева решений. Может быть представлена, как композиция обособленных функций (1):
Figure 00000023
Функция recursion_build_tree на первом шаге строит корневой узел дерева, с которым ассоциируется все множество векторов V из набора исходных данных D. Выставляет корневой узел в качестве обрабатываемого узла.
Далее построенная промежуточная модель знаний MP передается в качестве параметра функциям из композиции для выполнения шага. После выполнения данные функции возвращают промежуточную модель знаний MP. Из step_list, определенном в (3), функция recursion_build_tree получает список вычисленных критериев (4) для каждого атрибута, выбирает наиболее подходящий атрибут А, добавляет соответствующие значениям атрибута А узлы дерева решений к промежуточной модели MP. Функция recursion_build_tree проверяет, существуют ли узлы дерева решений в промежуточной модели, для которых требуется раскрытие с помощью функции is_finished(D MP). Если существуют, то производится рекурсивный вызов функции recursion build tree. Если такие узлы отсутствуют, то функция recursion_build_tree возвращает в качестве результата финальную выходную модель знаний М. В качестве дополнительного входного параметра функция имеет флаг is_first_call, сообщающий является ли данный вызов функции первым или рекурсивным.
Функция for_all_attributes_cycle - обособленная функция, которая выполняет итерацию по атрибутам,
Функция calculate_attr_gain - обособленная функция, которая вычисляет Gain {А) из (4) для обрабатываемого атрибута A. Выполняет итерацию по возможным значениям атрибута А для вычисления InfoA(Vj) из (4), а также, выполняет итерацию по всем классам для вычисления Info(Vi) из (4),
Функция build_final_model - специализированная приложением функция для формирования финальной выходной модель знаний из промежуточной модели знаний, полученной на последнем этапе.
Входные данные (D) для алгоритма С4.5 можно представить в виде таблицы, каждая строка которой содержит значения входных атрибутов и соответствующий им класс целевого атрибута.
Для реализации алгоритма С4.5 введем следующее представление для входных данных
Figure 00000024
где attributes list - список атрибутов;
vectors list - список векторов;
class list - список всех возможных классов целевого атрибута.
Финальная выходная модель знаний (М) для алгоритма С4.5 представляется в виде дерева решений. Промежуточная модель знаний (MP) для алгоритма С4.5 представляется в виде неполного дерева решений rules_list в (3). Также промежуточная модель знаний включает список обработанных на данный момент атрибутов, список вычисленных на последнем шаге критериев (4) для атрибутов, обрабатываемый на данном шаге узел дерева решений. Данная часть промежуточной модели обозначена как step_list в (3). Дерево решений можно представить в виде структуры вложенных списков. Первый элемент в списке содержит номер атрибута, которому соответствует данный узел, все следующие элементы являются вложенными списками, причем первым элементом в списках является значение атрибута, а вторым элементом является вложенный список, который аналогичным образом описывает узел, соответствующий данному значению атрибута:
Figure 00000025
где node_root - корневой узел дерева.
Корневой узел дерева в свою очередь можно представить в виде:
Figure 00000026
где attr_N - номер атрибута, который был выбран для построения корневого узла дерева решений, данный атрибут имеет K значений;
attr_N_value_1 - значения атрибута, соответствующее следующему узлу дерева node_1;
attr_N_value_K - значения атрибута, соответствующее следующему узлу дерева node_K.
Узлы второго яруса дерева решений node__1 … node_K определяются аналогично узлу node_root. Таким же образом определяются узлы всех последующих ярусов дерева решений.
Для параллельного выполнения алгоритма реализацию алгоритма С4.5 в (5) и (6) требуется добавление функционала разбиения данных и объединения результатов, полученных в разных рабочих процессах.
Рассмотрим вариант параллельного алгоритма, выполняющего параллельную обработку по атрибутам, реализованного с применением предложенного подхода:
Figure 00000027
где recursion_build_tree_parall - реализация функции recursion_build_tree для параллельного выполнения алгоритма с распараллеливанием по атрибутам.
В предложенном подходе функция recursion_build_tree_parall представляет собой функцию главного рабочего процесса.
Figure 00000028
где
mpi_work_process_funct - функция рабочего процесса. Получает на вход часть исходных данных, предназначенную для определенного рабочего процесса. Определяет номер процесса в MPI системе, и если номер процесса не является номером главного процесса, то запускает на выполнение обособленные функции в данном рабочем процессе. В конце своей работы передает результаты работы обособленных функций в главный рабочий процесс;
mpi_divide_attr_parall - специализированная приложением функция разбиения исходных данных на части для работы одного из множества рабочих процессов. Функция выполняет разделение списка атрибутов на части, предназначенные для каждого рабочего процесса, на основании номера рабочего процесса MPI системе, на котором она в данный момент выполняется и в качестве результат возвращает часть исходных данных D, которые должны быть в текущем рабочем процессе.
mpi_merge_attr_parall - специализированная приложением функцию объединения результатов работы множества рабочих процессов в единую промежуточную модели знаний в виде структуры (3).
Если достигнут конец алгоритма, то функция recursion_build_tree_parall формирует и возвращает в качестве результата финальную выходную модель знаний М в виде структуры (7).
Функция рабочего процесса может быть определена в виде:
Figure 00000029
где for_all_attributes_cycle и for_all_attributes_cycle - рассмотренные ранее обособленные функции.
В примере для упрощения отсутствует функционал для передачи результатов работы обособленных функций в главный рабочий процесс.
Таким образом, рассмотрена реализация распараллеливания по атрибутам алгоритма С4.5 на основе предложенного подхода.
Если применить концепцию MapReduce без доработок к последовательному варианту (5) алгоритма С4.5 для распараллеливания по атрибутам, то на фазе Map исходный набор атрибутов будет разбит на N частей, где N это количество рабочих процессов в системе. Каждая из N частей предназначена для обработки одним процессом на фазе Reduce. После завершения фазы Reduce будет получено N деревьев решений, при этом отсутствует возможность получить из этих N деревьев решений финальную выходную модель знаний, так как алгоритма С4.5 не обладает списочным гомоморфизмом. Отсюда следует, что применение концепции MapReduce к данному алгоритму требует дополнительных методов. Таким образом, предложенный способ позволяет получить корректный результат, а применение концепции MapReduce к данному алгоритму напрямую - не позволяет.

Claims (35)

  1. Способ распараллеливания программ в вычислительной системе, включающей совокупность соединенных между собой систем, каждая из которых имеет один или несколько процессоров и память, причем каждая система содержит установленное на каждую систему и сконфигурированное программное обеспечение, выполненное с возможностью
  2. передачи данных из множества рабочих процессов в главный рабочий процесс,
  3. приема данных в главном рабочем процессе из множества рабочих процессов,
  4. определения номера рабочего процесса в системе,
  5. выполнения множества рабочих процессов, в том числе главного рабочего процесса,
  6. передачи рабочих процессов в системы для выполнения множества рабочих процессов, в том числе и главного рабочего процесса, считывания из входных файлов или баз данных множества исходных данных, специфицирующих задачу,
  7. сохранения промежуточных и финальных значений данных;
  8. способ заключается в том, что
  9. получают входные данные и приложение для их обработки, формируют функции отображения, преобразующие исходные данные D из файлов или баз данных в набор списочных структур данных, содержащих списки атрибутов и списки векторов;
  10. осуществляют декомпозицию приложения в последовательность обособленных функций, реализующих шаги приложения и представляющих собой функции без последействия, причем каждая отдельная функция выполнена с возможностью
  11. считывать модели знаний и структуры данных,
  12. выполнять заданные преобразования;
  13. формируют специализированную приложением функцию разбиения исходных данных на части для работы одного из множества рабочих процессов;
  14. формируют специализированную приложением функцию объединения результатов работы множества рабочих процессов в единые промежуточные модели знаний в виде набора списочных структур данных;
  15. формируют специализированную приложением функцию для формирования финальной выходной модели знаний из промежуточной модели знаний, полученной на последнем этапе;
  16. формируют функцию приема данных главного рабочего процесса, выполненную с возможностью принимать данные из множества рабочих процессов;
  17. формируют функцию главного рабочего процесса, выполненную с возможностью запускать выполнение:
  18. функции разбиения исходных данных на части;
  19. обособленных функций на множестве рабочих процессов;
  20. функции объединения;
  21. функции приема данных главного рабочего процесса;
  22. формируют функцию рабочих процессов, выполненную с возможностью запускать на выполнение:
  23. обособленные функции в данном рабочем процессе;
  24. функцию передачи результатов работы обособленных функций в главный рабочий процесс;
  25. запускают на выполнение функцию главного рабочего процесса, с помощью которой выполняют следующие действия:
  26. преобразуют с помощью функции отображения исходные данные D из файлов или баз данных в набор списочных структур данных, содержащих списки атрибутов и списки векторов;
  27. передают исходные данные D и входную модель знаний М на первом шаге в первую обособленную функцию, реализующую шаг приложения;
  28. выполняют последовательность обособленных функций, реализующих шаги приложения, начиная с первой, на множестве рабочих процессов, причем на каждом шаге:
  29. выполняют заданные преобразования в обособленной функции;
  30. передают после завершения работы обособленной функции промежуточные структуры данных из множества рабочих процессов в главный рабочий процесс;
  31. принимают данные из множества рабочих процессов в главном рабочем процессе;
  32. объединяют с помощью функций объединения результаты работы множества рабочих процессов в единую промежуточную модель знаний;
  33. передают исходные структуры данных и единую промежуточную модель знаний в следующую обособленную функцию;
  34. после окончания работы всех обособленных функций объединяют полученные на последнем шаге единые промежуточные модели знаний в финальную выходную модель знаний;
  35. получают финальную выходную модель знаний.
RU2018115087A 2018-04-24 2018-04-24 Способ распараллеливания программ в вычислительной системе RU2685018C1 (ru)

Priority Applications (1)

Application Number Priority Date Filing Date Title
RU2018115087A RU2685018C1 (ru) 2018-04-24 2018-04-24 Способ распараллеливания программ в вычислительной системе

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
RU2018115087A RU2685018C1 (ru) 2018-04-24 2018-04-24 Способ распараллеливания программ в вычислительной системе

Publications (1)

Publication Number Publication Date
RU2685018C1 true RU2685018C1 (ru) 2019-04-16

Family

ID=66168519

Family Applications (1)

Application Number Title Priority Date Filing Date
RU2018115087A RU2685018C1 (ru) 2018-04-24 2018-04-24 Способ распараллеливания программ в вычислительной системе

Country Status (1)

Country Link
RU (1) RU2685018C1 (ru)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2786347C1 (ru) * 2022-03-09 2022-12-20 Федеральное государственное казённое военное образовательное учреждение высшего образования "Военная академия воздушно-космической обороны имени Маршала Советского Союза Г.К. Жукова" Министерства обороны Российской Федерации Способ автоматического создания параллельной программы с временной параметризацией многопроцессорных вычислительных систем с одинаковым доступом к памяти

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070255929A1 (en) * 2005-04-12 2007-11-01 Hironori Kasahara Multiprocessor System and Multigrain Parallelizing Compiler
US7454749B2 (en) * 2002-11-12 2008-11-18 Engineered Intelligence Corporation Scalable parallel processing on shared memory computers
RU2411569C2 (ru) * 2009-01-29 2011-02-10 Закрытое акционерное общество "ОПТИМИЗИРУЮЩИЕ ТЕХНОЛОГИИ" Способ автоматического распараллеливания программ
US20110208947A1 (en) * 2010-01-29 2011-08-25 International Business Machines Corporation System and Method for Simplifying Transmission in Parallel Computing System
US9612883B2 (en) * 2004-06-18 2017-04-04 Google Inc. System and method for large-scale data processing using an application-independent framework

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7454749B2 (en) * 2002-11-12 2008-11-18 Engineered Intelligence Corporation Scalable parallel processing on shared memory computers
US9612883B2 (en) * 2004-06-18 2017-04-04 Google Inc. System and method for large-scale data processing using an application-independent framework
US20070255929A1 (en) * 2005-04-12 2007-11-01 Hironori Kasahara Multiprocessor System and Multigrain Parallelizing Compiler
RU2411569C2 (ru) * 2009-01-29 2011-02-10 Закрытое акционерное общество "ОПТИМИЗИРУЮЩИЕ ТЕХНОЛОГИИ" Способ автоматического распараллеливания программ
US20110208947A1 (en) * 2010-01-29 2011-08-25 International Business Machines Corporation System and Method for Simplifying Transmission in Parallel Computing System

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2786347C1 (ru) * 2022-03-09 2022-12-20 Федеральное государственное казённое военное образовательное учреждение высшего образования "Военная академия воздушно-космической обороны имени Маршала Советского Союза Г.К. Жукова" Министерства обороны Российской Федерации Способ автоматического создания параллельной программы с временной параметризацией многопроцессорных вычислительных систем с одинаковым доступом к памяти
RU2802777C1 (ru) * 2022-12-27 2023-09-01 Федеральное государственное казённое военное образовательное учреждение высшего образования "Военная академия воздушно-космической обороны имени Маршала Советского Союза Г.К. Жукова" Министерства обороны Российской Федерации Способ распределения данных по уровням памяти вычислительной системы с разноуровневой общей памятью
RU2820032C1 (ru) * 2024-02-27 2024-05-28 Федеральное государственное казённое военное образовательное учреждение высшего образования "Военная академия воздушно-космической обороны имени Маршала Советского Союза Г.К. Жукова" Министерства обороны Российской Федерации Способ распределения данных по монофункциональным блокам процессоров вычислительной системы с управлением потоком данных

Similar Documents

Publication Publication Date Title
CA2966541C (en) Impact analysis
Abadi et al. Tensorflow: Large-scale machine learning on heterogeneous distributed systems
AU2013290313B2 (en) Method and system for automated improvement of parallelism in program compilation
Duarte et al. Parallel variable neighbourhood search strategies for the cutwidth minimization problem
JP2014525640A (ja) 並列処理開発環境の拡張
US11093241B2 (en) Outlier software component remediation
CN111860816A (zh) 神经网络模型的编译方法、装置、设备及存储介质
JP3047998B2 (ja) 並列計算機におけるプロセッサ割り当て方法、及び装置
Liu et al. Towards systematic parallel programming over mapreduce
US20210263833A1 (en) Code Generation Platform with Debugger
Espinosa et al. Automatic performance evaluation of parallel programs
US5129037A (en) Neural network for performing beta-token partitioning in a RETE network
Fan et al. Graph algorithms: parallelization and scalability
Singh et al. A machine learning approach for modular workflow performance prediction
US20110271265A1 (en) Method of automatic generation of executable code for multi-core parallel processing
KR102490539B1 (ko) 딥러닝을 위한 가속기용 프로그램 생성 방법
RU2691860C1 (ru) Способ распараллеливания программ в среде логического программирования в вычислительной системе
RU2685018C1 (ru) Способ распараллеливания программ в вычислительной системе
US20220326915A1 (en) Method for generating program for use in accelerator for deep learning
RU2745018C1 (ru) Способ распараллеливания интеллектуального анализа данных в вычислительной среде
US11573777B2 (en) Method and apparatus for enabling autonomous acceleration of dataflow AI applications
RU2813571C1 (ru) Способ распараллеливания программ в многопроцессорной вычислительной машине
RU2704533C1 (ru) Способ распараллеливания программ в среде агентно-ориентированного программирования в вычислительной системе
RU2803581C1 (ru) Способ распараллеливания программ на графическом процессоре вычислительной машины
WO2011090032A1 (ja) 並列処理プログラム生成方法、並列処理プログラム生成プログラム、及び並列処理プログラム生成装置