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

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


Скачать

В настоящее время EMTL выкладывается в виде библиотек для Linux (gcc) и Windows (MS VS 2005, MS VS 2010). Все необходимые заголовочные файлы включены в предоставляемый архив. Сам код сейчас находится в состоянии тщательного документирования, и его выкладывание планируется летом 2012.

Версия 2010

Версия 2012. Более подробно документированы include файлы, исправлены некоторые ошибки, однако пока нет библиотек для UNIX. Если вы работаете под Windows, пользуйтесь этой версией.

Утилиты ivutils

EMTL базируется на библиотеке ivutils. Это библиотека утилит, которые могут быть использованы для создания численных приложений.

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

  • геометрические объекты (вектора, плоскости, 2D и 3D объекты, линейное преобразование над ними)
  • интерфейс для решения системы линейных уравнений с помощью LAPACK и PARDISO
  • однородная и неоднородная сетки для хранения и интерполяции данных
  • детекторы для записи данных в двоичные или текстовые файлы во время расчета
  • таймеры для измерения машинного времени, затраченного на выбранные функции
  • логгеры для записи выходных сообщений во время работы программы и обработки исключений
  • умные указатели для контроля над памятью, выделяемой под динамические объекты
  • пакеры для упаковки данных
  • парсеры математических выражений и простых ини-файлов
  • интерфейс для работы с MPI

Для использования библиотечных утилит, нужно их скачать и скомпилировать с вашим кодом. Мы прилагаем некоторые примеры их использования.

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

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

Например

#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/download.1342980485.txt.gz · Последние изменения: 2012/07/22 22:08 — deinega     Наверх