Библиотека программ JINRLIB

Попкова Л.В., Сапожников А.П., Сапожникова Т.Ф., Федорова Р.Н.
Десятая всероссийская научная конференция (RCDL'2008)
"Электронные библиотеки:
перспективные методы и технологии, электронные коллекции"

г. Дубна, 7-11 октября, 2008 г.

Аннотация
В статье содержится описание библиотеки компьютерных программ JINRLIB. В зависимости от способа сопровождения и распространения библиотека делится на две части: одна часть распространяется в виде объектных модулей, другая - в виде автономных пакетов прикладных программ. Описываются принципы организации и технология сопровождения программ и программных пакетов библиотеки.

  1. Цели проекта
  2. Состав библиотеки
  3. Принципы организации и технология сопровождения библиотек объектных модулей
  4. Реализация
  5. Технология сопровождения автономных пакетов прикладных программ
  6. Поддержка программирования в среде MPI
  7. WWW - сопровождение библиотеки
  8. Заключение
    Литература
БИБЛИОТЕКА ПРОГРАММ - это организованная на машинном носителе совокупность компьютерных программ, доступ к которым осуществляется по их именам или индексам. Библиотеки программ могут состоять из объектных модулей (двоичных файлов, полученных в результате трансляции), или текстов программ на исходном языке программирования [1].
JINRLIB - библиотека программ, предназначенная для решения широкого круга математических и физических проблем, возникающих в ходе научной деятельности сотрудников ОИЯИ [2].


1. Цели проекта:
  1. обеспечить долговременную и стабильную поддержку пользователей компьютеров всех типов, существующих в ОИЯИ;
  2. обеспечить сохранение результатов труда старшего поколения специалистов по численным методам;
  3. создать у сотрудников ОИЯИ стимул для разработки собственных программ.
2. Состав библиотеки:

Основу библиотеки составляют программы из библиотеки ДУБНА [3],[4] - популярной в прошлом библиотеки программ ОИЯИ, и MATHLIB и KERNLIB - ядра программного обеспечения CERN [5]. Не все программы из этих библиотек сейчас представляют интерес. Некоторые входят в состав библиотек компилятора, другие не используются в силу своей специфической области применения, потеряли актуальность или заменены более новыми. При создании новой библиотеки по мере возможности мы учитывали мнение пользователей, в частности, какими программами из библиотеки ДУБНА желательно заняться в первую очередь. Пополнение библиотеки происходит также новыми программами, создаваемыми сотрудниками ОИЯИ и их коллаборантами.
Каждая программа идентифицируется уникальным индексом или именем. Для индексирования программ, включаемых в библиотеки объектных модулей, используется привычная нашим пользователям классификация, принятая в свое время в библиотеке ДУБНА. Для идентификации остальных программ используется ее имя и классификация, принятая в издательском отделе ОИЯИ. Программы объединяются в библиотеки объектных модулей или существуют в виде самостоятельных пакетов прикладных программ. Поэтому в зависимости от способа сопровождения и распространения библиотека естественным образом делится на две части: одна часть распространяется в виде объектных модулей, другая - в виде автономных пакетов прикладных программ.

3. Принципы организации и технология сопровождения библиотек объектных модулей

1.    Программа, включаемая в библиотеку объектных модулей, предоставляемую пользователям, это совокупность 3-х компонентов:
2.    Все программы работают только с 64-разрядным представлением чисел с плавающей запятой. Использование в программе конкретных особенностей машинного представления чисел допускается только в исключительных случаях.
Для Фортрана: каждая подпрограмма должна содержать строку
IMPLICIT REAL*8 ( A-H, O-Z )
Для языков С и С++ должны использоваться типы Double и Long.

3.   Имена файлов, содержащих компоненты библиотечной программы, получаются из ее библиотечного индекса.
Расширения имен: .for .f .c .C .txt .dat .res
Каждая программа располагается в отдельной директории, имя которой совпадает с библиотечным индексом. Например, программа А101 хранится в директории А101 в виде 6 файлов:
А101.for - содержит фортранный текст программы А101;
T_А101.for - файл с тестом программы А101;
A101.dat - набор входных данных для теста;
A101.res - результат прогона теста;
A101.txt - описание программы А101 на русском языке;
A101E.txt - описание программы А101 на английском языке.
Предлагаемая организация материалов библиотеки пригодна для использования современных технологий сопровождения больших систем (например, CVS [6]).

4.   Программа включается в библиотеку только после того, как будет успешно откомпилирована, а по возможности и оттестирована на всех компьютерных платформах ОИЯИ.

5.   Форма описания программ:
Название программы. Индекс
Автор(ы)
Язык
Назначение
Структура:
Тип: Подпрограмма,
подпрограмма-функция
Имена входа для пользователя
Используемые внешние подпрограммы
Обращение
Метод. Точность. Ограничения.
Ошибки исполнения
Литература
Пример

6.   Головная директория библиотеки называется JINRLIB. Здесь размещаются:
7.   Программы библиотеки проверяются на компьютерных платформах Unix (Linux) и Windows.

Программа создания (сборки) библиотеки индивидуальна для каждой платформы и для каждого компилятора. Как правило, это текстовый файл, содержащий установку переменных для создания нужного окружения, команды вызова компилятора и библиотекаря - командный файл для ОС Windows или shell-script для ОС Unix.
В работе с библиотеками программ объектных модулей можно выделить два этапа. Сначала с каждой программой идет "индивидуальная" работа - проверяются исходные тексты, проводится полное тестирование программы, анализируются результаты тестов, описание программы приводится к стандартному виду. После выполнения всех этих операций считается, что программа готова для включения ее в библиотеку объектных модулей - все необходимые файлы программы заносятся в директорию, совпадающую с ее библиотечным индексом, объектный модуль программы добавляется к соответствующей библиотеке. Программа готова для использования.
Второй этап есть собственно сборка библиотек объектных модулей из исходных текстов программ, входящих в состав библиотеки. Этот этап выполняется для обновления библиотек объектных модулей, а также при изменениях в аппаратном и/или программном обеспечении Центрального информационно - вычислительного комплекса (ЦИВК) ОИЯИ [7]. Учитывая большое количество программ библиотеки, наличие нескольких поддерживаемых в ОИЯИ компьютерных платформ и несколько систем программирования на каждой, основные усилия были направлены на то, чтобы сборка библиотек происходила максимально просто, "от одной кнопки". Для этого для каждой системы программирования были подготовлены соответствующие командные файлы (ОС Windows) или shell-скрипты (Unix). В качестве примера можно привести один из скрипт-файлов сборки библиотеки для ОС Linux:
#!/bin/sh
dir=`ls`
for name in $dir
do
#################################
#  Special compilation mode: z008
#################################
    if test -d $name
    then
       case $name
       in
#######  Fortran + C:
         z008)
           cd $name
           g77 -c $name.f
           gcc -c "$name"c.c
           ar rv ../libjinr.a $name.o "$name"c.o
           ranlib ../libjinr.a
           rm *.o
           cd ..
               ;;
#######  Work directories:
         copy|obsolete|tests|tmp)
               ;;
#######  In general:
         *)
           cd $name
           g77 -c $name.f
           ar rv ../libjinr.a $name.o
           ranlib ../libjinr.a
           rm $name.o
           cd ..
               ;;
       esac
    fi
done
4. Реализация

При изменениях в аппаратном и/или программном обеспечении ЦИВК ОИЯИ, по мере появления новых программ или модернизации старых готовится новая версия библиотек объектных модулей JINRLIB. Библиотеки готовятся на компьютерах с операционной системой (ОС) Linux для работы на ЦИВК ОИЯИ, а также на компьютерах с ОС Windows для всех доступных нам фортранных трансляторов. В настоящий момент на основных машинах ЦИВК работает ОС Scientific Linux версии 4 (SL4), установленная в 64-битном варианте, на некоторых машинах с 32-битной архитектурой стоит ОС Scientific Linux 3 (SL3).
Для вычислительной фермы ЦИВК ОИЯИ библиотеки объектных модулей математических программ общего назначения подготовлены для ОС Scientific Linux 4 с архитектурой CPU x86_64 для трансляторов:
Также поддерживается и пополняется библиотека для ОС Scientific Linux 3 с архитектурой CPU i386 для GNU Fortran 77 compiler (g77) - libjinr.a.
Библиотеки размещаются в директории /usr/libexec/CERNLIB/jinr/.
Библиотеки объектных модулей для ОС Windows 9X/NT/2000/XP подготовлены для трансляторов GNU Fortran 77, Compaq Visual Fortran 6.6, Fortran PowerStation 4.0, Microsoft Fortran 5.00.
Для использования на компьютерах с ОС Windows 9X/NT/2000/XP библиотеку JINRLIB нужно записать в одну из директорий и указать путь к этой директории при вызове компилятора. Если библиотека записана, например, в директории d:\fortran\lib, тогда ссылка на библиотеку с использованием переменной окружения PLACE=d:\fortran\lib будет выглядеть так: %PLACE%\jinrlib.lib

В Таблице приведены примеры вызова компиляторов с использованием библиотек объектных модулей JINRLIB.

Таблица. Примеры вызова компиляторов с использованием библиотек объектных модулей JINRLIB.

Scientific Linux
 g77
(lxpub01-lxpub07)
Вызов компилятора:
g77 myprog.f -L/usr/libexec/CERNLIB/jinr -ljinr 
или:
g77 myprog.f -L$CERN/jinr -ljinr
Просмотр содержимого библиотеки:
ar t /usr/libexec/CERNLIB/jinr/libjinr.a
 
Scientific Linux
gfortran
(lxpub01-lxpub03)
Вызов компилятора:
gfortran myprog.f -L/usr/libexec/CERNLIB/jinr -ljinr95
 
Scientific Linux 
ifort
(lxpub01-lxpub02)
Вызов компилятора:
ifort  myprog.f -L/usr/libexec/CERNLIB/jinr -ljinri
 
Windows 9X/NT/2000/XP
GNU Fortran 77
Вызов компилятора в командной строке:
g77 myprog.for %PLACE%\libjinr.a
Просмотр содержимого библиотеки:
ar  t  %PLACE%\libjinr.a
 
Windows 9X/NT/2000/XP
Compaq Visual Fortran 6.6
Вызов компилятора в командной строке:
fl32 myprog.for %PLACE%\jinrlib.lib
в Project/Settings/Link в Object/Library modules
добавить jinrlib.lib, указав полный путь.
Просмотр содержимого библиотеки:
lib /list %PLACE%\jinrlib.lib
Windows 9X/NT/2000/XP
Fortran PowerStation 4.0
Вызов компилятора в командной строке:
fl32 /MD myprog.for %PLACE%\jinrlib.lib
В оконном режиме:в Build/Settings.../Link в Object/library modules
добавить jinrlib.lib, указав полный путь.
Просмотр содержимого библиотеки - так же.
 
Windows 9X/NT/2000/XP
Microsoft Fortran 5.00
Вызов компилятора в командной строке:
fl myprog.for %PLACE%\jinrlib.lib
Просмотр содержимого библиотеки:
lib %PLACE%\jinrlib.lib ,  con  
или:
lib %PLACE%\jinrlib.lib ,  listlib.txt

5. Технология сопровождения автономных пакетов прикладных программ

Программы, которые по разным причинам не могут распространяться в виде библиотек объектных модулей (программа представляет собой независимый пакет, не является мобильной, недоступен исходный текст и т.п.), при желании автора (владельца) также могут регистрироваться в JINRLIB под уникальным именем со ссылкой на первоисточник. Вся информация, предоставленная автором (владельцем) программы, помещается на WWW-сервере и является доступной. По желанию автора это может быть аннотация программы, полное описание или руководство, исполняемый модуль или исходные тексты программы. Дополнительная информация может быть получена только у автора. Для предоставления таких программ используется форма, приведенная ниже:
  1. Автор (владелец), e-mail
  2. Имя программы
  3. Область применения
  4. Описание возможностей программы, способы представления результатов, алгоритмы, математические методы, физические модели и т.д.
  5. Ссылки на публикации, руководства, инструкции, где описана программ
  6. Компьютерная платформа, на которой работает программа. Среда программирования.
  7. Дополнительные библиотеки и пакеты программ, необходимые для работы программы.
Информация, размещаемая в этом разделе, регулярно обновляется и пополняется. Обновляются разрабатываемые сотрудниками ОИЯИ пакеты прикладных программ, появляются новые программы. Для идентификации таких программ используется классификация, принятая в издательском отделе ОИЯИ. В настоящий момент насчитывается около 40 таких программных продуктов из разделов:
Решение не ограничивать библиотеку JINRLIB только программами, написанными на языках Фортран и С, позволило существенно пополнить библиотеку новыми программами, разработанными сотрудниками ОИЯИ и максимально отражающими широкий спектр научных задач института.

6. Поддержка программирования в среде MPI

В последнее десятилетие происходит бурное развитие технологий программирования параллельных вычислений, в частности, MPI [8]. Эта тенденция нашла свое отражение и в библиотеке JINRLIB.
Классическим примером больших вычислительных программ является MINUIT [9], программа минимизации функций многих переменных, созданная в начале 70-х годов прошлого века Ф.Джеймсом (CERN), и чрезвычайно популярная до сих пор. Популярность этой программы побудила выбрать именно ее как объект распараллеливания.
Была сформулирована следующая стратегия распараллеливания: библиотечная программа, подготовленная для работы в среде MPI, должна успешно работать при любом количестве NP параллельных процессов, вовлекаемых в решение прикладной задачи, в частности и при NP=1. Таким образом, возникает единый исходный текст библиотечной программы, равно пригодный к эксплуатации как на традиционных последовательных вычислительных системах, так и на современных кластерах, состоящих их большого числа процессоров. Необходимым условием для обеспечения такой унификации является наличие заранее подготовленных программ-заглушек (stubs) пакета MPI, что позволяет использовать библиотечные программы даже на тех машинах, где никакого MPI нет вообще. К счастью, базовые операции MPI сконструированы таким образом, что в качестве заглушек достаточно иметь пустые подпрограммы, лишь бы системный загрузчик смог реализовать все внешние ссылки. Эта идея была успешно опробована на упомянутой выше программе MINUIT, которая при работе на кластерах использует "настоящий" MPI, а при работе в однопроцессорной конфигурации - его заглушки [10],[11].

7. WWW-сопровождение библиотеки

Специализированный WWW-сайт http://www.jinr.ru/programs/jinrlib обеспечивает электронный доступ к библиотеке JINRLIB, где можно найти каталог, тексты и описания программ и программных пакетов, библиотеки объектных модулей. Каждый программный пакет находится в отдельной директории со своим именем, что позволяет легко найти нужную программу и удобно сослаться на нужный документ. Ведется каталог вновь поступивших программ и программных пакетов. На сайте также размещены "Положение о библиотеке JINRLIB", классификация математических и прикладных программ, форма для предоставления программ в библиотеку, правила работы с библиотеками объектных модулей (примеры вызова транслятора, параметры компиляции, заказ нужной библиотеки и т.п.). Готовые библиотеки объектных модулей для конкретных компиляторов находятся там же.
Для некоторых программных пакетов на странице с их описанием по просьбе авторов заведены счетчики обращений, в определенной мере отражающие степень интереса к программе. Этого количества счетчиков явно недостаточно для получения полной картины. Но даже из этого небольшого количества информации можно сделать вывод, что наибольшую популярность у пользователей сайта имеют математические пакеты классической тематики, а также программные пакеты, ориентированные на решение конкретной прикладной задачи и имеющие свой круг пользователей.
Примером может служить математический пакет GaussDLL - комплекс программ матрично-векторных операций и решения систем линейных алгебраических уравнений (автор И.Н.Киян) [12], который появился в JINRLIB только в средине июня, а через месяц на его счетчике обращений уже было значение 90. Примером популярных программ другого типа являются регулярно обновляемые пакеты FITTER - программа для фитирования экспериментальных данных[13], и SAS - программа для первичной обработки спектров малоуглового рассеяния [14] (автор А.Г.Соловьев), к которым было более 1500 обращений за время их существования в библиотеке.
Возможно, следует завести такого рода счетчики на все программные пакеты и библиотеки программ для получения более подробной статистики и определения своеобразного рейтинга программ.

8. Заключение

JINRLIB находится в ряду таких библиотек, как CPCLIB [15], CERNLIB [5], библиотека численного анализа НИВЦ МГУ [16], но традиционно отличается от двух последних широтой охвата потенциальных предметных областей, что определяется широтой круга авторов программ, представленных в библиотеке.

Планы развития:
Литература
  1. Сапожников А.П., Сапожникова Т.Ф. Библиотека программ. Большая Российская энциклопедия, т.3, стр. 460-461, Москва, Научное изд-во "Большая Российская энциклопедия", 2005.
  2. Библиотека программ JINRLIB: http://www.jinr.ru/programs/jinrlib
  3. Федорова Р.Н., Широкова А.И. Библиотека программ на фортране. Р11-90-465, ОИЯИ, Дубна, 1990.
  4. Мазный Г.Л. Программирование на БЭСМ-6 в системе "ДУБНА" - М., 1978.
  5. Библиотека программ CERNLIB. http://cern.ch/cernlib/
  6. CVS - Concurrent Versions System: http://www.nongnu.org/cvs/
  7. http://lit.jinr.ru/, раздел "Центральный информационно - вычислительный комплекс ОИЯИ".
  8. MPI: The complete Reference. MIT Press, Cambridge, Massachusetts, 1997.
  9. CERN Program Library Long Writeup D506. F.James. MINUIT. CERN, Geneva, Switzerland.
  10. А.П.Сапожников. Опыт распараллеливания больших вычислительных программ. Параллельная версия программы MINUIT. Р11-2003-216, ОИЯИ, Дубна, 2003.
  11. А.П.Сапожников. Параллельная версия программы MINUIT - минимизации функций многих переменных. http://www.jinr.ru/programs/jinrlib/minuit/
  12. И.Н.Киян. Комплекс программ матрично-векторных операций и решения СЛАУ с вещественными коэффициентами. http://www.jinr.ru/programs/jinrlib/gaussdll/
  13. А.Г.Соловьев. Программа для фитирования экспериментальных данных. http://www.jinr.ru/programs/jinrlib/fitter/
  14. А.Г.Соловьев. Программа для первичной обработки спектров малоуглового рассеяния. http://www.jinr.ru/programs/jinrlib/sas/
  15. Библиотека программ CPC. http://www.cpc.cs.qub.ac.uk/
  16. Библиотека численного анализа НИВЦ МГУ. http://www.srcc.msu.su/num_anal/lib_na/libnal.htm



Program Library JINRLIB

Popkova L.V., Sapozhnikov A.P., Sapozhnikova T.F., Fedorova R.N
The article is devoted to JINRLIB - library of computer programs, created in JINR. The foundation of this library is a kernel of very popular in the past DUBNA. Depending on the way of maintenance and expansion this library is divided onto two parts: the first part expands as a collection of object modules, second part lives as a set of standalone packages in their source form. The principles of organization, the technology of maintenance for the whole library are described. The examples for compiling and linking with usage JINRLIB are given for different computer platforms. The specialized WWW-site, where the library resides, is mentioned. This site provides electronic access to JINRLIB for all needed computer platforms.
Авторы выражают благодарность В.П.Ширикову за настоятельные рекомендации не ограничивать библиотеку JINRLIB только программами, написанными на языках Фортран и С, что позволило существенно пополнить библиотеку новыми программами, а также А.Г.Соловьеву за плодотворные обсуждения по организации структуры сайта.