T++
Т++ — язык программирования указания необходимости параллельных вычислений с синтаксисом и семантикой, расширяющими язык C++, а именно расширением его несколькими словами, указывающими на возможность проведения параллельных вычислений. Само распараллеливание вычислений производится автоматически библиотекой времени исполнения интегрированной средой Т-системы во время выполнения программы, то есть динамически, которая расширяет интегрированную среду C++ Microsoft Visual Studio патчем.[1] Для указания необходимости распараллеливания вычислений функция, используемые её внешние переменные и указатели помечаются соответственными ключевыми словами. При отсутствии явных побочных эффектов, компилятор оформляет функцию не как элемент процедурного программирования, а функционального, то есть чистую (не имеющих побочных эффектов). Если присутствуют явные побочные эффекты, например, использование ввода-вывода, то компилятор, отследив их, выдаёт сообщение об ошибке.
T++ | |
---|---|
Семантика | мультипарадигмальный: объектно-ориентированное, обобщённое, процедурное, метапрограммирование, функциональное, параллельное программирование |
Класс языка | язык программирования |
Тип исполнения | компилируемый |
Появился в | 1980-е |
Автор | Институт программных систем РАН |
Расширение файлов |
.tpp |
Основные реализации | проприетарная |
Семантика
Пример программы
Пример программы вычисления числа Фибоначчи:
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;
}
Как видно из примера язык Т++ внёс незначительные изменения в синтаксис языка С++, а именно: указатели tfun
на разрешение параллельных вычислений. При всей неэффективности такой реализации вычисления -го числа Фибоначчи, данная программа показывает не только простоту и наглядность Т-Системы, но и демонстрирует ускорение при выполнении на нескольких процессорах, причём программисту не надо знать об их количестве и заниматься распределением полезной нагрузки между ними.
Т-Система
Т-система предоставляет интегрированную среду разработки посредством расширения среды С++ Microsoft Visual Studio патчем. Среда разработки Т-системы предоставляет возможность включить препроцессор фильтрующий исходный код Т++ (преобразует исходный код Т++ в С++) для прогона программы в последовательном режиме (для отладки кода С++). После отладки в последовательном режиме можно производить отладку исходного кода Т++, а затем его компиляцию: производится оптимизация и преобразование исходного кода, подключаются библиотеки времени исполнения параллельных вычислений[2] и производится компиляция кода С++. Т-Система — средство автоматического динамического распараллеливания программ, призванное облегчить процесс разработки и использования сложных параллельных программ и их эффективное использование на различном, в том числе и неоднородном оборудовании. Разработана в ИПС РАН, в настоящее время развивается в ИПС РАН и МГУ.
OpenTS (Open T-System, Т-система с открытой архитектурой) — это современная реализация Т-системы. Она обеспечивает автоматическое динамическое распараллеливание программ и предоставляет среду исполнения для языка программирования высокого уровня Т++, который является параллельным диалектом языка Си++[3].
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. Руководство программиста (недоступная ссылка). Дата обращения: 27 мая 2010. Архивировано 4 марта 2016 года.
- Возможно применение статических библиотек параллельных вычислений, таких как: ScaLAPACK,
- OpenTS :: Home (недоступная ссылка). Дата обращения: 16 июня 2008. Архивировано 7 сентября 2016 года.
Литература
Описание Т-системы
- Применение T++
- С.М. Абрамов, В.А. Васенин, В.В. Корнеев, А.А. Московский, В.А. Роганов. Организация распределённой общей памяти в Т-системе с открытой архитектурой // ИПС РАН, ЦНТК. — 2003. — С. 13.