Бенчмарк GREP - алгоритм сопоставления файловых строк шаблонам команды - Преимущества применения dataflow-парадигмы в вычислительных системах

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

Для проведения моделирования работы команды GREP необходим следующий набор функциональных устройств:

    - String Sourсe - Regexp Manager - Regexp Worker - Regexp Collector - String Receiver

Структура виртуальной вычислительной системы ОА-архитектуры для реализации бенчмарка GREP приведена на рис. 70.

ФУ для реализации бенчмарка команды GREP

В Таблица 20 собран набор милликоманд ФУ, предназначенных для прогона тестового приложения бенчмарка команды GREP (алгоритма сопоставления файловых строк шаблонам команды GREP) на модели суперкомпьютерной системы ОА-архитектуры.

структура вычислительной системы для моделирования grep

Рисунок 15 - Структура вычислительной системы для моделирования GREP

Таблица 3 - Милликоманды устройства вычислений бенчмарка команды GREP

Индекс милликоманды

Мнемоника милликоманды

Описание

0

Reset

Сброс ФУ

20

PatternSet

Установка поискового шаблона (регулярное выражение)

21

StringSet

Установка входной строки для поиска

22

PatternSetStart

Установка поискового шаблона (регулярное выражение), затем запуск поиска

23

StringSetStart

Установка входной строки для поиска, затем запуск поиска

25

ResultMkSet

Установка милликоманды для отправки результата (первого найденного вхождения)

26

ResultMatrMkSet

Установка милликоманды для отправки результата в формате массива/матрицы (все внайденные вхождения)

27

ResultMatrPop

Выполнить милликоманду отправки результата в формате массива/матрицы

28

ResultMatrPopMk

Установить и выполнить милликоманду отправки результата в формате массива/матрицы

29

ResultProgSet

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

30

Start

Запуск поиска

41

IndexOffsetSet

Установка стартового значения индекса при индексации входных строк. Используется в качестве милликоманды при приеме входной строки. (по умолчанию - 1000)

42

ResultFUContextSet

Установка контекста ФУ, которое будет принимать результаты поиска

Предварительная настройка функциональных устройств

ФУ String Source. Данное функциональное устройство является поставщиком входных данных в программу моделирования программы GREP. Устройство производит построчное чтение некоторого заданного текстового файла и пересылка данных (строк) следующему функциональному устройству. Ниже приведен пример программы:

NewFU={Mnemo="StringSource" FUType=FUStringsSource}

...

StringSource. FileSet="eug3.txt"

StringSource. MkSet=RegManager. StringPut

Листинг 5. Пример вызова ФУ StringSource

ФУ Regexp Worker. Для проведения моделирования необходимо создать всего одно ФУ Regexp и провести его настройку. В качестве входных данных устройство принимает строку для поиска, а также поисковый шаблон, построенный по правилам регулярного выражения. После получения этих входных данных устройство произведет поиск искомой строки по шаблону и сформирует массив вхождений. Этот массив ФУ прикрепит в качестве нагрузки ко входной милликоманде и перенаправит ее на контекст устройства, определенного в переменной контекста ResultFUContextSet.

После настройки данного ФУ Regexp Manager произведет его "клонирование", т. е. система будет состоять из нескольких одинаково настроенных ФУ Regexp Worker, что обеспечит распараллеливание решаемой задачи. Ниже представлен пример программы:

NewFU={Mnemo="Reg" FUType=FURegexp}

...

Reg. PatternSet="[A-Za-z]+"

Reg. ContextPopMk=RegManager. RegexpFUSet

Листинг 6. Пример вызова ФУ RegexpWorker

ФУ Regexp Manager. Данное устройство выполняет функции инициализации "рабочих" ФУ Regexp Worker, а также функции распредения входных данных (строк) между ФУ Regexp. Перед запуском данного устройства необходимо сначала настроить одно ФУ Regexp, а затем передать ссылку на его контекст устройству Regexp Manager через милликоманду RegexpFUSet. Необходимо также определить количество "клонированных" устройств через милликоманду CountSet. Данная милликоманда не только определит переменную контекста Count, но и создаст и проинициализирует устройства ФУ Regexp, используя предустановленный в переменной RegexpFU контекст оригинального устройства-обработчика. За прием входной строки отвечает милликоманда StringPut (входная строка в нагрузке). После получения всех необходимых данных устройство начинает слать милликоманды (начиная с 1000), номера которых соответствуют индексам входных строк, увеличенных на тысячу (+1000). Т. е., первая строка будет передана некоторому устройству Regexp Worker милликомандой 1000, вторая - 1001, третья - 1002 и т. д. Ниже представлен пример программы.

NewFU={Mnemo="RegManager" FUType=FURegexpManager}

...

Reg. ContextPopMk=RegManager. RegexpFUSet

RegManager. Clone=10

StringSource. MkSet=RegManager. StringPut

Листинг 7. Пример вызова ФУ RegexpManager

Для запуска тестовой задачи бенчмарка GREP на вычислительной системе ОА-архитектуры необходимо выполнить следующую миллипрограмму на ПЯ (ОА-языке):

NewFU={Mnemo="Scheduler" FUType=FUScheduler}

Scheduler. ContextPopMk=MainBus. SchedulerContextSet Настройка ссылки на балансир (планировщик)

NewFU={Mnemo="StringSource" FUType=FUStringsSource}

NewFU={Mnemo="RegManager" FUType=FURegexpManager}

NewFU={Mnemo="Reg" FUType=FURegexp}

NewFU={Mnemo="RegCollector" FUType=FURegexpCollector}

NewFU={Mnemo="Eventser" FUType=FUEventser}

NewFU={Mnemo="Chart" FUType=FUChart}

NewFU={Mnemo="Plot" FUType=FUPlot}

Настройка окна вывода графика

Plot. SeriaCreat

Chart. ParentSet

Chart. Caption="Parallel factor"

Chart. Focus

Plot. SeriaCreat

Chart. ChartPopMk=Plot. ParentSet

Plot. ColorSet=clRed

Plot. PenWidthSet=3

Chart. TitleYSet="Parallel factor"

Chart. TitleXSet="Model time"

Chart. TitleSet="Grep parallel factor"

Eventser. OutProgSet={Eventser. CurrentTimePopMk=Plot. XSet Eventser. CurrentParallelFactorPopMk=Plot. YSet}

Eventser. CurrentTimePointPopMk=Scheduler. TimePointerSet

Eventser. ContextPopMk=Scheduler. EventserContextSet

Scheduler. EventserMkSet=1 Милликоманда добавления события для Eventser

Scheduler. NCoresSet=9

Eventser. NEUSet=9

Настройка эталонного ФУ Regexp

Reg. PatternSet="(день|ночь|она?|луна|мне|тебе|[0-9]+|[A-Za-z]+)"

Reg. ContextPopMk=RegManager. RegexpFUSet

RegCollector. ContextPopMk=Reg. ResultFUContextSet

Создание вычислительного поля

Reg. ManualModeSet=true

RegManager. Clone=40

StringSource. FileSet="eug2.txt"

StringSource. MkSet=RegManager. StringPut

RegManager. ManualModeSet=true

Настройка времени планирования вычислений

Scheduler. SheduleTimeSet=3000

Запуск теста

StringSource. Start

Eventser. Start

Вывода результатов тестаConsole. Out="Process time: " Eventser. CurrentTimePointPopMk=Console. OutLn

Console. Out="Process time: " Eventser. CurrentTimePointPopMk=Console. OutLn

Console. Out="Parallel factor: " Eventser. ParallelFactorPopMk=Console. OutLn

Console. Out="Use factor: " Eventser. UseFactorPopMk=Console. OutLn

Листинг 8. Реализация теста Regexp по обработке текстовых данных

На ПЯ также могут быть реализованы и миллипрограммы обработки результатов прогона тестовой задачи на ОА-архитектуры для их последующей визуализации и анализа. Например, миллипрограмма определения зависимости времени выполнения теста Grep от числа ФУ и ИУ будет выглядеть следующим образом.

NewFU={Mnemo="Scheduler" FUType=FUScheduler}

Scheduler. ContextPopMk=MainBus. SchedulerContextSet

NewFU={Mnemo="StringSource" FUType=FUStringsSource}

NewFU={Mnemo="RegManager" FUType=FURegexpManager}

NewFU={Mnemo="Reg" FUType=FURegexp}

NewFU={Mnemo="RegCollector" FUType=FURegexpCollector}

NewFU={Mnemo="Eventser" FUType=FUEventser}

NewFU={Mnemo="File" FUType=FUGatewayFile}

NewFU={Mnemo="Matr" FUType=FUConstMatr}

NewFU={Mnemo="GatewayFile" FUType=FUGatewayFile}

NewFU={Mnemo="Counter" FUType=FUCounter}

NewFU={Mnemo="Counter2" FUType=FUCounter}

Eventser. CurrentTimePointPopMk=Scheduler. TimePointerSet

Eventser. ContextPopMk=Scheduler. EventserContextSet

Scheduler. EventserMkSet=1 Милликоманда добавления события для Eventser

Scheduler. SheduleTimeSet=30

Reg. PatternSet="(день|ночь|она?|луна|мне|тебе|[0-9]+|[A-Za-z]+)"

Reg. ContextPopMk=RegManager. RegexpFUSet

RegCollector. ContextPopMk=Reg. ResultFUContextSet

Reg. ManualModeSet=true

RegManager. Clone=10

StringSource. FileSet="eug2.txt"

StringSource. MkSet=RegManager. StringPut

RegManager. ManualModeSet=true

Создание матрицы для вывода результатов теста

Matr. RowSet=51 Matr. ColSet=51

Matr. IndexModeSet=0

Matr. Create

Scheduler. SheduleTimeSet=1000

Цикл для сбора результатов

Counter. ValueSet=50

Counter2.ValueSet=50

Counter. LessEqProgSet={

Scheduler. ModelingReset

Eventser. ModelingReset

Counter2.PopMk=Scheduler. NCoresSet

Counter. PopMk=RegManager. Clone

StringSource. Start Eventser. Start

Counter. PopMk=Matr. RowSet Counter2.PopMk=Matr. ColSet

Eventser. CurrentTimePointPopMk=Matr. CellSet

Counter. Inc

}

Counter2.LessEqProgSet={Counter. Set=1 Counter2.Inc}

Counter2.Set=1

Вывод результатов тестирования в файл

GatewayFile. FileNameSet="RegResult. txt"

GatewayFile. SeparatorSet=";"

GatewayFile. OpenFileWrite

Matr. MatrPopMk=GatewayFile. LnOut

GatewayFile. CloseFile

Листинг 9. Реализация теста Regexp по обработке текстовых данных на ПЯ

Похожие статьи




Бенчмарк GREP - алгоритм сопоставления файловых строк шаблонам команды - Преимущества применения dataflow-парадигмы в вычислительных системах

Предыдущая | Следующая