Добрый день, Леонид, ещё раз!

Выношу в отдельную тему обсуждение параллелизма.

 

«С функциями с побочным эффектом надо быть осторожными. То, что Вы говорите, 
сводит на нет все распараллеливание по чистым конкретизациям.»

Напишу подробнее, что же мы планируем со студентом получить (добавил его в 
копию).

В Рефале можно параллелить три вещи: вызовы функций, сопоставления с образцами 
разных предложений и элементарные операции сопоставления в самом образце. Мы 
будем параллелить не зависящие по данным вызовы функций.

Параллелизм предполагается неявный. Программист ничего не думает о потоках, 
синхронизации и прочих радостях бытия, он просто пишет программу на Рефале. А 
уже сам рантайм будет конкретизации раскидывать по потокам. Т.е. никаких 
функций вроде CreateThread, примитивов синхронизации, сообщений между потоками 
в API не будет в принципе.

В основе параллельной реализации лежит базисный Рефал с полем зрения, которое 
изменяется по шагам. Функции делятся на две категории — функции, написанные на 
Рефале, и встроенные функции (написанные на Си). Функции, написанные на Рефале, 
за один шаг заменяют свой вызов в поле зрения на правую часть соответствующего 
предложения, в которой тоже могут быть новые термы конкретизации. Встроенные 
функции за один шаг заменяются на пассивное выражение.

В такой модели можно параллельно вычислять, во-первых, любые функции на Рефале, 
во-вторых, чистые функции на Си. «Грязные» встроенные функции, вроде 
ввода-вывода и копилки, должны, тем не менее, вычисляться строго 
последовательно слева-направо.

Новшество нашей со Станиславом работы в механизме, который позволяет 
параллелить вызовы, но при этом гарантирует правильный порядок «грязных» 
функций. Если кратко, идея в том, что все термы конкретизации в поле зрения 
провязаны двумя способами: древовидно, что отражает зависимости по данным, и 
линейно в том порядке, в каком они выполнялись бы последовательно. Термы 
конкретизации активируются (помещаются в очередь потока), когда их аргументы 
становятся пассивными. Но при выполнении «грязных» функций на Си, они 
«приостанавливаются». Повторно они активируются потоком, который бежит по 
линейному последовательному списку и тогда-то они выполняются. 

 

Кстати, вопрос к знатокам терминологии параллельного и/или функционального 
программирования. Вот есть понятие чистая функция — это детерминированная 
функция без побочного эффекта. У этого понятия есть антоним в русском языке, 
кроме словосочетания «грязная» функция? Я пишу «грязная» в кавычках, поскольку 
в литературе его не встречал. 

 

С уважением,
Александр Коновалов

 

From: Eisymont Leonid verger-lk_AT_yandex.ru [mailto:refal@botik.ru] 
Sent: Friday, November 29, 2019 5:25 PM
To: refal@botik.ru
Subject: Re: Нужны ли вещественные числа в Рефале?

 

С указателями на числа все неправильно. Именно надо работать с тем, на что 
ссылаемся, на 64-х разрядные числа. При реализации у нас даже мыслей таких не 
было, это не практично. Ссылки на ящики - совсем другое. Кстати, в реализации 
того рефала были введены ссылки на хеш-таблицы и даже на вектора. Это сильно 
помогло при оптимизации быстродействия.

С функциями с побочным эффектом надо быть осторожными. То, что Вы говорите, 
сводит на нет все распараллеливание по чистым конкретизациям. Это мы проходили 
в начале 80-х годов. Хорошее распараллеливание в эксперименте удалось получить 
лишь при работе не просто с переменными и копилками, а, по-существу, с 
объектами типа мониторов Хоара и формируемых уникальных ID обращений к ним. Эти 
ID в таком объекте использовались для внутреннего упорядочивания действий с 
такими объектами. Есть препринт ИПМ  того времени по распараллеливанию 
модельного компилятора на имитационной модели параллельной рефал-машины. Я эту 
модель сделал на базе реализации Романенко-Климова для БЭСМ-6, просто по 
другому конкретизации запускал из дерева конкретизаций , используя 
предоставленный ими интерфейс.

Про читаемость можно действительно  не обсуждать, но мне эти идентификаторы 
через точку при свободных переменных никогда не нравились, они "замыливают" 
видимость всей структуры области конкретизации, а это важно и для Рефала 
принципиально. Для информативности в смысле "что какая свободная переменная 
означает" использование идентификаторов явно недостаточно. У нас использовалась 
технология другая - была документация, хоть и рукописная, к наиболее важным 
функциям, где структура строки обращения подробно расписывалась.

Еще требование - часть этой информации выносилась в  основной комментарий к 
функции типа структура входа и выхода. Более мелкие функции снабжались 
комментариями для каждого рефал-предложения.

Это мы использовали в течение 30-40 лет при написании более 20 компиляторов и 
имитационных моделей. Потом настала перестройка и все обвалилось. Сейчас 
пытаемся эту практику восстановить. Очень хочется успеть самому и научить 
молодежь.

Л.Эйсымонт

 

 

29.11.2019, 15:51, "Александр Коновалов a.v.konovalov87_AT_mail.ru" 
<refal@botik.ru <mailto:refal@botik.ru> >:

Добрый день, Леонид!

«Со символами ссылками не так. Там тупо в символе рефала ссылка на кусок памяти 
в 64 разряда, где хранится само число. Если сравнивать, то сравниваются 
содержимое двух кусков памяти, как это аппаратура может сделать.»

Про символы-ссылки я имел ввиду следующее. Пусть имеются два символа-ссылки в 
переменных SA и SB. И мы вызываем функцию k/Eq/ SA SB.:

Eq SX SX = /Eq/
   SX SY = /Neq/

Тогда для ссылок наиболее логичным будет решение сравнить два указателя на 
равенство: если они ссылаются на один объект в памяти, то символы равны. А для 
сравнения вещественных чисел как чисел разумно ввести функцию вроде k/Compare/ 
SX SY., возвращающую '<', '=' или '>'.

На сколько я знаю Рефал-2, ссылки на динамические ящики сравниваются по 
ссылкам, а не по содержимому.

 

«Про параллельность интересно, только нам запись типа Рефал-2 нужна, новые 
расширения явно неудачные, надуманные, в больших программах это „не прокатит“, 
даже по примерам в письмах вижу, что программы не читаются. Кто-то из коллег, 
по-моему, также высказал такое мнение.»

Предполагаемая параллельная реализация всё равно будет поддерживать только 
базисный Рефал: без условий, блоков и прочих наворотов. Параллелиться будут 
независимые по данным вызовы функций, но при этом вызовы примитивных «грязных» 
функций (ввод-вывод, копилка и т.д.) будут выполняться в правильном порядке. 
Подход к распараллеливанию может быть вполне применим и к Рефалу-2.

А вопрос читаемости — я считаю, что это вопрос привычки. Мне, например, трудно 
читать Рефал-2. Хотя я однажды читал исходник компилятора Василия Стеллецкого, 
уже к середине текст читался нормально. Так что вопрос привычки. Если прочтёте 
1000 строк кода Рефала-5, то тоже сможете некоторое время нормально его 
воспринимать.

А кто-то из коллег — это Василий Стеллецкий. Он тоже писал в рассылку, что 
текст на Рефале-5 он не читает, а расшифровывает.

 

С уважением,
Александр Коновалов 

 

From: Eisymont Leonid verger-lk_AT_yandex.ru <refal@botik.ru 
<mailto:refal@botik.ru> >
Sent: Friday, November 29, 2019 1:20 PM
To: refal@botik.ru <mailto:refal@botik.ru> 
Subject: Re: Нужны ли вещественные числа в Рефале?

 

Со символами ссылками не так. Там тупо в символе рефала ссылка на кусок памяти 
в 64 разряда, где хранится само число. Если сравнивать, то сравниваются 
содержимое двух кусков памяти, как это аппаратура может сделать.

Про параллельность интересно, только нам запись типа Рефал-2 нужна, новые 
расширения явно неудачные, надуманные, в больших программах это "не прокатит", 
даже по примерам в письмах вижу, что программы не читаются. Кто-то из коллег, 
по-моему, также высказал такое мнение.

Л.Эйсымонт

 

28.11.2019, 20:46, "Александр Коновалов a.v.konovalov87_AT_mail.ru" 
<refal@botik.ru <mailto:refal@botik.ru> >:

Добрый вечер, Леонид!

«Мы же сами только обеспечивали работу с такими числами через символы-ссылки.»

Если представлять вещественные числа символами-ссылками, то проблема равенства 
уходит на второй план: два символа равны, если ссылаются на общий контейнер.

«Так что хоть какое-то распараллеливание есть, это будет важно применить в 
комбинаторных алгоритмах компиляции. Сейчас со всем этим будем работать на 
сервере с 28 ядрами.»

А у меня сейчас студент работает над параллельной реализацией Рефала (курсовая 
работа). Если что-то получится, напишу подробнее. Пишется не для кластеров, а 
для простых многоядерных компьютеров. Но зато вся параллельность будет 
полностью прозрачна для программиста.

 

С уважением,
Александр Коновалов

 

From: Eisymont Leonid verger-lk_AT_yandex.ru [mailto:refal@botik.ru 
<mailto:refal@botik.ru> ]
Sent: Thursday, November 28, 2019 5:41 PM
To: refal@botik.ru <mailto:refal@botik.ru> 
Subject: Re: Нужны ли вещественные числа в Рефале?

 

Конечно, не IEEE, у нас была та арифметика, что есть в ЕС ЭВМ (IBM 360). Мы же 
сами только обеспечивали работу с такими числами через символы-ссылки.

Для очень точных вычислений использовали дроби. Про работу с длинной мантиссой 
я не помню, кажется была. Надо посмотреть, реализация ведь есть и мы ее подняли 
сейчас в ЗАО"НТЦ"Модуль" для моделирования перспективных комбинаторных 
алгоритмов компиляции и непосредственно перспективных архитектур процессоров и 
систем. Нам надо просто быстро делать это в исследованиях (т.е. быстро ставить 
эксперименты), вот и выбрали Рефал, опыт его такого использования есть еще с 
времен ракетно-космической тематики в ИПМ. Рефал, вдобавок, у нас с введенными 
операциями типа MPI. Это в 2004 году в НИЦЭВТ-е добавили к М-рефалу. Так что 
хоть  какое-то распараллеливание есть, это будет важно применить в 
комбинаторных алгоритмах компиляции. Сейчас со всем этим будем работать на 
сервере с 28 ядрами.

Л.Эйсымонт

 

28.11.2019, 14:16, "Александр Коновалов a.v.konovalov87_AT_mail.ru" 
<refal@botik.ru <mailto:refal@botik.ru> >:

Добрый день, Леонид!

Я только что написал в рассылку про тонкости семантики вещественных чисел, 
включая сравнение на равенство. Как в М-Рефале решена проблема равенства 
вещественных чисел? Или во времена Бурана он писался для компьютеров со своей 
(не IEEE) реализацией вещественной арифметики?

 

С уважением,
Александр Коновалов

 

From: Eisymont Leonid verger-lk_AT_yandex.ru <refal@botik.ru 
<mailto:refal@botik.ru> >
Sent: Thursday, November 28, 2019 1:53 PM
To: refal@botik.ru <mailto:refal@botik.ru> 
Subject: Re: Нужны ли вещественные числа в Рефале?

 

Вещественные числа есть в М-Рефале (моя с Николаем Мансуровым разработка). Без 
них мы бы компилятор для Бурана не смогли бы сделать - нужны были вычисления 
для выбора масштабов. Это есть там с середины 80-х годов прошлого столетия.

Л.Эйсымонт

 

27.11.2019, 19:44, "Александр Коновалов a.v.konovalov87_AT_mail.ru" 
<refal@botik.ru <mailto:refal@botik.ru> >:

Добрый вечер всем!

Собственно, вопрос: нужны ли вещественные числа в Рефале? Из известных мне 
реализаций они есть только в Рефале-6. Также они упоминались в старом учебнике 
Рефала-5 Турчина, при этом описывались встроенные функции Trunc, Real и 
Realfun. В новом актуальном их нет.

Вопрос их отсутствия в большинстве реализаций — идеологический или технический?

У меня (Рефал-5λ) их нет, поскольку (а) мне они не требовались, (б) их нет в 
Рефале-5, с которым должен быть совместим Рефал-5λ. Добавлять или не добавлять 
— я думаю. Поэтому и спросил.

 

С уважением,
Александр Коновалов

 

  • Про... Александр Коновалов a . v . konovalov87_AT_mail . ru
    • ... Eisymont Leonid verger-lk_AT_yandex . ru
    • ... Andrei Klimov andrei_AT_klimov . net
      • ... Boyko Bantchev boykobb_AT_gmail . com
        • ... Andrei Klimov andrei_AT_klimov . net

Ответить