- •Руководство программиста
- •1. Назначение программы
- •1.1. Назначение
- •1.2. Условия применения
- •2. Характеристика программы
- •2.1. Программа и параллельный алгоритм
- •2.2. Особенности функционального подхода к распараллеливанию
- •2.3. Примеры программ
- •2.3.1. Числа Фибоначчи
- •2.3.3. Рекурсивный обход дерева
- •2.5. Особенности реализации в различных операционных системах
- •2.5.1. OpenTs для Windows
- •2.5.1.1. Платформа Windows Compute Cluster Server
- •2.5.1.2. Инсталлятор
- •2.5.1.3. Набор для разработчика (sdk)
- •2.5.1.4. Интеграция с Visual Studio 2005
- •2.5.1.5. Сборка t-приложений
- •2. Локально в параллельном режиме, используя mpiexec:
- •3. На кластере, используя приложение Cluster Job Submission and Monitoring Console, которое поставляется вместе с Compute Cluster Pack:
- •2.6. Особенности организации параллельных вычислений при помощи т- системы
- •2.7. Программное обеспечение т-системы и дополнительные возможности
- •2.7.2. Архитектура ядра т-системы
- •2.8. Сервисные возможности т-системы
- •2.9. Алгоритм поддержки общей памяти
- •2.9.1. Решения, использованные при построении Суперпамяти
- •2.9.2. Описание архитектуры и программной реализации Суперпамяти
- •2.9.3. Передача значений с узла на узел
- •2.9.4. Алгоритм работы сборщика программного мусора
- •2.9.5. Операции присваивания и «замораживания» неготовых величин
- •2.9.6. Возможное расширение адресного пространства суперпамяти для поддержки распределенных вычислительных сетей
- •2.10. Планирование в OpenTs
- •2.10.1. Постановка задачи
- •2.10.2. Алгоритм планирования
- •Допустим, мы имеем данные t1, t2 и d(t). Рассмотрим эффект от пересылки некоторой задачи с узла 1 на узел 2. Предположим,
- •Где δi зависят от сложности задачи и ее сетевой активности. При этом:
- •2.11. Метапланировщик OpenTs
- •2.12. Поддержка отказоустойчивости исполнения т-приложений
- •2.12.1. Неготовые значения и незавершенные по причине сбоя вычисления
- •2.12.2. Вектор перерождений
- •2.12.3. Вектор посещений
- •2.12.4. Классы повреждений т-функции в случае сбоя
- •3. Обращение к программе
- •3.2. Пример программы, использующей суперпотоки (уровень s)
- •3.3. Использование т-структур и массивов переменного размера
- •3.4. Описание классов реализации системы OpenTs
- •3.4.1. Уровень суперпамяти и суперпотоков
- •3.4.2. Уровень мобильных объектов, мобильных ссылок и мобильных заданий
- •3.4.3. Уровень поддержки т-семантики
- •3.4.4. Сервисные классы
- •3.6. Определение т-контекста во время исполнения программы
- •4. Сообщения
- •4.1. Цветовая схема
- •4.2. Сообщения о фатальных ошибках
- •4.3. Информационные сообщения
- •5. Приложение a. Пример вставки и замены листьев в дереве.
- •6. Приложение b. Использование динамического массива.
2.10. Планирование в OpenTs
Задача планировщика заключается в том, чтобы свести к минимуму время исполнения программы. Это означает, что в каждый момент времени каждый узел кластера занят какой-то работой. Узел простаивает, если его очередь пренатальных задач (ptq) пуста, а все исполняемые задачи находятся в ожидании ресурсов. Таким образом, главная задача планировщика — обеспечить наличие задач в очереди на каждом узле [43].
2.10.1. Постановка задачи
Имеется вычислительная система, состоящая из N узлов. На каждом узле есть множество задач. Задачи делятся на пренатальные и исполняемые (непренатальные). Пренатальные задачи могут перемещаться между узлами кластера, исполняемые — нет. Исполняемые задачи, в свою очередь, делятся на следующие:
ожидающие неготового значения;
готовые к исполнению (ожидающие процессорного времени).
Планировщик может предпринимать следующие действия:
переслать одну или несколько пренатальных задач на другие узлы;
продолжить одну из исполняемых задач;
запустить одну из пренатальных задач, тем самым, переводя ее в категорию исполняемых.
Исполняемые задачи могут порождать новые пренатальные задачи. Их количество заранее неизвестно и не зависит от действий планировщика. Задача планировщика — минимизировать общее время исполнения программы.
2.10.2. Алгоритм планирования
Каждый раз, когда планировщик получает управление, он производит следующие действия:
пересылку части пренатальных задач на другие узлы кластера;
локальное исполнение задач, куда входит передача управления на одну из готовых к работе исполняемых задач, или, если таких нет, запуск пренатальной задачи.
Далее будет обсуждаться алгоритм первой части, принятие решения о пересылке задач.
С каждой задачей связывается набор из N+1 числа, характеризующий
вычислительную сложность задачи (1 значение);
создаваемую нагрузку на коммуникационные каналы (N значений, по одному для каждого узла).
Эта информация может быть получена несколькими путями. Рассматриваются два основных варианта. В первом из них информация может быть получена в виде подсказок планировщику, включаемых в код прикладной программы, и во втором варианте — путем усреднения замеров предыдущих запусков той же Т-функции.
Нагрузка на сеть (сетевая активность задачи) включает в себя две составляющие. Первая — это собственно размер задачи, т. е., объем данных, пересылаемых до ее запуска. Сюда входят аргументы Т-функции и некоторая служебная информация. Объем этих данных известен планировщику — это объем соответствующего задаче класса tfunImpl. Вторая составляющая — это пересылки, вызванные задачей во время ее исполнения. К ним относятся, например, обращения по Т-указателям внутри Т-функции (они могут привести к копированию содержимого Т-переменной с удаленного узла), а также — использование параметров, передаваемых «по указателю». Объем данных, составляющих вторую компоненту, неизвестен заранее и слабо поддается предсказанию (может сильно меняться в разных запусках одной Т-функции). С учетом этого обстоятельства, вторую компоненту разумно оценивать из других соображений, например, большинство Т-задач ведут наиболее интенсивный обмен данными с тем узлом, на котором они были созданы.
Если просуммировать эту информацию по всем задачам на определенном узле, получим время, в течение которого данный узел не будет испытывать недостатка в работе, и общую сетевую активность, которую он будет проявлять в это время. В нашей модели планировщик не имеет никакой информации о том, сколько и каких задач порождает каждая Т-функция. В этих условиях оптимальным поведением будет такое, которое позволяет добиться максимально равномерного распределения имеющихся в системе пренатальных задач по узлам с точки зрения суммарного времени выполнения.
Планировщик использует сегмент суперпамяти для доступа к информации о состоянии очередей на всех узлах кластера. Каждому узлу соответствует ячейка суперпамяти, в которой он размещает суммарную вычислительную сложность пренатальных задач.
Таким образом, каждый узел имеет информацию T1,T2,...,TN о состоянии ptq (очереди пренатальных задач) на всех узлах кластера. В качестве характеристики распределения задач возьмем дисперсию (среднеквадратичное отклонение) этих значений:
