Subject: Re: Детерминированность РЕФА
From: Sergei M. Abramov (abram@botik.ru)
Date: Tue Mar 30 2004 - 23:10:52 MSD
> А если серьезно-нужна система , не критичная к порядку применения правил.
>
> Кстати , T++ - что за зверь ?
Это третий глобус ;-)
Т++ -- Т-язык в последней версии Т-системы, имеющей имячко OpenTS.
> Может ли он быть портирован на прозвольный кластер Unix машин
> или он остро заточен под конкретное железо?
Насколько я понимаю -- на любой. По крайней мере на чем только ее за
последний год студенты не гоняли (Оптероны, Итаниумы, Спарки, Альфы и т.п).
Возможно есть привязка к Линуксу. Но, думаю, преодалимая...
> Как реализовано там взаимодействие процессов? MPI библиотека или TCP/IP?
Пока MPI, однако подходит широкий класс реализаций MPI (проверено: LAM,
MPICH, ScaMPI и ГРИДоподобные: PACX, Globus ...)
Т-система прост:
-- программа -- набор чистых функций (Т-функций); тело функции можно
писать на чем угодно: на Си (Т-Си), на С++ (Т++), на Фортране (Т-Фортран),
при написании тела Т-функции базовый язык немного расширяется (tval, send,
tout, tcall, drop...);
-- у Т-функции есть аргументы и результаты (арность и коарность);
-- еще есть Т-значения, например TVal<int> -- это либо int, либо
"временно не готово";
-- неготовое значение -- отношение "поставщик-потребитель" между
ячейкой-получателем и некоторым выходом (помните про коарность) некоторой
вызванной Т-функции;
-- вызов Т-функции -- создание параллельного процесса и установка
соответствующих отношений поставщик-потребитель к получателям; вызывающая
функция продолжает свой счет (пока не будут найдены веские причины для
засыпания); вызванная Т-функция -- готова стартовать (даже если ей дали в
качестве аргументов неготовые TVal<...>) -- пусть стартует, там увидим,
будут ли у нее основания для засыпания...
-- присваивания, копирование, передача в качестве результатов неготовых
значений -- не есть причина для приостановки процесса (для засыпания);
любые иные операции с неготовыми значениями -- причина для засыпания (до
момента готовности значения);
Пример функции, которая нигде нет засыпания (псевдокод):
F (int n) -> (y) {
z = new list(10);
for (int i = 0; i<10; i++) {
z[i] = G(i);
};
send y = z;
}
==========================================
Несколько неопрятно сформатированный материал по разным Т-аспектам:
http://tgrid.botik.ru/~phil/docs/tgridrepras.html
Еще см. http://skif.pereslavl.ru/skif/ меню :: Выставки :: Презентационные
материалы -- пункты 2 и 3 что-то поясняют (правда, это по предыдущей версии,
но все-таки).
==========================================
| Тема вызывает ностальгические воспоминания и желание поучаствовать в
обсуждении.
| Основным предметом оного вижу спецификацию Параллельного рефала - диалекта
| рефала, содержащего средства параллельного программирования, включая
недетерминизм.
| Не обязательно это введение в язык новых элементов, возможно изменение
семантики старых.
| Все старые диалекты не являются кандидатами в силу строгой
детерминированности
| их модели вычислений. Возможности распараллеливания в рамках внутренней
| инвариантности к порядку вычислений есть, но для практики этого маловато
будет.
| Какие есть идеи на это счет?
По мне, Рефал Плюс хороший кандидат. На первый раз достаточно одной прагмы:
# tfunc
Если я ставлю такое перед Рефал-функцией, то я объявляю возможность запуска
данной функции "в параллель". Последствия недетерминизма -- на моей
совести. Синхронизация -- обеспечивается понятием TVal<RefalCell> -- см.
выше.
Обращу внимание на три пункта:
(1) тезис Н.В.Кондратьева (думаю, этак 1987):
<<Хорошо распараллеливается то, что хорошо суперкомпилируется и
наоборот>>.
(2) Рефал Плюс строился под лозунг "замыкание относительно операции
суперкомпиляции (прогонки)".
(3) Арность и коарность функций одинаково важно, для замкнутости
относительно суперкомпиляции и для параллельного выполнения функциональных
программ (штука, не осознаная многими на западе, и слава Богу).
(4) Рефал Плюс (если не путаю) первый рефал, в котором рефал функции имеют
явно выраженные и явно поддержанные в реализации арность и коарность.
Формат:
$func F s1 (e2 (e3)) TABLE(eKeys (eVals))
= eX TABLE(eNewKeys (eNewVals));
означает, что в каждом вызове функции F будет передано 5 (разрозненных)
аргументов, а после завершения вычисления ф-ция возвращает три результата.
Аргументы и результаты никак не конкатенируются.
Это хорошо (для параллельных вычислений).
С.
This archive was generated by hypermail 2b25 : Mon Oct 25 2004 - 21:25:00 MSD