T++
Ця стаття є сирим перекладом з іншої мови. Можливо, вона створена за допомогою машинного перекладу або перекладачем, який недостатньо володіє обома мовами. (квітень 2019) |
T++ | |
---|---|
Дата появи | 1980-ті |
Творці | Інститут програмних систем РАН |
Основні реалізації | пропріетарна |
Т++ — мова програмування вказівка необхідності паралельних обчислень з синтаксисом і семантикою, розширюють мову 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, Т-система з відкритою архітектурою) — це сучасна реалізація Т-системи. Вона забезпечує автоматичне динамічне розпаралелювання програм і надає середовище виконання для мови програмування високого рівня Т++, який є паралельним діалектом мови Сі ++
OpenTS використовує легковагі потоки з швидким перемиканням (кілька наносекунд) і може працювати з більш ніж мільйоном легковагих потоків на процесор. На основі цих потоків реалізований ряд можливостей, таких як мобільні потоки, об'єкти і посилання, розподілене прибирання сміття, дошка оголошень для обміну даними і завданнями тощо. OpenTS була успішно випробувана на широкому колі завдань, і на обчислювальних установках різного масштабу: від багатопроцесорних PC до обчислювальних комплексів з різною архітектурою і різної потужності (різні багатопроцесорні Windows/Linux Intel/AMD-кластери, терафлопного російська установка МВС-1000 М, і ін.). OpenTS підтримує широкий спектр паралельних платформ: багатоядерні процесори, SMP-системи, кластери, метакластери і GRID-системи.
Ідея Т-Системи зародилась в кінці 1980-х років в Інституті Програмних Систем РАН [1] [Архівовано 1 листопада 2016 у Wayback Machine.]. Основною ідеєю стало введення поняття Т-функцій як постачальників так званих неготових значень, що дозволяло виконувати одночасно кілька Т-функцій на різних процесорах і за рахунок цього досягати паралелізму.
В 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. Керівництво програміста. Архів оригіналу за 4 березня 2016. Процитовано 24 листопада 2016.
- ↑ Можливе застосування статичних бібліотек паралельних обчислень, таких як: ScaLAPACK,
- Опис мови Т++ от ІПС РАН
- Опис мови Т++ от проекту «Ботік» [Архівовано 19 грудня 2017 у Wayback Machine.]
- Проект OpenTS
- Проект СКІФ [Архівовано 3 листопада 2016 у Wayback Machine.]
- Проект СКІФ-ГРІД [Архівовано 14 березня 2018 у Wayback Machine.]
- Інститут програмних систем РАН [Архівовано 1 листопада 2016 у Wayback Machine.]
- Застосування T++ [Архівовано 15 лютого 2017 у Wayback Machine.]
- С.М. Абрамов, В.А. Васенин, В.В. Корнеев, А.А. Московский, В.А. Роганов. Організація розподіленої загальної пам'яті в Т-системі з відкритою архітектурою // ІПС РАН, ЦНТК. — 2016. — С. 13.