Разработка тестов, Тестирование архитектуры с помощью задач расчета напряженности элетростатического поля - Преимущества применения dataflow-парадигмы в вычислительных системах

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

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

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

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

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

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

Данный тест можно разбить на следующие подзадачи:

    1) Создание матрицы вычислительных узлов, каждый из которых моделирует некоторую точку на плоскости 2) Помещение (задание) некоторой точке определенной величины заряда. В данном случае моделируется помещение заряженной частицы в некоторую точку плоскости. 3) Расчет вектора напряженности в каждом узле матрицы (т. е. в каждой заданной точке плоскости). Расчет проводится с помощью нескольких диагональных "проходов" по матрице.
передача данных о зарядах на матрице функциональных устройств

Рисунок 12. Передача данных о зарядах на матрице функциональных устройств

После того, как некоторой точке матрицы был задан электрический заряд, ФУ, отвечающее за данную точку, запускает "волну просчета". Оно посылает своим четырем соседям данные о новом заданном заряде (величина заряда и его координаты). Другие ФУ, получая на вход данные о заряде, рассчитывают результирующий вектор напряженности и записывают его в память. По умолчанию, каждое ФУ хранит нулевой вектор. После расчета ФУ отправляет информацию некоторым своим соседям. Выбор направления для отправки зависит от координат текущей точки и координат заряженной частицы. Можно выделить 8 различных вариантов выбора направлений отправки:

    1) Если ФУ находится в верхней левой части плоскости, то оно пересылает данные "соседу" слева 2) Если ФУ находится в верхней правой части плоскости, то оно пересылает данные "соседу" сверху 3) Если ФУ находится в нижней правой части плоскости, то оно пересылает данные "соседу" справа 4) Если ФУ находится в нижней левой части плоскости, то оно пересылает данные "соседу" вниз 5) Если ФУ находится на горизонтальной оси слева от ФУ, то оно отправляет данные "соседу" слева и вниз 6) Если ФУ находится на горизонтальной оси справа от ФУ, то оно отправляет данные "соседу" справа и вверх 7) Если ФУ находится на вертикальной оси сверху от ФУ, то оно отправляет данные "соседу" слева и вверх 8) Если ФУ находится на вертикальной оси снизу от ФУ, то оно отправляет данные "соседу" справа и вниз

Схема выбора направлений приведена на рисунке 13.

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

Рисунок 13. Схема выбора направлений для отправки данных о новом заряде

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

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

Радиус-вектор предыдущего узла

Для реализации теста была написана следующая миллипрограмма:

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

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

NewFU={Mnemo="ElectricField" FUType=FUElectricFieldManager}

Eventser. ContextPopMk=Scheduler. EventserContextSet

Scheduler. ContextPopMk=ElectricField. SchedulerContextSet

ElectricField. NSet=100

ElectricField. MSet=100

ElectricField. EpsSet=1.5

ElectricField. NetCreat

Расстановка точек с зарядом на плоскости

ElectricField. XSet=10

ElectricField. YSet=10

ElectricField. PotensialSet=5

ElectricField. XSet=99

ElectricField. YSet=36

ElectricField. PotensialSet=-5.1

ElectricField. XSet=3

ElectricField. YSet=61

ElectricField. PotensialSet=3.6

ElectricField. PotensialMatrPopMk=Console. LnOut

Листинг 3. Реализация теста расчета электростатического поля

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




Разработка тестов, Тестирование архитектуры с помощью задач расчета напряженности элетростатического поля - Преимущества применения dataflow-парадигмы в вычислительных системах

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