Работает SYDAK
Jul. 11th, 2022 05:59 pmВ книге Мазного про МС "Дубна" в разделе 6.1.4 Использование динамической памяти в языке фортран
описана подсистема SYDAK (SYstem DAta Keeping), предназначенная для хранения большого объёма числовых данных в собственной динамической памяти объёмом до 256 К.
Я всю сознательную жизнь мечтал попробовать, как это работает, но то руки не доходили (на ВЦ АН), то оказывалось, что система отсутствует в организации (в ИТМ и ВТ). Наконец, руки дошли. На диске 2048 из ИТМ и ВТ SYDAK-а, как и ожидалось, нет, а на диске из С. Бора - есть, в *library:2.
Попробуем объявить массив размером 500х500 слов, расписать его элементы (i, j) значениями i*j, а потом проверить, правильно ли получилось.
Работает это так:
Если не делать TAKE, то система не знает, какие строки массива можно прятать на барабан и печатается ПЕРЕПОЛНЕНО ОПЕРАТИВНОЕ РАБОЧЕЕ ПОЛЕ. Рабочим полем считается вся память от последнего использованного загрузчиком слова до начала стека. Если печатать значения L, получаемые после GIVE, то будет примерно
и так далее по кругу. Память выделяется, начиная с верхних адресов, для совместимости с оверлеями (LOADGO). В системе предусмотрена оптимизация откачек. Для сложных последовательностей запросов к элементам нескольких массивов, как в задачах математической физики, рекомендуется первую итерацию вычислительного цикла проводить в режиме сбора статистики последовательности запросов (CALL REGIMS), а начиная со второй - в рабочем режиме (CALL REGIMW). На этом простом примере особой разницы не замечено.
Теоретически вместо откачки на МБ для позднейших версий ОС ДИСПАК можно было модифицировать систему для работы с дополнительными листами памяти задачи, используя экстракоды переименования листов.
описана подсистема SYDAK (SYstem DAta Keeping), предназначенная для хранения большого объёма числовых данных в собственной динамической памяти объёмом до 256 К.
Я всю сознательную жизнь мечтал попробовать, как это работает, но то руки не доходили (на ВЦ АН), то оказывалось, что система отсутствует в организации (в ИТМ и ВТ). Наконец, руки дошли. На диске 2048 из ИТМ и ВТ SYDAK-а, как и ожидалось, нет, а на диске из С. Бора - есть, в *library:2.
Попробуем объявить массив размером 500х500 слов, расписать его элементы (i, j) значениями i*j, а потом проверить, правильно ли получилось.
Работает это так:
*NАМЕ
*LIВRА:2
*САLL СRЕАТЕ*
ВIG(500,500) { так объявляется большой массив }
*ЕND SЕGМЕNТ { в результате создается процедура DRUMCAT с описанием массивов }
Ф О Р Т Р А Н
/16.07.73/
РRОGRАМ МАIN
СОММОN IР(1) { база для работы с массивами }
DО 10 I= 1,500
2 САLL GIVЕ(’ВIG’, I, L) { запрашиваем строку I, в L будет смещение к базе}
3 DО 20 J=1,500
4 20 IР(L+J) = I*J { фактически BIG(I, J) = I*J }
5 САLL ТАКЕ(’ВIG’, I) { закончили работу со строкой I, будет упрятана на барабан когда надо }
6 10 СОNТINUЕ
7 К = 0
8 КК = 0
9 DО 30 I = 1,500
10 САLL GIVЕ(’ВIG’, I, L)
11 DО 40 J=1,500
12 К = К + I*J
13 КК = КК + IР(L+J)
14 40 СОNТINUЕ
15 САLL ТАКЕ(’ВIG’, I)
16 30 СОNТINUЕ
17 РRINТ 50,К,КК
50 FОRМАТ(1Х2I15)
ЕND
*ЕХЕСUТЕ
ОТ 18.01.79 ==
ПОДПРОГРАММЫ ИЗ БИБЛИОТЕКИ 02 04.10.84 М1
ТАКЕ GIVЕ SТАТISТ SDRUМ* GIVЕSТRN РRIОRIТУ ЕХСНАNGЕ WRSЕСТ*
NЕХТSЕСТ
ОТ 18.01.79 ==
15687562500 15687562500
Если не делать TAKE, то система не знает, какие строки массива можно прятать на барабан и печатается ПЕРЕПОЛНЕНО ОПЕРАТИВНОЕ РАБОЧЕЕ ПОЛЕ. Рабочим полем считается вся память от последнего использованного загрузчиком слова до начала стека. Если печатать значения L, получаемые после GIVE, то будет примерно
ОFFSЕТ = 073070 ОFFSЕТ = 072104 ОFFSЕТ = 071120 ОFFSЕТ = 070134 ОFFSЕТ = 067150 ОFFSЕТ = 066164 ... ОFFSЕТ = 010250 ОFFSЕТ = 007264 ОFFSЕТ = 006300 ОFFSЕТ = 073070 ОFFSЕТ = 072104
и так далее по кругу. Память выделяется, начиная с верхних адресов, для совместимости с оверлеями (LOADGO). В системе предусмотрена оптимизация откачек. Для сложных последовательностей запросов к элементам нескольких массивов, как в задачах математической физики, рекомендуется первую итерацию вычислительного цикла проводить в режиме сбора статистики последовательности запросов (CALL REGIMS), а начиная со второй - в рабочем режиме (CALL REGIMW). На этом простом примере особой разницы не замечено.
Теоретически вместо откачки на МБ для позднейших версий ОС ДИСПАК можно было модифицировать систему для работы с дополнительными листами памяти задачи, используя экстракоды переименования листов.
no subject
Date: 2022-07-12 06:11 am (UTC)no subject
Date: 2022-07-12 07:36 am (UTC)Тж. см. https://yanenko.gpntbsib.ru/pdfs/school/a79-6987.pdf