Назад до змісту 

Обчислення на суперкомп'ютері

Для вирішення обчислювальних завдань, що вимагають великого часу обчислень або великих обсягів пам'яті, розроблені спеціальні функції, які надають користувачеві ресурси суперкомп'ютера. З використанням цих функцій обчислення виробляються не так на одному процесорі, але в виділеному безлічі ядер суперкомп'ютера, кількість яких замовляє користувач. Існують такі функції, які використовують суперкомп'ютер (парфункції).

1) matMultPar1x8 — обчислення твору двох матриць;

2) adjointDetPar — обчислення приєднаної матриці;

3) charPolPar — обчислення характеристичного полінома матриці;

4) polMultPar — обчислення твору двох поліномів;

5) BellmanEquationParA — рішення однорідного рівняння Беллмана $Ax=x$;

6) BellmanEquationParA,b — рішення однорідного рівняння Беллмана $Ax+b=x$;

7) BellmanInequalityParA — вирішення однорідної нерівності Беллмана $Ax\leq x$;

8) BellmanInequalityParA,b — вирішення однорідної нерівності Беллмана $Ax+b\leq x$;

До застосування будь-якої з цих функцій користувач повинен вказати параметри, що визначають паралельне оточення:

$TOTALNODES$ — загальна кількість вузлів кластера, які виділяються для обчислень,

$PROCPERNODE$ — кількість MPI-процесів, що запускаються на одному вузлі,

$CLUSTERTIME$ — максимальний час (у хвилинах) виконання програми, після закінчення якого програма примусово завершиться,

$MAXCLUSTERMEMORY$ — обсяг пам'яті, що виділяється для JVM для одного MPI-процесу (опція -Xmx).

Для завдання кількості ядер на одному вузлі користувач повинен знати, який використовується кластер і скільки доступно йому ядер на вузлі. За промовчанням параметри $TOTALNODES$ і $PROCPERNODE$ встановлюються так, щоб використовувалася половина всіх вузлів кластера і на кожному вузлі було запущено по одному процесу, а $CLUSTERTIME$ двом хвилинам. Якщо одному вузлі запускається $K$ процесів, кожному з них буде виділено $MAXCLUSTERMEMORY/K$ мегабайт пам'яті.

14.1 Паралельні поліноміальні обчислення

Для паралельного обчислення твору поліномів треба використати команду polMultPar(p1, p2), де $p1$, $p2$ — вхідні поліноми.

Доки немає результату

14.2 Паралельні матричні обчислення

Для паралельного обчислення твору матриць $m1$ та $m2$ необхідно використовувати команду

Доки немає результату
Для паралельного обчислення приєднаної матриці для матриці $m$ можна використовувати команду
Доки немає результату

14.3 Запуск власних паралельних програм

Mathpar дозволяє завантажувати та виконувати власні паралельні програми. Пакет з програмою повинен розміщуватися в кореневій директорії проекту MathPar. Для того, щоб ваша програма змогла взаємодіяти із системою керування завданнями, необхідно у ваш main-метод додати рядок ініціалізації QueryResult queryRes=Tools.getDataFromClusterRootNode(args) (відразу після MPI.Init) і рядок завершення Tools.sendFinishMessage(args) (перед MPI.Finalize), цей код буде однаковим для всіх ваших програм). Також ви можете передати вашій програмі будь-які аргументи з web-інтерфейсу Mathpartner. Всередині програми їх можна отримати, викликавши метод queryRes.getData(). Нижче наведено приклад паралельної програми, яка просто виводить у стандартний потік виведення передані їй аргументи.

Доки немає результату

Далі програму потрібно скомпілювати і папку з програмою запакувати в zip-архів. Потім потрібно завантажити отриманий архів на сервер, скориставшись вкладкою "файли" та натиснувши кнопку "завантажити файл". Далі вся робота буде виконуватися за допомогою функцій mathpar.

Оперативна пам'ять ділиться поміж усіма ядрами процесора порівну. Наприклад, якщо на вузлі кластера є 8GB пам'яті, то якщо ви запросили 4 ядра на одному процесорі, кожному буде виділено 2GB, а якщо одне ядро - воно отримає всі 8GB.

Команда для завантаження вашого zip-архіву, в якому скомпіловані java-класи, виглядає так:

uploadToCluster(FileName), де FileName - ім'я zip-архіву.

Щоб переглянути список всіх завантажених на кластер файлів, використовується команда

showFileList().

Для запуску вашої програми використовується команда

runUploadedClass(archieveName, classPath, param0, param1,...), де archieveName - ім'я завантаженого zip-архіву з програмою, classPath - шлях до класу, що містить main-метод (із зазначенням пакетів), paramX - довільні параметри, вказані через кому, які будуть передані до вашої програми.

Щоб стежити за роботою запущеної програми, використовується команда

getStatus(taskID)

Також є можливість одержати список усіх завдань поточного користувача з описом їх станів:

showTaskList()

Для того, щоб отримати вміст файлів із потоком стандартного виведення/помилок, використовуються команди

getOut(taskID)

getErr(taskID)

Файли завдання (файли, що містять потік виведення/помилок) зберігаються на кластері дві доби, zip-архіви, що містять скомпіловані java-класи, зберігаються 30 днів. Назад до змісту