T++

Т++ — язык программирования указания необходимости параллельных вычислений с синтаксисом и семантикой, расширяющими язык C++, а именно расширением его несколькими словами, указывающими на возможность проведения параллельных вычислений. Само распараллеливание вычислений производится автоматически библиотекой времени исполнения интегрированной средой Т-системы во время выполнения программы, то есть динамически, которая расширяет интегрированную среду C++ Microsoft Visual Studio патчем. Для указания необходимости распараллеливания вычислений функция, используемые её внешние переменные и указатели помечаются соответственными ключевыми словами. При отсутствии явных побочных эффектов, компилятор оформляет функцию не как элемент процедурного программирования, а функционального, то есть чистую (не имеющих побочных эффектов). Если присутствуют явные побочные эффекты, например, использование ввода-вывода, то компилятор, отследив их, выдаёт сообщение об ошибке.

Семантика

Пример программы 
Пример программы вычисления числа Фибоначчи:
tfun int fib(int n) {
  return n < 2 ? n : fib(n-1) + fib(n-2);
}

tfun int main (int argc, char *argv[]) {
  if (argc != 2) { printf("Usage: fib <n>\n"); return 1; }
  int n = atoi(argv[1]);
  printf("fib(%d) =%d\n", n, (int)fib(n));
  return 0;
}
Как видно из примера язык Т++ внёс незначительные изменения в синтаксис языка C++, а именно: указатели tfun на разрешение параллельных вычислений. При всей неэффективности такой реализации вычисления -го числа Фибоначчи, данная программа показывает не только простоту и наглядность Т-Системы, но и демонстрирует ускорение при выполнении на нескольких процессорах, причём программисту не надо знать об их количестве и заниматься распределением полезной нагрузки между ними.

Т-Система 
Т-система предоставляет интегрированную среду разработки посредством расширения среды C++ Microsoft Visual Studio патчем. Среда разработки Т-системы предоставляет возможность включить препроцессор фильтрующий исходный код Т++ (преобразует исходный код Т++ в C++) для прогона программы в последовательном режиме (для отладки кода C++). После отладки в последовательном режиме можно производить отладку исходного кода Т++, а затем его компиляцию: производится оптимизация и преобразование исходного кода, подключаются библиотеки времени исполнения параллельных вычислений и производится компиляция кода C++.
Т-Система — средство автоматического динамического распараллеливания программ, призванное облегчить процесс разработки и использования сложных параллельных программ и их эффективное использование на различном, в том числе и неоднородном оборудовании. Разработана в ИПС РАН, в настоящее время развивается в ИПС РАН и МГУ.

OpenTS (Open T-System, Т-система с открытой архитектурой) — это современная реализация Т-системы. Она обеспечивает автоматическое динамическое распараллеливание программ и предоставляет среду исполнения для языка программирования высокого уровня Т++, который является параллельным диалектом языка Си++.

OpenTS использует легковесные потоки с быстрым переключением (несколько наносекунд) и может работать с более чем миллионом легковесных потоков на процессор. На основе этих потоков реализован ряд возможностей, таких как мобильные потоки, объекты и ссылки, распределённая сборка мусора, доска объявлений для обмена данными и заданиями, и т. д.

OpenTS была успешно опробована на широком круге задач, и на вычислительных установках различного масштаба: от многопроцессорных PC до вычислительных комплексов с различной архитектурой и разной мощности (различные многопроцессорные Windows/Linux Intel/AMD-кластеры, терафлопная российская установка МВС-1000М, и др.). OpenTS поддерживает широкий спектр параллельных платформ: многоядерные процессоры, SMP-системы, кластеры, метакластеры и GRID-системы.

История 
Идея Т-Системы зародилась в конце 1980-х годов в Институте программных систем РАН . Основной идеей стало введение понятия Т-функций как поставщиков так называемых неготовых значений, что позволяло выполнять
одновременно несколько Т-функций на разных процессорах и за счёт этого
достигать параллелизма.

В 1998 году проект обрёл второе рождение с активным участием МГУ. В 2000 г. в рамках
российско-белорусского проекта «СКИФ» была начата работа
над новой реализацией Т-Системы под кодовым названием GRACE. Однако уже
после первого года разработки обнаружились существенные недостатки данной
реализации. Плохая структура системы, отсутствие чёткой идеологии и
архитектуры приводили к многочисленным ошибкам, зависаниям, переполнениям
стека. Но самое главное, что многочисленные попытки разрешать проблемы
зачастую снижали скорость и эффективность работы уже написанных программ,
а в некоторых случаях делали их неработоспособными.

В 2002 году было принято решение о написании новой реализации Т-Системы.
Она получила название OpenTS, или Т-система с открытой архитектурой. В отличие от
двух предыдущих реализаций, в OpenTS изначально закладывались определённая
архитектура, основанная на опыте разработки предыдущих вариантов системы.
OpenTS успешно прошла государственные испытания по проекту «СКИФ» на
соответствие критериям программного обеспечения кластерного уровня.

В настоящее время в МГУ ведётся работа над двумя независимыми ветками
OpenTS под условным названием NewTS.

Основные идеи Т-Системы 
1. Функция, описанная с ключевым словом tfun (так называемая Т-функция),
является основным объектом (гранулой) параллелизма. Запись вида:
tfun int f(int a,double b)
описывает Т-функцию с двумя аргументами и одним выходным значением.

2. Вызов Т-функции не вызывает блокирование программы до завершения работы
Т-функции. Результатом вызова является неготовое значение (Т-значение).

3. Неготовое значение может быть присвоено Т-переменной. Операция присваивания Т-переменной неготового значения не вызывает блокирование программы. Т-переменная описывается с указанием ключевого слова tval (а не tvar, это результат следования традиции, соответствующий класс ядра OpenTS называется TVar). Запись tval int x; описывает Т-переменную типа int.

4. По окончании вычисления Т-функции соответствующее неготовое значение становится готовым и далее повторяет поведение обычного значения базового типа.

5. Операции взятия значения или приведения к базовому типу для Т-переменных вызывает блокирование выполнения функции до тех пор, пока значение Т-переменной не станет готовым.

Примечания

Литература 
 Описание языка Т++ от ИПС РАН
 Описание языка Т++ от проекта «Ботик»

Проекты 
 Проект OpenTS
 Проект СКИФ
 Проект СКИФ-ГРИД
 Институт программных систем РАН

Описание Т-системы 
 Применение T++
 

Параллельные вычисления
Языки программирования семейства Си
Высокоуровневые языки программирования
Языки параллельного программирования
Объектно-ориентированные языки программирования