- •Руководство программиста
- •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.5.1.4. Интеграция с Visual Studio 2005
Суть интеграции OpenTS с Visual Studio 2005 состоит в следующем: в диалоговом окне при добавлении нового проекта появляется новый элемент "OpenTS console application", позволяющий создать проект консольного приложения на языке Т++.
Также, в диалоговом окне добавления в проект нового файла появляется элемент "T++ file". Это даёт возможность добавления в текущий проект новых исходных файлов на языке Т++.
В процессе сборки Т-приложения в среде Visual Studio 2005 к каждому исходному файлу на языке Т++ применяется особое правило сборки ("%ProgramFiles%\Microsoft Visual Studio 8\VC\ VCProject Defaults\ opents.rules"), которое использует командный файл "t++.bat". Объектные модули, полученные в результате применения этого правила, затем компонуются с некоторыми другими статическими библиотеками, в результате чего получается исполняемый файл Т-приложения.
2.5.1.5. Сборка t-приложений
В меню "Старт"-"Все программы"-"OpenTS" есть несколько ссылок для открытия терминала OpenTS. Используя этот терминал, можно создавать Т-приложения с помощью командной строки. Командный файл t++.bat используется для разработки Т-приложений в режиме командной строки. Его синтаксис: t++ [опции] файл1 ... файлN. Список его возможных опций:
/auto-c-call - позволяет Т-приложению вызывать Си-версии Т-функций. В некоторых случаях это может улучшить производительность приложения;
/c - режим компиляции исходных файлов без компоновки;
/dbg - отладочная сборка. Она позволит отладчику получить информацию о символах программы в случае ошибки при работе Т-приложения;
/do - позволяет указать расположение объектных модулей;
/not - способ сборки приложения, при котором все ключевые слова языка Т++ игнорируются;
/o - указывает имя выходного файла;
/p - позволяет указать дополнительные опции компилятору Cи/Cи++;
/v - печать команд перед их вызовом;
Т-приложения могут быть запущены тремя способами:
В монопроцессорном режиме:
2. Локально в параллельном режиме, используя mpiexec:
3. На кластере, используя приложение Cluster Job Submission and Monitoring Console, которое поставляется вместе с Compute Cluster Pack:
2.6. Особенности организации параллельных вычислений при помощи т- системы
Практика показала, что программисты достаточно быстро усваивают базовые принципы программирования на языке T++, а поэтапный переход от последовательного исполнения к реальному параллельному счету упрощает выявление некорректностей кода, связанных, обычно, со слишком вольным использованием расширений функционального стиля. При использовании Т-системы, разумеется, надо помнить об особенностях функционирования Т-системы и Т++-программ. Например, следует помнить, что в результате вызова Т-функции может происходить пересылка данных из одного узла кластера в другой.
Т-система по большей части освобождает программиста от таких забот как явная организация параллельных фрагментов программы, их распределение по узлам кластера, синхронизация таких фрагментов, явные операции обмена данными между ними. Однако было бы ошибкой считать, что в Т-системе «автоматизированы» все аспекты организации параллельного счета.
В первую очередь при реализации программ для Т-системы программист обязан адекватно изложить алгоритм в функциональном стиле— описать программу в виде набора «чистых» Т- функций. Кроме этого, он должен стремиться выбрать оптимальный размер гранулы параллелизма,— то есть оптимально подобрать среднюю вычислительную сложность Т- функций:
слишком малая вычислительная сложность определенных программистом Т- функций может привести к слишком большим накладным расходам. Например, это может привести к тому, что потраченное время на передачи Т-функций (и данных для них) в другие узлы кластера окажется большим, чем время счета этой функций;
слишком большая вычислительная сложность определенных программистом Т- функций может привести к малому количеству порождаемых в процессе счета гранул параллелизма и к неравномерной загрузке вычислительных узлов кластера (особенно в больших установках).
Фрагменты должны быть: - достаточно крупными, чтобы их вычислительная сложность превышала бы накладные расходы на организацию их выполнения; достаточно мелкими, чтобы в процессе выполнения можно было бы ожидать возникновения такого количества таких фрагментов, которое будет достаточным для загрузки всех узлов кластера.
