T++

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
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. Операції взяття значення або приведення до базового типу для Т-змінних викликає блокування виконання функції до тих пір, поки значення Т-змінної не стане готовим.

Примітки

[ред. | ред. код]
  1. OpenTS. Керівництво програміста. Архів оригіналу за 4 березня 2016. Процитовано 24 листопада 2016.
  2. Можливе застосування статичних бібліотек паралельних обчислень, таких як: ScaLAPACK,

Література

[ред. | ред. код]

Проекти

[ред. | ред. код]

Опис Т-системи

[ред. | ред. код]
  • Застосування T++ [Архівовано 15 лютого 2017 у Wayback Machine.]
  • С.М. Абрамов, В.А. Васенин, В.В. Корнеев, А.А. Московский, В.А. Роганов. Організація розподіленої загальної пам'яті в Т-системі з відкритою архітектурою // ІПС РАН, ЦНТК. — 2016. — С. 13.