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