- •Руководство программиста
- •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. Использование динамического массива.
3.2. Пример программы, использующей суперпотоки (уровень s)
Приведенная ниже программа показывает пример использования суперпотокового уровня. Программа демонстрирует скорость переключения контекста внутри Т-системы, достаточную для того, чтобы каждый пиксел на экране отрисовывался отдельным потоком при демонстрации видео.
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <SDL/SDL.h>
#include <trt>
ts::ThrQ waitq;
void draw(void *pixel) {
int color = 1;
while(true) {
color = color*5 + (int)pixel;
*(Uint16*)pixel = color;
//printf("%p : %d\n",&color,color);
waitq.stopHereAndRunOthers();
}
}
SDL_Surface *screen;
Uint16 * pixelAddress(int x, int y) {
if (screen->format->BytesPerPixel != 2) printf("Display depth !=
16 :-(\n");
return (Uint16 *)screen->pixels + y*screen->pitch/2 + x;
}
#define XSZ 512
#define YSZ 512
tfun int main(int argc, char *argv[]) {
printf("Setting video mode\n");
screen = SDL_SetVideoMode(XSZ, YSZ, 16, SDL_SWSURFACE);
if (screen == NULL) {
fprintf(stderr, "Problem setting %dx%d resolution: %s\n", XSZ,
YSZ, SDL_GetError());
exit(1);
}
printf("Running threads\n");
int x,y;
for (x=0; x<XSZ; x++) {
printf("One cswitch takes %.0f nanoseconds\
n",ts::tick2Sec(t.finish())*1000000000./(ITER*XSZ*YSZ));
return 0;
}
}
3.3. Использование т-структур и массивов переменного размера
Приведенная в приложении A программа показывает пример использования T-структур, а именно, вставка и замена листьев в дереве. Деревья задаются в формате: expr ::= 0 | len (expr_1) ... (expr_{len}). Функция insert вставляет в каждый лист дерева e данное дерево s. А функция subst заменяет каждую ветку, ведущую в лист, на дерево s.
Если сказать: echo "1(0) 2(0)(0)" | ./subst, то программа выдает:
expr: 1 (0)
subst: 2 (0) (0)
after insert: 1 (2 (0) (0))
after subst.insert: 1 (4 (0) (0) (0) (0))
В том случае, если в качестве T-переменной вы хотите использовать массив, не следует использовать обычный массив. Для этого можно использовать класс TArray, экземпляры которого можно использовать как массивы. Он имеет метод resize, с помощью которого можно задать и динамически менять его размерность. Пример использования динамического массива приведен в приложении B.
3.4. Описание классов реализации системы OpenTs
3.4.1. Уровень суперпамяти и суперпотоков
SystemMemoryAllocator – класс, ответственный за выделение памяти
DataAllocator – класс-шаблон для выделения памяти объектам определенного типа FIXME: при оптимизации должен кэшировать!
StackAllocator – класс для выделения памяти для стеков суперпотоков
ThreadAllocator – кэширующий аллокатор суперпотоков
ThrH – заголовочная структура суперпотока
SThread – суперпоток
THInit – инициализация суперпотокового уровня
DestructionQueue – реентерабильная процедура для удаления совокупностей объектов
Header – класс-заголовок для суперданных
SData – класс представления суперданных
SRef – локальная ссылка на суперданные
WTimer – оптимизированная процедура для получения системного времени
MPITagHandler – системный сервис для взаимодействия с подсистемами MPI/DMPI
TransportHandler – системный сервис - транспортная поддержка суперпамяти
VZeroes – виртуальное пространство для суперматрицы, проинициализированное нулями
CachedChunks – класс для кэширующего захвата диапазона ячеек суперпамяти
MasterSCell – базовый класс для представления состояния диагональных (собственных) элементов суперматрицы
SlaveSCell – базовый класс для представления состояния несобственных (отраженных) элементов суперматрицы
SCell – базовый класс для представления ячеек суперпамяти
SPtr – глобальный указатель на ячейку суперпамяти
Data – базовый класс для представления суперданных в виде активных сообщений
DataCell – ячейка суперпамяти, содержащая обычные суперданные
StaticCell – специальная (статическая) ячейка суперпамяти (используется для управляющей информации)
SharedCell – общая (широковещательная) ячейка суперпамяти
DynamicSegment – сегмент суперпамяти
StaticSegment – специальный (статический) сегмент суперпамяти
