• English
  • Русский (Russsian)

Это старая версия документа!


ivutils

это набор утилит C++ для создания численных приложений. ivutils использовались при написании программ EMTL (electromagnetic modeling) и Microvolt (semiconductor device modeling)

Для использования ivutils, нужно их скачать и скомпилировать с вашим кодом: ivutils.zip

ivutils включает следующие утилиты:

файлы
h hpp cpp
описание
vector_3
basis_3
n-ые вектора и линейные преобразования над ними
vector_set упаковщики последовательностей векторов
contour контура
plane_3
region_2
region_3
2D и 3D геометрические тела
gnudump рисование геометрических тел в gnuplot и VTK
grid однородная и неоднородная сетки для хранения и интерполяции данных
linsysn интерфейс для решения системы линейных уравнений с помощью LAPACK и PARDISO
refobj
pencil
умные указатели для контроля над памятью, выделяемой под динамические объекты
math_utils полезные математические функции
utiltl полезные итераторы, модификаторы, и т. д.
seqpack упаковщики данных
logger интерфейс для хранения данных по их символическим именам (с расширенной функциональностью чем у map)
logexc логгеры для записи выходных сообщений во время работы программы и обработки исключений
loggerio
detector
детекторы для записи данных в двоичные или текстовые файлы во время расчета
component конфигурационные настройки
таймеры для измерения машинного времени, затраченного на выбранные функции
компоненты для создания численных приложений
string_utils полезные функции для работы со строками
alg_parser парсеры математических выражений
read_ini парсеры простых ини-файлов
ifmpi
implmpi
интерфейс для работы с MPI
qsub.py Скрипт для запуска задач на произвольном суперкомпьютере
Makefile.arch
Makefile.target
Makefile для компиляции на произвольной архитектуре


Ниже мы прилагаем некоторые примеры использования ivutils.

Парсер математических выражений

Интерфейс для разбора математических выражений. Он позволяет обрабатывать строки, содержащие арифметические операции, скобки и функции, и вычислять значение заданного выражения.

Например

#include "alg_parser.h"
int main(){
  AlgebraicParser AP;
  double val; // here calculated value will be recorded
  int res=AP("sqrt(5+cos(3*pi))", &val); // if res=1 expression is correct
  res=AP("1e-5", &val); // if res=1 expression is correct
  return 0;
}

Код:

Пример работы:

Скрипт для запуска задач на произвольном суперкомпьютере

Для расчета больших задач используются суперкомьютеры.

Запуск задач на них предполагает:

  • создание сценария, в котором вы указываете имя исполняемого файла, требуемое количество процессоров, время исполнения и т. д.
  • запуск этого сценария, что приводит к постановке задачи очередь и последущему ее выполнению.

Различные суперкомпьютеры используют различный синтаксис для создания и запуска таких сценариев. Ручное создание таких сценариев под каждую задачу весьма времезатратно.

Для упрощения этой работы, мы создали специальный скрипт qsub.py на языке python. Он позволяет запускать задачи на произвольном суперкомпьютере, и является переносимым с одного суперкомпьютера на другой. Для определения, какой суперкомпьютер используется в данный момент, скрипт использует команду UNIX 'hostname'.

Для использования скрипта, нужно написать инструкцию, как создавать сценарий и запускать его на вашем суперкомпьютере в функции make_script. Это уже сделано для некоторых суперкомпьютеров: SciNet (Канада), суперкомпьютер Курчатовского Института, МВС-100K (МСЦ РАН), СКИФ МГУ и т. д.

После этого вы можете использовать функцию qsub со следующими аргументами:

qsub(workdir,worksubdir,prog,args,time,np,ppn=0,task='',fname='',act=1,skip='')

Эта функция создает директорию workdir/worksubdir, копирует туда исполняемый файл prog, создает там сценарий SCRIPT.sh для запуска исполняемого файла с аргументами командной строки args на np процессорах на количество секунд time (на некоторых суперкомпьютерах время можно не указывать).

Необязательные параметры функции qsub:

ppn - количество процессоров, используемое на узле (значение по умолчанию ppn=0 приводит к тому, что по возможности используется полное число процессоров на узле),

task - имя задачи,

fname - имя файла или список файлов, которые будут копироваться в workdir/worksubdir,

act - 1 (поставить задачу в очередь) или 0 (не делать этого). В любом случае команда для запуска скрипта будет записана в файл QSUB.sh,

skip - если файл с этим именем будет найден в workdir/worksubdir, функция qsub не выполнится.

Например, допустим ваш исполняемый файл 'a.out' находится в текущей папке '.'. Скопируем в эту папку скрипт 'qsub.py' и создадим в ней 'script.py':

#! /usr/bin/python
from qsub import *
qsub('.','test','a.out','',60*60,8)

Сделаем его исполняемым

chmod u+x script.py

и выполним его

./script.py

В результате в текущей папке будет создана поддиректория test, куда будет перенесен исполняемый файл a.out, а также создан сценарий SCRIPT.sh для запуска этого файла на 8 процессорах на час и файл QSUB.sh, для запуска этого сценария.

Как правило, на разных суперкомпьютерах вы имеете различные пути к домашней директории, где вы компилируете ваш проект, и к рабочей директории, где вы исполняете задачу и сохраняете ее результат. Вы можете прописать такие пути для каждого суперкомпьютера и пользователя (который определяется функцией UNIX 'whoami') в функции getdirs.

После этого вы можете пользоваться функцией qsub_appl:

qsub_appl(workdir,worksubdir,prog,args,time,np,ppn=0,task='',fname='',act=1,skip='')

Аргументы этой функции такие же, как и у функции qsub. Единственное отличие в том, что директория workdir/worksubdir будет создаваться в вашей рабочей директории, а исполняемый файл prog и вспомогательный файл fname будут искаться в вашей домашней директории.

 
/home/kintechlab/fdtd.kintechlab.com/docs/data/attic/ru/ivutils.1352788271.txt.gz · Последние изменения: 2012/11/13 10:31 — deinega     Наверх