T++

Поделись знанием:
Перейти к: навигация, поиск
T++
Семантика:

мультипарадигмальный: объектно-ориентированное, обобщённое, процедурное, метапрограммирование, функциональное, параллельное программирование

Тип исполнения:

компилируемый

Появился в:

1980-е

Автор:

[skif.pereslavl.ru/psi-info/index.html Институт программных систем РАН]

Расширение файлов:

.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 на разрешение параллельных вычислений. При всей неэффективности такой реализации вычисления <math>n</math>-го числа Фибоначчи, данная программа показывает не только простоту и наглядность Т-Системы, но и демонстрирует ускорение при выполнении на нескольких процессорах, причём программисту не надо знать об их количестве и заниматься распределением полезной нагрузки между ними.

Препроцессор

Компилятор

Т-Система

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

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

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

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

История

Идея Т-Системы зародилась в конце 1980-х годов в Институте Программных Систем РАН [skif.pereslavl.ru/psi-info/index.html]. Основной идеей стало введение понятия Т-функциий как поставщиков так называемых неготовых значений, что позволяло выполнять одновременно несколько Т-функций на разных процессорах и за счёт этого достигать параллелизма.

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

Напишите отзыв о статье "T++"

Примечания

  1. [www.opents.net/index.php/ru/ruk-progr OpenTS. Руководство программиста]
  2. Возможно применение статических библиотек параллельных вычислений, таких как: ScaLAPACK,
  3. [www.opents.net OpenTS :: Home]

Литература

  • [www.opents.net/index.php/ru/lang-tpp#tpp-common Описание языка Т++ от ИПС РАН]
  • [www.botik.ru/~abram/temp-T-system/tpp.u.html Описание языка Т++ от проекта «Ботик»]

Проекты

  • [www.opents.net/ Проект OpenTS]
  • [skif.pereslavl.ru/ Проект СКИФ]
  • [skif-grid.botik.ru/ Проект СКИФ-ГРИД]
  • [skif.pereslavl.ru/psi-info/index.html Институт программных систем РАН]

Описание Т-системы

  • [ops.rsu.ru/download/ops/ShulzhenkoDiss.pdf Применение T++]
  • С.М. Абрамов, В.А. Васенин, В.В. Корнеев, А.А. Московский, В.А. Роганов [www.botik.ru/~abram/temp-T-system/ Организация распределенной общей памяти в Т-системе с открытой архитектурой] (рус.) // ИПС РАН, ЦНТК. — 2003. — С. 13.

Отрывок, характеризующий T++

– Никогда, никогда не женись, мой друг; вот тебе мой совет: не женись до тех пор, пока ты не скажешь себе, что ты сделал всё, что мог, и до тех пор, пока ты не перестанешь любить ту женщину, какую ты выбрал, пока ты не увидишь ее ясно; а то ты ошибешься жестоко и непоправимо. Женись стариком, никуда негодным… А то пропадет всё, что в тебе есть хорошего и высокого. Всё истратится по мелочам. Да, да, да! Не смотри на меня с таким удивлением. Ежели ты ждешь от себя чего нибудь впереди, то на каждом шагу ты будешь чувствовать, что для тебя всё кончено, всё закрыто, кроме гостиной, где ты будешь стоять на одной доске с придворным лакеем и идиотом… Да что!…
Он энергически махнул рукой.
Пьер снял очки, отчего лицо его изменилось, еще более выказывая доброту, и удивленно глядел на друга.
– Моя жена, – продолжал князь Андрей, – прекрасная женщина. Это одна из тех редких женщин, с которою можно быть покойным за свою честь; но, Боже мой, чего бы я не дал теперь, чтобы не быть женатым! Это я тебе одному и первому говорю, потому что я люблю тебя.
Князь Андрей, говоря это, был еще менее похож, чем прежде, на того Болконского, который развалившись сидел в креслах Анны Павловны и сквозь зубы, щурясь, говорил французские фразы. Его сухое лицо всё дрожало нервическим оживлением каждого мускула; глаза, в которых прежде казался потушенным огонь жизни, теперь блестели лучистым, ярким блеском. Видно было, что чем безжизненнее казался он в обыкновенное время, тем энергичнее был он в эти минуты почти болезненного раздражения.
– Ты не понимаешь, отчего я это говорю, – продолжал он. – Ведь это целая история жизни. Ты говоришь, Бонапарте и его карьера, – сказал он, хотя Пьер и не говорил про Бонапарте. – Ты говоришь Бонапарте; но Бонапарте, когда он работал, шаг за шагом шел к цели, он был свободен, у него ничего не было, кроме его цели, – и он достиг ее. Но свяжи себя с женщиной – и как скованный колодник, теряешь всякую свободу. И всё, что есть в тебе надежд и сил, всё только тяготит и раскаянием мучает тебя. Гостиные, сплетни, балы, тщеславие, ничтожество – вот заколдованный круг, из которого я не могу выйти. Я теперь отправляюсь на войну, на величайшую войну, какая только бывала, а я ничего не знаю и никуда не гожусь. Je suis tres aimable et tres caustique, [Я очень мил и очень едок,] – продолжал князь Андрей, – и у Анны Павловны меня слушают. И это глупое общество, без которого не может жить моя жена, и эти женщины… Ежели бы ты только мог знать, что это такое toutes les femmes distinguees [все эти женщины хорошего общества] и вообще женщины! Отец мой прав. Эгоизм, тщеславие, тупоумие, ничтожество во всем – вот женщины, когда показываются все так, как они есть. Посмотришь на них в свете, кажется, что что то есть, а ничего, ничего, ничего! Да, не женись, душа моя, не женись, – кончил князь Андрей.
– Мне смешно, – сказал Пьер, – что вы себя, вы себя считаете неспособным, свою жизнь – испорченною жизнью. У вас всё, всё впереди. И вы…
Он не сказал, что вы , но уже тон его показывал, как высоко ценит он друга и как много ждет от него в будущем.
«Как он может это говорить!» думал Пьер. Пьер считал князя Андрея образцом всех совершенств именно оттого, что князь Андрей в высшей степени соединял все те качества, которых не было у Пьера и которые ближе всего можно выразить понятием – силы воли. Пьер всегда удивлялся способности князя Андрея спокойного обращения со всякого рода людьми, его необыкновенной памяти, начитанности (он всё читал, всё знал, обо всем имел понятие) и больше всего его способности работать и учиться. Ежели часто Пьера поражало в Андрее отсутствие способности мечтательного философствования (к чему особенно был склонен Пьер), то и в этом он видел не недостаток, а силу.
В самых лучших, дружеских и простых отношениях лесть или похвала необходимы, как подмазка необходима для колес, чтоб они ехали.
– Je suis un homme fini, [Я человек конченный,] – сказал князь Андрей. – Что обо мне говорить? Давай говорить о тебе, – сказал он, помолчав и улыбнувшись своим утешительным мыслям.
Улыбка эта в то же мгновение отразилась на лице Пьера.
– А обо мне что говорить? – сказал Пьер, распуская свой рот в беззаботную, веселую улыбку. – Что я такое? Je suis un batard [Я незаконный сын!] – И он вдруг багрово покраснел. Видно было, что он сделал большое усилие, чтобы сказать это. – Sans nom, sans fortune… [Без имени, без состояния…] И что ж, право… – Но он не сказал, что право . – Я cвободен пока, и мне хорошо. Я только никак не знаю, что мне начать. Я хотел серьезно посоветоваться с вами.
Князь Андрей добрыми глазами смотрел на него. Но во взгляде его, дружеском, ласковом, всё таки выражалось сознание своего превосходства.
– Ты мне дорог, особенно потому, что ты один живой человек среди всего нашего света. Тебе хорошо. Выбери, что хочешь; это всё равно. Ты везде будешь хорош, но одно: перестань ты ездить к этим Курагиным, вести эту жизнь. Так это не идет тебе: все эти кутежи, и гусарство, и всё…
– Que voulez vous, mon cher, – сказал Пьер, пожимая плечами, – les femmes, mon cher, les femmes! [Что вы хотите, дорогой мой, женщины, дорогой мой, женщины!]
– Не понимаю, – отвечал Андрей. – Les femmes comme il faut, [Порядочные женщины,] это другое дело; но les femmes Курагина, les femmes et le vin, [женщины Курагина, женщины и вино,] не понимаю!
Пьер жил y князя Василия Курагина и участвовал в разгульной жизни его сына Анатоля, того самого, которого для исправления собирались женить на сестре князя Андрея.
– Знаете что, – сказал Пьер, как будто ему пришла неожиданно счастливая мысль, – серьезно, я давно это думал. С этою жизнью я ничего не могу ни решить, ни обдумать. Голова болит, денег нет. Нынче он меня звал, я не поеду.
– Дай мне честное слово, что ты не будешь ездить?
– Честное слово!


Уже был второй час ночи, когда Пьер вышел oт своего друга. Ночь была июньская, петербургская, бессумрачная ночь. Пьер сел в извозчичью коляску с намерением ехать домой. Но чем ближе он подъезжал, тем более он чувствовал невозможность заснуть в эту ночь, походившую более на вечер или на утро. Далеко было видно по пустым улицам. Дорогой Пьер вспомнил, что у Анатоля Курагина нынче вечером должно было собраться обычное игорное общество, после которого обыкновенно шла попойка, кончавшаяся одним из любимых увеселений Пьера.
«Хорошо бы было поехать к Курагину», подумал он.
Но тотчас же он вспомнил данное князю Андрею честное слово не бывать у Курагина. Но тотчас же, как это бывает с людьми, называемыми бесхарактерными, ему так страстно захотелось еще раз испытать эту столь знакомую ему беспутную жизнь, что он решился ехать. И тотчас же ему пришла в голову мысль, что данное слово ничего не значит, потому что еще прежде, чем князю Андрею, он дал также князю Анатолю слово быть у него; наконец, он подумал, что все эти честные слова – такие условные вещи, не имеющие никакого определенного смысла, особенно ежели сообразить, что, может быть, завтра же или он умрет или случится с ним что нибудь такое необыкновенное, что не будет уже ни честного, ни бесчестного. Такого рода рассуждения, уничтожая все его решения и предположения, часто приходили к Пьеру. Он поехал к Курагину.
Подъехав к крыльцу большого дома у конно гвардейских казарм, в которых жил Анатоль, он поднялся на освещенное крыльцо, на лестницу, и вошел в отворенную дверь. В передней никого не было; валялись пустые бутылки, плащи, калоши; пахло вином, слышался дальний говор и крик.
Игра и ужин уже кончились, но гости еще не разъезжались. Пьер скинул плащ и вошел в первую комнату, где стояли остатки ужина и один лакей, думая, что его никто не видит, допивал тайком недопитые стаканы. Из третьей комнаты слышались возня, хохот, крики знакомых голосов и рев медведя.
Человек восемь молодых людей толпились озабоченно около открытого окна. Трое возились с молодым медведем, которого один таскал на цепи, пугая им другого.
– Держу за Стивенса сто! – кричал один.
– Смотри не поддерживать! – кричал другой.
– Я за Долохова! – кричал третий. – Разними, Курагин.
– Ну, бросьте Мишку, тут пари.
– Одним духом, иначе проиграно, – кричал четвертый.
– Яков, давай бутылку, Яков! – кричал сам хозяин, высокий красавец, стоявший посреди толпы в одной тонкой рубашке, раскрытой на средине груди. – Стойте, господа. Вот он Петруша, милый друг, – обратился он к Пьеру.