Способ распараллеливания программ на графическом процессоре вычислительной машины Российский патент 2023 года по МПК G06F9/28 G06F12/884 

Описание патента на изобретение RU2803581C1

Область техники, к которой относится изобретение

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

Уровень техники

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

Особенно это характерно для задач интеллектуального анализа данных (ИАД). Интеллектуальный анализ данных связан с анализом больших объемов данных, что, соответственно, требует использования значительных вычислительных ресурсов для обеспечения приемлемого времени выполнения анализа.

При этом в настоящее время активно развивается распараллеливание программ по данным с использованием графических процессоров, что позволяет повысить производительность вычислительных средств. Графические процессоры достаточно часто используются в стационарных компьютерах. Таким образом, в случаях, когда использование высокопроизводительных распределенных вычислительных систем по каким-либо причинам осложнено или невозможно в качестве альтернативного варианта ускорения вычислений можно выполнять параллельные вычисления на отдельной вычислительной машине с графическим процессором. Безусловно, в большинстве случаев производительность подобной машины меньше, чем у распределенной вычислительной системы, но отсутствует потребность в помещениях для размещения оборудования, настройке специального программного обеспечения для функционирования распределенной вычислительной системы, настройке сети и т.п. Поэтому в качестве актуального отдельного направления в разработке и реализации алгоритмов ИАД можно выделить реализацию и параллелизацию алгоритмов ИАД в отдельных вычислительных машинах с графическим процессором. Выделение отдельного направления обусловлено тем, что данное направление должно поддерживаться специальными методами реализации алгоритмов ИАД с целью их распараллеливания.

Известен способ выполнения обработки данных в среде распределенной и параллельной обработки (патент США № 9612883, приоритет от 06.12.2013 г.), который также иногда называют MapReduce.

Способ включает:

в совокупности соединенных между собой вычислительных систем, каждая из которых имеет один или несколько процессоров и память:

выполнение множества рабочих процессов;

выполнение не зависящего от приложения контрольного процесса в совокупности соединенных между собой вычислительных систем, для:

определение, для входных файлов, множества задач обработки данных, включая множество данных, специфицирующих задачи отображения из входных файлов, которые будут обработаны [для получения] промежуточных значений данных, и множества задач сокращения, определяющие промежуточные значения данных, которые будут переработаны в финальные выходные данные;

присвоение задачам обработки данных статуса незанятых в рабочих процессах:

использование совокупности не зависящих от приложения функций отображения, выполняемых 1-м подмножеством из множества рабочих процессов, чтобы считывать части входных файлов, содержащих данные, и сформировать промежуточные значения данных посредством применения, по крайней мере, одной, определенной пользователем, специализированной приложением операции отображения к данным;

сохранение промежуточных значений данных в совокупности промежуточных структур данных, распределенных среди множества соединенных между собой вычислительных систем; и

использование совокупности не зависящих от приложения функций сокращения, отличных от совокупности не зависящих от приложения функций отображения, чтобы сформировать финальные выходные данные посредством применения, по крайней мере, одной, определенной пользователем, специализированной приложением операции сокращения c промежуточными значениями данных, причем совокупность не зависящих от приложения функций сокращения выполняется 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 F., 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).

Известен способ распараллеливания программ в среде логического программирования в вычислительной системе (патент РФ № 2691860, приоритет от 25.06.2018 г.), позволяющий распараллеливать в среде логического программирования программы, реализующие алгоритмы, не обладающие списочным гомоморфизмом, а также уменьшающий вероятность ошибок пользователя.

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

передачи данных из множества рабочих процессов в главный рабочий процесс,

приема данных в главном рабочем процессе из множества рабочих процессов,

определения номера рабочего процесса в системе,

выполнения множества рабочих процессов, в том числе главного рабочего процесса,

передачи рабочих процессов в системы для выполнения множества рабочих процессов, в том числе и главного рабочего процесса

считывания из входных файлов или баз данных множества входных данных, специфицирующих задачу,

хранения фактов в базе знаний логической программы,

осуществления процесса логического вывода;

способ заключается в том, что

получают входные данные и приложение для их обработки;

формируют предикаты, при удовлетворении которых, в процессе логического вывода входные данные D из файлов или баз данных преобразуются в факты базы знаний логической программы;

осуществляют декомпозицию алгоритма на отдельные шаги, которые представляют собой предикаты, являющимися левой частью правила логической программы, реализующей алгоритм;

формируют предикат для разбиения входных данных на части для работы одного из множества рабочих процессов;

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

формируют предикат приема данных главного рабочего процесса, выполненный с возможностью принимать данные из множества рабочих процессов;

формируют предикат главного рабочего процесса, являющийся правой частью правила, при этом левая часть состоит из предикатов:

передачи данных во множество рабочих процессов,

приема данных в главном рабочем процессе,

записи полученных фактов в базу знаний логической программы главного рабочего процесса,

объединения результатов работы множества рабочих процессов в единую промежуточную модель знаний;

формируют предикаты рабочих процессов, при этом данные предикаты являются правой частью правил, при этом левая часть состоит из предикатов:

преобразования входных данных D из файлов или баз данных в факты базы знаний логической программы;

разбиения входных данных на части для работы одного из множества рабочих процессов;

приема данных главного рабочего процесса из множества рабочих процессов для получения промежуточной модели знаний;

записи полученных фактов в базу знаний логической программы, выполняемой на множестве рабочих процессов;

обособленных предикатов, реализующих шаг алгоритма;

передачи результатов удовлетворения процессом логического вывода обособленных предикатов в главный рабочий процесс;

запускают на выполнение множество рабочих процессов и главный рабочий процесс, с помощью чего выполняют следующие действия

в процессе логического вывода последовательно удовлетворяют, предикаты, представляющие шаги приложения, начиная с первого, на множестве рабочих процессов, причем на каждом шаге

разбивают данные на части для работы одного из множества рабочих процессов;

преобразуют входные данные D из файлов или баз данных в факты базы знаний логической программы;

в процессе логического вызова удовлетворяют предикат, представляющий шаг алгоритма;

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

принимают данные из множества рабочих процессов в главном рабочем процессе;

помещают полученные факты в базу знаний логической программы главного рабочего процесса;

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

далее данная промежуточная модель в виде фактов используется на следующем шаге в процессе логического вывода в вычислительной системе;

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

получают финальную выходную модель знаний в виде фактов в базе знаний логической программы главного рабочего процесса.

Способ подразумевает использование языка и среды логического программирования.

Известный способ относится к вычислительной технике и, в частности, к области параллельных вычислений и может быть использовано для решения задач интеллектуального анализа данных в средах логического программирования.

Описанный способ принят за прототип.

Однако, известный способ имеет недостатки.

Метод предназначен для вычислительных систем, представляющих собой кластер из нескольких вычислительных систем, каждая из которых имеет один или несколько процессоров и память. При этом на каждой из вычислительных систем должно быть установлено и сконфигурировано программное обеспечение, предназначенное для обеспечения работы кластера, передачи данных по сети между вычислительными системами, входящими в кластер, для организации распределенных вычислений. Бывают условия, когда вычислительный кластер и соответствующее программное обеспечение отсутствуют. При этом доступна отдельная вычислительная машина c графическим процессором, установленной на ней операционной системой общего назначения, например, семейства Windows или Linux. Подобные отдельные вычислительные машины, обладают меньшей вычислительной мощностью, по сравнению с вычислительными кластерами. Тем не менее, параллельные программы на подобных отдельных вычислительных машинах с графическим процессором могут работать на порядок быстрее последовательных реализаций.

Раскрытие сущности изобретения

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

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

Для этого предлагается способ распараллеливания программ на графическом процессоре вычислительной машины. При этом вычислительная машина имеет минимум один центральный процессор, центральную память, графический процессор с множеством графических ядер, видеопамять, а также установленное и сконфигурированное программное обеспечение, выполненное с возможностью:

записывать данные в видеопамять из центральной памяти для передачи данных на графический процессор,

считывать данные из видеопамяти в центральную память для приема данных, полученных графическим процессором,

запуска главного процесса на центральном процессоре для выполнения,

запуска с нужными параметрами множества рабочих процессов из главного процесса для выполнения на графическом процессоре,

считывания из входных файлов или баз данных множества исходных данных, специфицирующих задачу,

хранения множества исходных данных, специфицирующих задачу, а также промежуточной модели знаний в видеопамяти;

при этом способ содержит этапы, на которых:

получают входные данные и приложение для их обработки;

формируют функции отображения, преобразующие исходные данные D из файлов или баз данных в набор списочных структур данных, содержащих списки атрибутов и списки векторов;

формируют функции копирования данных в видеопамять из центральной памяти для передачи данных на графический процессор для обработки множеством рабочих процессов;

осуществляют декомпозицию приложения в последовательность шагов;

формируют специализированную приложением функцию для разбиения исходных данных на части для работы каждого из множества рабочих процессов;

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

формируют специализированную приложением функцию для формирования финальной выходной модели знаний из промежуточной модели знаний, полученной на последнем этапе;

формируют функцию копирования данных главного процесса, выполненную с возможностью считывать из видеопамяти данные, которые были записаны ранее из множества рабочих процессов;

формируют функции рабочих процессов, реализующие шаги приложения, выполненные с возможностью

выполнять функции разбиения исходных данных на части для работы одного из множества рабочих процессов;

выполнять шаг приложения на графическом процессоре;

считывать исходные данные из видео памяти, записывать результаты работы в видеопамять;

формируют главный процесс с возможностью выполнения

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

передачи данных в видеопамять из центральной памяти;

функции объединения результатов работы множества рабочих процессов в единую промежуточную модель знаний;

функции приема данных из видеопамяти главного процесса;

запускают главный процесс для выполнения на центральном процессоре и с помощью него выполняют следующие действия:

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

преобразуют с помощью функций отображения исходные данные D из файлов или баз данных в набор списочных структур данных, содержащих списки атрибутов и списки векторов;

определяют количество ядер на графическом процессоре, на которых могут выполняться рабочие процессы;

передают данные для работы множества рабочих процессов с помощью функций копирования данных из видеопамяти в центральную память;

запускают множество рабочих процессов на выполнение на множестве ядер графического процессора;

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

выполняют шаг приложения в рабочих процессах, реализующих шаг приложения;

получают результаты выполнения шага в видеопамяти;

копируют данные из видеопамяти в главный процесс с помощью функции копирования данных главного процесса;

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

после выполнения всех шагов приложения объединяют полученные на последнем шаге единые промежуточные модели знаний в финальную выходную модель знаний;

получают финальную выходную модель знаний.

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

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

Параллельно выполняемые задачи на центральном процессоре принято называть процессами. Задачи, выполняемые каждым отдельным ядром на графическом процессоре, например, в рамках терминов технологии CUDA [https://developer.nvidia.com/cuda-zone], называют нитями. Таким образом, у каждого ядра есть своя нить. Далее для гармоничности терминологии для задач, выполняемых на отдельном графическом ядре будет использоваться термин процесс.

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

Способ предполагает разделение программ, реализующих алгоритмы ИАД, на отдельные шаги, каждый из которых может реализовывать рабочий процесс, который соответствует определенному шагу. При этом на каждом шаге рабочие процессы могут работать в параллельном режиме на множестве ядер графического процессора. Выполнение в параллельном режиме каждого отдельного шага, а не всего алгоритма сразу, позволяет, в отличие от MapReduce, применять данный способ для параллелизации алгоритмов, которые не обладают списочным гомоморфизмом.

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

В ходе работы алгоритмы ИАД анализируют набор данных и строят промежуточную модель знаний на каждом шаге. Построенная промежуточная модель знаний передается на следующий этап. Таким образом, каждый шаг алгоритма ИАД должен принимать набор данных и промежуточную модель знаний в качестве входных аргументов. Результатом работы шага является новая промежуточная модель знаний. На первом шаге алгоритм ИАД, принимает на вход только набор входных данных (D) алгоритма ИАД в качестве входных аргументов.

При этом при реализации алгоритма ИАД один и тот же шаг или группа шагов могут выполняться рекурсивно на соответствующих рабочих процессах до достижения определенного условия, в зависимости от алгоритма.

Здесь и далее для примеров будет использоваться нотация языка программирования С++ [http://www.cplusplus.com/doc/tutorial/].

Набор входных данных (D) алгоритма ИАД удобно представить в виде списочных структур данных. На языке С++ набор входных данных (D) можно представить в виде структуры, содержащей в себе в качестве членов список атрибутов (attributes_list), список векторов (vectors_list) и список всех возможных классов целевого атрибута (class_list):

typedef vector <AttrValType> AttrValList;

struct DataVector

{

AttrValList attr_val_list;

TargetAttrValType target_attr_val;

};

struct D

{

vector<AttrValList> attributes_list;

vector<DataVector> vectors_list; (1)

vector< TargetAttrValType> class_list;

};

Список из K атрибутов attributes_list можно задать следующим образом

attributes_list = vector<AttrValList>(attr0,…attrK);

где

attr<i> - список возможных значений i-го атрибута. Ниже приведен пример для атрибута 0, который может иметь пять значений:

AttrValList attr0 = AttrValList(1.5, 5.0, 3.5, 1.4, 7.5);

Список из L векторов можно определить следующим образом

vectors_list = vector<DataVector>(vector0, … vectorL);

где

vector <i> - структура (типа DataVector), которая состоит из списка конкретных значений каждого атрибута (поле attr_val_list) и значения целевого атрибута (поле target_attr_val). Значение i-го атрибута располагается на i-м месте в списке attr_val_list. Если значение целевого атрибута неизвестно, то оно может быть задано значением, которое специальным нужно выделить для данной цели. Ниже приведен пример для вектора 0:

DataVector vector0 = {AttrValList(1.5, 4.0, 7.2, 3.5), 5.5};

Структура промежуточной (МP) и финальной выходной модели знаний (M) зависит от алгоритма и функции, реализующей ИАД. Промежуточную (МP) и финальную выходную модель знаний (M) удобно представлять в виде списочных структур данных. Например, распространенной среди алгоритмов ИАД является модель знаний в виде деревьев решений. Для деревьев решений узлы дерева и соответствующие им множества, можно представить в виде списков. В общем виде промежуточную модель знаний можно представить в виде структуры, содержащей параметры текущего шага step_context и списка правил rules_list:

struct MP

{

StepContexStruct step_context; (2)

RuleListType rules_list;

};

Параметры текущего шага step_context могут содержать, например, список атрибутов, которые еще не использовались для построения модели знаний, и, следовательно, должны быть обработаны на следующих шагах.

Приложения ИАД в основном характеризуются параллелизмом данных. В этом случае для реализации параллельных вычислений требуется начальное разделение данных и последующее объединение результатов, полученных в параллельно выполняющихся рабочих процессах, реализующих шаг алгоритма ИАД. Выполнение в параллельном режиме каждого отдельного шага, а не всего алгоритма сразу, позволяет, в отличие от MapReduce, применять данный способ для параллелизации алгоритмов, которые не обладают списочным гомоморфизмом.

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

записывать данные в видеопамять из центральной памяти для передачи данных на графический процессор,

считывать данные из видеопамяти в центральную память для приема данных, полученных графическим процессором,

запуска главного процесса на центральном процессоре для выполнения,

запуска с нужными параметрами множества рабочих процессов из главного процесса для выполнения на графическом процессоре,

считывания из входных файлов или баз данных множества исходных данных, специфицирующих задачу;

хранения множества исходных данных, специфицирующих задачу, а также промежуточной модели знаний в видеопамяти

В число функционала, который нужно реализовать для параллельного выполнения приложения входят:

функция копирования данных в видеопамять из центральной памяти для передачи данных на графический процессор для обработки множеством рабочих процессов;

функция для разбиения исходных данных на части для работы каждого из множества рабочих процессов;

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

функция для формирования финальной выходной модели знаний из промежуточной модели знаний, полученной на последнем этапе;

функция копирования данных главного процесса, выполненная с возможностью считывать из видеопамяти данные, которые были записаны ранее из множества рабочих процессов;

функции рабочих процессов, реализующие шаги приложения, выполненные с возможностью

выполнять функции разбиения исходных данных на части для работы одного из множества рабочих процессов;

выполнять шаг приложения на графическом процессоре;

считывать исходные данные из видео памяти, записывать результаты работы в видеопамять;

главный процесс с возможностью выполнения

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

передачи данных в видеопамять из центральной памяти;

функции объединения результатов работы множества рабочих процессов в единую промежуточную модель знаний;

функции приема данных из видеопамяти главного процесса;

Входные данные D из файлов или баз данных должны быть считаны главным процессом в набор списочных структур данных, содержащих списки атрибутов и списки векторов. Функционалом для считывания из входных файлов или баз данных множества входных данных, специфицирующих задачу, должно обладать программное обеспечение, установленное на многопроцессорную вычислительную систему.

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

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

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

Осуществление изобретения

Реализация предложенного способа может быть осуществлена в одиночной вычислительной системе с графическим процессором, работающей, например, под управлением операционной системы общего назначения Linux.

Для реализации способа достаточно реализовать выполнение предложенных операций на поддерживаемом программным обеспечением языке программирования.

Реализовать действия предложенного способа в составе программы или функции может специалист в области программирования (программист), зная выполняемые действия.

В качестве примера рассмотрен алгоритм построения полного дерева решений для алгоритма CART. (Деревья решений - CART математический аппарат. Часть 1, статья по адресу: https://basegroup.ru/community/articles/math-cart-part1)

Для реализации использовалась ОС Linuх, язык С++, технология CUDA. Алгоритм построения полного дерева решений для алгоритма CART включает четыре основных шага:

Строится корневой узел дерева, с которым ассоциируется все множество векторов V из набора входных данных D; в (1) множество векторов V задает vectors_list;

Для каждого, строящегося узла дерева решений и ассоциированного с ним множества векторов Vi выбирается атрибут А для разбиения.

Пусть выбранный атрибут А принимает n значений A1, A2 ... An. Тогда выбранный атрибут А разбивает множество векторов Vi на два подмножества Vi1, Vi2, при этом для данных множеств значения атрибута А входят в подмножества значений AVi1, AVi2, соответственно. При этом множества AVi1 и AVi2 не пересекаются и не являются пустыми.

Шаги повторяются до тех пор, пока в каждом строящемся узле дерева не окажутся векторы, соответствующие одному классу, либо пустое множество векторов.

На втором шаге для выбора наиболее подходящего атрибута A, соответствующих ему множеств AVi1 и AVi2 используется максимальное значение следующего критерия:

(3),

где:

A - атрибут по которому производится разбиение на текущем шаге;

n - количество значений независимого атрибута A;

freq (Am, Vi1), freq (Am, Vi2)- количество векторов из множества векторов Vi1,Vi2, соответственно, для которых атрибут А имеет значение Am;

Vi1,Vi2 - подмножество данных Vi, для которых значения атрибута А входят в подмножества значений AVi1, AVi2, соответственно;

Vi - подмножество векторов ассоциированных с текущим узлом дерева.

Здесь и далее для примеров будет использоваться нотация языка программирования С++ [http://www.cplusplus.com/doc/tutorial/], а также библиотечные функции и другие средства технологии CUDA.

Приложение, реализующее алгоритм построения полного дерева решений для алгоритма CART может быть представлен в виде:

void Algorithm (D &d, M &m) (4)

{

MP mp;

while(! is_finished(d, mp) ) //достигнут конец алгоритма?

{

AttrListType attr_list = get_not_handled_attr_list(d, mp);

for (AttrListType::iterator cur_attr = attr_list.begin();

cur_attr != attr_list.end(); ++cur_attr )

{

calculate_attr_criterion(*cur_attr, d, mp);

}

set_best_attr(mp);

}

build_final_model(mp, m); //построить выходную модель знаний

}

Функция Algorithm строит корневой узел дерева, с которым ассоциируется все множество векторов V из набора входных данных D. Выставляет корневой узел в качестве обрабатываемого узла. Данные действия осуществляются в конструкторе класса MP. Далее построенная промежуточная модель знаний MP передается в качестве параметра функциям в теле цикла while для выполнения шага. Шаги приложения реализуются в теле цикла while. После выполнения тела цикла while получает, промежуточную модель знаний MP. Далее функция set_best_attr из step_context, определенном в (2) получает список вычисленных критериев (3) для каждого атрибута, выбирает наиболее подходящий атрибут А, добавляет соответствующие значениям атрибута А узлы дерева решений к промежуточной модели МP. Далее функция Algorithm проверяет, существуют ли узлы дерева решений в промежуточной модели, для которых требуется раскрытие с помощью функции is_finished(d, mp). Если существую, то производится новый шаг в теле цикла while. Если такие узлы отсутствуют, то возвращает в качестве результата финальную выходную модель знаний m.

get_not_handled_attr_list - функция, которая возвращает список атрибутов, которые еще не добавлены к дереву решений.

calculate_attr_criterion - функция, которая вычисляет максимальный критерий из (3) для обрабатываемого атрибута A. Выполняет итерацию по возможным значениям атрибута A для вычисления максимального из (3), добавляет полученные результаты в промежуточную модель знаний.

build_final_model - функция для формирования финальной выходной модели знаний из промежуточной модели знаний, полученной на последнем этапе.

Входные данные (D) для алгоритма построения полного дерева решений для алгоритма CART можно представить в виде таблицы, каждая строка которой содержит значения входных атрибутов и соответствующий им класс целевого атрибута.

Для реализации алгоритма построения полного дерева решений для алгоритма CART введем следующее представление для входных данных

struct D

{

vector<AttrValList> attributes_list;

vector<DataVector> vectors_list;

vector< TargetAttrValType> class_list;

};

где

attributes_list - список атрибутов, vectors_list - список векторов, class_list - список всех возможных классов целевого атрибута.

Финальная выходная модель знаний (M) для алгоритма построения полного дерева решений для алгоритма CART представляется в виде дерева решений. Промежуточная модель знаний (MP) для алгоритма построения полного дерева решений для алгоритма CART представляется в виде неполного дерева решений rules_list в (2). Также промежуточная модель знаний включает список обработанных на данный момент атрибутов, список вычисленных на последнем шаге критериев (3) для атрибутов, обрабатываемый на данном шаге узел дерева решений. Данная часть промежуточной модели обозначена как step_context в (2). Дерево решений можно представить в виде структуры вложенных списков.

struct TreeNode;

struct SubNode

{

AttrValList attr_val_list; //список значений атрибута,

//соответствующих дочернему узлу node

TreeNode* node;

}

struct TreeNode

{

TreeNode(int a, SubNode *sub_node1_, SubNode *sub_node2_)

{

attr_number = a;

sub_node1 = sub_node1_;

sub_node2 = sub_node2_;

}

int attr_number;

SubNode *sub_node1;

SubNode *sub_node2;

}

В структуре TreeNode член attr_number содержит номер атрибута, которому соответствует данный узел. Члены структуры TreeNode sub_node1, sub_node2 содержат два дочерних узла для данного узла. Таким образом, финальную выходную модель знаний M можно определить

TreeNode M = node_root; (5)

где

node_root - корневой узел дерева.

Корневой узел дерева в свою очередь можно представить в виде:

TreeNode node_root=new TreeNode(

attr_N,

{attr_N_value_list_1, node_1},

{attr_N_value_list_2, node_2});

где

attr_N - номер атрибута, который был выбран для построения корневого узла дерева решений

attr_N_value_list_1 - список значений атрибута, соответствующих следующему узлу дерева node_1

attr_N_value_list_2 - список значений атрибута, соответствующих следующему узлу дерева node_2.

Узлы второго яруса дерева решений node_1 и node_2 определяются аналогично узлу node_root. Таким же образом определяются узлы всех последующих ярусов дерева решений.

Для выполнения приложения в параллельном режиме на множестве ядер графического процессора вычислительной машины реализацию алгоритма построения полного дерева решений для алгоритма CART в (4) требуется трансформировать и представить в виде реализации рабочих процессов, реализующих шаги приложения и главного процесса. Для реализации главного процесса требуется добавление функционала объединения результатов, полученных в разных рабочих процессах, реализующих шаг приложения. Для реализации рабочих процессов требуется добавление функционала разбиения данных.

Рассмотрим вариант параллельного приложения, выполняющего параллельную обработку по атрибутам, реализованного с применением предложенного подхода.

Реализация программы главного процесса с использованием технологии CUDA будет иметь следующий вид:

/*импорт требуемых библиотек*/

void MainProc()

{

D d;

load_data(d);

MP mp;

int gridSize; // Количество блоков

int blockSize; //Количество рабочих процессов в блоке

//Определение оптимальных параметров запуска

//для параллельного выполнения на графическом процессоре

//(установка параметров gridSize и blockSize)

//Резервирование видеопамяти для исходных данных

//и результатов, копирование исходных данных в видеопамять

while( ! is_finished(d, mp ) ) //достигнут конец алгоритма?

{

AttrListType attr_list_for_handle = get_not_handled_attr_list(d, mp);

//Копирование в видеопамять списка атрибутов,

//требующих обработки, для вычислений

//(указатель attr_array_video_mem)

StepWorkProc <<<gridSize, blockSize>>>(attr_array_video_mem,

array_size);

merge_attr_parall( mp);

set_best_attr(mp);

}

M m;

build_final_model(mp, m); //построить выходную модель знаний

//Действия с финальной выходной моделью

//M – сохранение в БД, файлы и т.п.

//Освобождение занятых ресурсов

return;

}

…..

/*Вспомогательные методы программы главного процесса*/

Функция MainProc() является реализацией главного процесса для параллельного выполнения алгоритма с распараллеливанием по атрибутам. Функция MainProc() вызывается один раз после старта программы, реализующей главный процесс, при окончании работы функции программа прекращает выполнение.

Функции is_finished, get_not_handled_attr_list, set_best_attr, build_final_model рассмотрены ранее. Функция load_data загружает входные данные из файлов или баз данных в экземпляр d класса D. Далее функция MainProc() резервирует видеопамять для исходных данных и результатов, копирует исходные данные в видеопамять для вычислений во множестве рабочих процессов. Копирование и резервирование реализуется с помощью библиотечных функций технологии CUDA. В примере для упрощения отсутствует реализация.

Функция MainProc() перед запуском множества рабочих процессов определяет оптимальные параметры запуска для параллельного выполнения на графическом процессоре. Приблизительно оптимальные значения параметров можно получить с помощью функции cudaOccupancyMaxPotentialBlockSize из библиотеки технологии CUDA. Наиболее оптимальное количество процессов, а также другие параметры запуска определяются посредством ручной оптимизации и могут быть выставлены вручную для выполнения параллельной программы на конкретной вычислительной машине. Далее происходит установка параметров запуска gridSize и blockSize. В рамках технологии CUDA данные параметры определяют количество блоков и количество рабочих процессов в каждом блоке. Далее в процессе работы MainProc() запускается множество рабочих процессов с помощью вызова функции ядра StepWorkProc.

merge_attr_parall - функция объединения результатов работы множества рабочих процессов в единую промежуточную модели знаний (mp) в виде структуры (2). В процессе ее работы происходит считывание, посредством копирования из видеопамяти, результатов работы каждого из множества рабочих процессов, реализующих шаг приложения. В промежуточную модель (mp) записывается значение из (3) для каждого обрабатываемого атрибута. При этом считывание из видеопамяти памяти происходит после того, как все рабочие процессы, выполняющие текущий шаг завершили свою работу, и соответственно, каждый из них записал результаты своей работы в соответствующую область видеопамяти.

Если достигнут конец алгоритма, то функция build_final_model формирует финальную выходную модель знаний (m) в виде структуры (5).

Каждый из множества рабочих процессов, реализующих шаг приложения, работает с предназначенной ему частью входных данных. В конце своей работы записывает результаты работы, представленные списком значений из (3) для каждого обработанного рабочим процессом атрибута в определенную область видеопамяти.

Реализация функции рабочего процесса, реализующего шаг приложения, может иметь следующий вид:

/*импорт требуемых библиотек*/

__global__ void StepWorkProc(AttrValType* attr_array_video_mem,

unsigned array_size)

{

//вычисление уникального индекса потока (рабочего процесса)

int index = blockIdx.x * blockDim.x + threadIdx.x;

unsigned first_index = 0, last_index = 0;

divide_attr_parall_kernel(array_size, index, &first_index, &last_index);

for (unsigned cur_attr = first_index;

cur_attr <= last_index; ++cur_attr)

{

calculate_attr_criterion_kernel(attr_array_video_mem, cur_attr);

}

copy_results_kernel();

//Освобождение занятых ресурсов

return;

}

…..

/*Вспомогательный функционал*/

Спецификатор __global__ из определения функции StepWorkProc входит в расширение языка C/C++ для технологии CUDA. Данный спецификатор указывает, что функция вызывается из программы, выполняющейся на центральном процессоре, а само выполнение происходит на множестве ядер графического процессора.

В начале функции StepWorkProc происходит вычисление уникального идентификатора рабочего процесса, который в терминах технологии CUDA принято называть нитью. Все переменные используемые в правой части оператора присваивания значения переменной index доступны для функций ядра, то есть функций, предназначенных для выполнения на графическом процессоре.

divide_attr_parall_kernel - функция разбиения входных данных на части для работы одного из множества рабочих процессов. Данная функция принимает на вход количество атрибутов для обработки, уникальный индекс рабочего процесса и выдает на выход с помощью переменных first_index и last_index диапазон элементов, предназначенных для обработки рабочим процессом с указанным в параметрах уникальным индексом. Следует отметить, что многие современные графические процессоры могут обладать тысячами графических ядер. В случае, если количество ядер превышает размер массива функция вернет значения диапазона, при которых функция StepWorkProc не войдет в цикл вычисления критериев атрибутов.

Функция calculate_attr_criterion_kernel аналогична рассмотренной ранее calculate_attr_criterion, но является функцией ядра, то есть выполняется на графическом процессоре. В процессе своей работы функция считывает исходные данные D из глобальной видео памяти. Глобальной видеопамятью в рамках технологии CUDA называется видеопамять доступная функционалу, выполняющемуся как на центральном, так и на графическом процессоре. Функция copy_results_kernel служит для копирования результатов работы рабочего процесса в глобальную видеопамять. Ее реализация в примере для упрощения отсутствует.

Таким образом, рассмотрена реализация распараллеливания по атрибутам алгоритма построения полного дерева решений для алгоритма CART на основе предложенного подхода в вычислительной машине c графическим процессором с установленной на ней операционной системой общего назначения Linux с использованием технологии CUDA. Применение метода, рассмотренного в прототипе, к данному алгоритму без дополнительных методов, не позволяет реализовать распараллеливание алгоритма на вычислительной машине с графическим процессором под управлением операционной системы общего назначения Linux.

Если применить концепцию MapReduce без доработок к последовательному варианту реализации (4) алгоритма построения полного дерева решений для алгоритма CART для парализации по атрибутам, то на фазе Map входной набор атрибутов будет разбит на N частей, где N это количество рабочих процессов в системе. Каждая из N частей предназначена для обработки одним процессом на фазе Reduce. Таким образом, после завершения Reduce фазы будет получено N деревьев решений, при этом отсутствует возможность получить из этих N деревьев решений финальную выходную модель знаний, так как алгоритм построения полного дерева решений для алгоритма CART не обладает списочным гомоморфизмом. Отсюда следует, что применение концепции MapReduce к данному алгоритму требует дополнительных методов. Также концепция MapReduce не рассчитана на использование графического процессора, а рассчитана на использование в системе с множеством центральных процессоров. Таким образом, предложенный способ позволяет получить корректный результат, а применение концепции MapReduce к данному алгоритму без дополнительных методов не позволяет.

Похожие патенты RU2803581C1

название год авторы номер документа
СПОСОБ РАСПАРАЛЛЕЛИВАНИЯ ПРОГРАММ В МНОГОПРОЦЕССОРНОЙ ВЫЧИСЛИТЕЛЬНОЙ МАШИНЕ 2022
  • Холод Иван Иванович
  • Малов Алексей Викторович
  • Родионов Сергей Васильевич
RU2813571C1
Способ распараллеливания программ в среде логического программирования в вычислительной системе 2018
  • Малов Алексей Викторович
RU2691860C1
Способ распараллеливания программ в среде агентно-ориентированного программирования в вычислительной системе 2019
  • Малов Алексей Викторович
RU2704533C1
Способ распараллеливания программ в вычислительной системе 2018
  • Малов Алексей Викторович
RU2685018C1
СПОСОБ РАСПАРАЛЛЕЛИВАНИЯ ИНТЕЛЛЕКТУАЛЬНОГО АНАЛИЗА ДАННЫХ В ВЫЧИСЛИТЕЛЬНОЙ СРЕДЕ 2019
  • Холод Иван Иванович
  • Малов Алексей Викторович
  • Родионов Сергей Васильевич
RU2745018C1
СПОСОБ И СИСТЕМА ДЛЯ ХРАНЕНИЯ ДАННЫХ ГРАФОВ 2012
  • Волынский Петр Евгеньевич
  • Цыпляев Максим Викторович
RU2605387C2
СИСТЕМА И СПОСОБ ОБРАБОТКИ ДАННЫХ ГРАФОВ 2015
  • Волынский Петр Евгеньевич
  • Цыпляев Максим Викторович
RU2708939C2
Способ построения диалогового режима на естественно-подобном языке при решении автоматизированных задач управления в комплексах средств автоматизации 2020
  • Зюзин Алексей Владимирович
  • Морозов Павел Андреевич
  • Круталевич Юрий Александрович
  • Аношин Роман Игоревич
  • Беликов Никита Николаевич
RU2751435C1
СИСТЕМА И МЕТОД АВТОМАТИЧЕСКОГО СОЗДАНИЯ ШАБЛОНОВ 2018
  • Анисимович Константин Владимирович
  • Гаращук Руслан Владимирович
  • Мацкевич Степан Евгеньевич
RU2697647C1
СПОСОБЫ И СИСТЕМЫ ДЛЯ КРИПТОГРАФИЧЕСКОЙ ЗАЩИТЫ ОХРАНЯЕМОГО СОДЕРЖИМОГО 2002
  • Инглэнд Пол
  • Пейнадо Маркус
  • Уилт Николас П.
RU2308077C2

Реферат патента 2023 года Способ распараллеливания программ на графическом процессоре вычислительной машины

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

Формула изобретения RU 2 803 581 C1

Компьютерно-реализуемый способ распараллеливания программ на графическом процессоре вычислительной машины, которая имеет минимум один центральный процессор, центральную память, графический процессор с множеством графических ядер, видеопамять, а также установленное и сконфигурированное программное обеспечение, выполненное с возможностью:

• записывать данные в видеопамять из центральной памяти для передачи данных на графический процессор,

• считывать данные из видеопамяти в центральную память для приема данных, полученных графическим процессором,

• запуска главного процесса на центральном процессоре для выполнения,

• запуска с нужными параметрами множества рабочих процессов из главного процесса для выполнения на графическом процессоре,

• считывания из входных файлов или баз данных множества исходных данных, специфицирующих задачу,

• хранения множества исходных данных, специфицирующих задачу, а также промежуточной модели знаний в видеопамяти;

при этом способ содержит этапы, на которых:

• получают входные данные и приложение для их обработки;

• формируют функции отображения, преобразующие исходные данные D из файлов или баз данных в набор списочных структур данных, содержащих списки атрибутов и списки векторов;

• формируют функции копирования данных в видеопамять из центральной памяти для передачи данных на графический процессор для обработки множеством рабочих процессов;

• осуществляют декомпозицию приложения в последовательность шагов;

• формируют специализированную приложением функцию для разбиения исходных данных на части для работы каждого из множества рабочих процессов;

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

• формируют специализированную приложением функцию для формирования финальной выходной модели знаний из промежуточной модели знаний, полученной на последнем этапе;

• формируют функцию копирования данных главного процесса, выполненную с возможностью считывать из видеопамяти данные, которые были записаны ранее из множества рабочих процессов;

• формируют функции рабочих процессов, реализующие шаги приложения, выполненные с возможностью:

выполнять функции разбиения исходных данных на части для работы одного из множества рабочих процессов;

выполнять шаг приложения на графическом процессоре;

считывать исходные данные из видеопамяти, записывать результаты работы в видеопамять;

• формируют главный процесс с возможностью выполнения:

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

передачи данных в видеопамять из центральной памяти;

функции объединения результатов работы множества рабочих процессов в единую промежуточную модель знаний;

функции приема данных из видеопамяти главного процесса;

• запускают главный процесс для выполнения на центральном процессоре и с помощью него выполняют следующие действия:

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

преобразуют с помощью функций отображения исходные данные D из файлов или баз данных в набор списочных структур данных, содержащих списки атрибутов и списки векторов;

определяют количество ядер на графическом процессоре, на которых могут выполняться рабочие процессы;

передают данные для работы множества рабочих процессов с помощью функций копирования данных из видеопамяти в центральную память;

запускают множество рабочих процессов на выполнение на множестве ядер графического процессора;

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

выполняют шаг приложения в рабочих процессах, реализующих шаг приложения;

получают результаты выполнения шага в видеопамяти;

копируют данные из видеопамяти в главный процесс с помощью функции копирования данных главного процесса;

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

после выполнения всех шагов приложения объединяют полученные на последнем шаге единые промежуточные модели знаний в финальную выходную модель знаний;

получают финальную выходную модель знаний.

Документы, цитированные в отчете о поиске Патент 2023 года RU2803581C1

Способ распараллеливания программ в среде логического программирования в вычислительной системе 2018
  • Малов Алексей Викторович
RU2691860C1
Станок для придания концам круглых радиаторных трубок шестигранного сечения 1924
  • Гаркин В.А.
SU2019A1
EP 3129870 B1, 09.09.2020
СПОСОБ АВТОМАТИЧЕСКОГО РАСПАРАЛЛЕЛИВАНИЯ ПРОГРАММ 2009
  • Дроздов Александр Юльевич
  • Новиков Сергей Викторович
RU2411569C2
Изложница с суживающимся книзу сечением и с вертикально перемещающимся днищем 1924
  • Волынский С.В.
SU2012A1

RU 2 803 581 C1

Авторы

Малов Алексей Викторович

Даты

2023-09-18Публикация

2022-10-25Подача