Re: Детерминированность РЕФА


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