Суперкомпьютерное моделирование [ВМК-5.1]

Итак. Нам, товарищи, предстоит сдать "это".

Общая информация

Срок сдачи - 5 апреля. Требуется прислать на supercomp2010@gmail.com отчет и ЛИСТИНГИ Ваших программ.
Вкратце, что надо:
0) внести коррективы в предложенные программы и работать уже только с ними;
1) погонять эти программы (на Регатте) и померить их эффективность;
2) переписать программу с использованием openmp и померить эффективность (bluegene);
3) померить эффективность предложенной программы на petsc.
4) написать отчет по проведенным экспериментам.


0) http://angel.cs.msu.ru/~basrav/supercomp2010/ - задания (индивидуальны для каждого), методички, лекции и пр.

1) http://hpc.cmc.msu.ru/bgp/quickstart - Bluegene quick-start.

2) http://hpc.cs.msu.ru/bgp/jobs/reservations

3) ключи для 501 группы (VPN)
http://tka4.org/materials/study/X%20sem/2.%20Supercomp%20Modeling/501

4) Задания опять поменялись для 3 и 4 варианта (2010.03.29). Так что перезакачайте с ссылки 1) заново assignments.pdf и варианты своих программ.


Специально для Серёги проги:

http://tka4.org/materials/study/X%20sem/2.%20Supercomp%20Modeling/progs%...
только тут sFtpDrive с трояном, можешь поискать другой себе) Но троян там в кейгене, так что может это сам кейген за троян антивирусы принимают. Отруби антивирь и не парься, в общем :)

Специально для Санька:

логинишься на регатту и блюген с помощью putty (см. пункт "Специально для Сереги проги").
чтобы сидеть на bluegene - качай там же openvpn и ключи для нашей группы -
http://tka4.org/materials/study/X%20sem/2.%20Supercomp%20Modeling/501


Руководство по сдаче прака

ВНИМАНИЕ! Читайте от начала до конца, т.к. здесь не всё последовательно.

1) Регатта

1.1) Компиляция генератора:

mpiCC generator_spd.cpp -o generator -qsmp=omp

генератор работает долго (особенно на Регатте с размером матрицы 4096), поэтому советую там приписать омп прагму:

#pragma omp parallel for private(i,j)
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++)
output[i][j] = mult_row_by_row(matrix[i], matrix[j], size);
}

и запускать генератор для матриц размеров 2048 и 4096 так:

1.2) Запуск генератора:

mpisubmit generator 4096 matrix4096 -w 00:15:00 -n 16 -stdout out.txt

Замечание:
Не мудрите с настройками времени - если поставите меньше 5 минут - то проги могут падать просто так. Также не надо мудрить с -О1, -О2, -О3 - в этих режимах операции с floating point производятся по разному (есть у меня такое подозрение, хотя возможно оно ошибочное. Но про -О4 и -О5 точно забудьте :).

1.3) Компиляция программы по варианту:

mpicc program.c -o program

Если вы решили использовать что-нибудь из math.h то так же приписывайте флаг -lm (линковать math).

1.4) Запуск программы:

mpisubmit program ../generator/matrix2048 -w 00:15:00 -n 8 -stdout text.txt

Замечание:
Предлагаю Вам хранить программу по варианту, генератор и петсц версию в отдельных директориях. Это позволит избежать путаницы, которой здесь будет выше поднебесной.
(К примеру: cg, genenerator, petsc).


2) Грустный Гена/P (Blue Gene/P)

2.1) Компиляция генератора (того же самого, что на регатте):

mpixlcxx_r generator_spd.cpp -lm -qsmp=omp -o generator

2.2) Запуск генератора:

cp generator /gpfs/data/s205XXXX/generator
cd /gpfs/data/s205XXXX
export OMP_NUM_THREADS=4
export COMMAND="generator -- 4096 matrix4096"

LL_RES_ID=fen1.22.r mpisubmit.bg -w 00:15:00 -n 1 -stdout testout.txt -e "OMP_NUM_THREADS=4" $COMMAND

Замечание:
export OMP_NUM_THREADS=4 - указывать надо обязательно, иначе OpenMP не будет работать нормально.

Замечание:
Для удобства вынесите команды (команды компиляции или запуска и пр.) в отдельный файл, к примеру compile.sh (обычный текстовый файл).
А затем вместо того, чтобы каждый раз запускать по 10 команд - редактируйте только complile.sh и выполняйте только bash compile.sh.

Замечание:
Обратите внимание на размеры матриц в байтах.
Для 1024 - 8 388 612
Для 2048 - 32 768 K
Для 4096 - 131 072 K
Если размеры иные - то ваша программа вряд ли будет корректно работать.

2.3) Компиляция программы по варианту:

mpixlc_r cg.c -o cg -qsmp=omp

2.4) Запуск программы по варианту:

cp cg /gpfs/data/s205XXXX/cg
cd /gpfs/data/s205XXXX
export OMP_NUM_THREADS=3
export COMMAND="cg -- matrix1024"
LL_RES_ID=fen1.22.r mpisubmit.bg -w 00:15:00 -n 1 -stdout testout.txt -m smp -e "OMP_NUM_THREADS=3" $COMMAND

Замечание:
Чтобы узнать, где находится запущенная программа в очереди на выполение - выполните команду llq.
Чтобы узнать только последние несколько верхних записей - выполните llq | head.
Чтобы найти только ваши задания - выполните llq | grep ПОСЛЕДНИЕ_3_ЦИФРЫ_ИЗ_СТУДАКА

Замечание:
Есть так называемый приоритетный режим работы на Гене. Это значит, что Ваши задачи будут пробиваться вперед по очереди, если вы запустили программу в приоритетном режиме. Чтобы это сделать, нужна эта строка:
LL_RES_ID=fen1.XX.r
Чтобы узнать, какой именно ХХ вписать - посмотрите текущие активные режимы командой llqres.
Если напротив режима А - то используйте его.
Режимы доступны - понедельник (вечер), вторник (день), пятница (вечер), воскресенье (вечер) (может что спутал).



3) Petsc

Аналог программы для решений СЛАУ (надо делать только на Гене).

3.1) Компиляция PETSc:

export PETSC_DIR="/home/basrav/petsc-2.3.3-p15"
export PETSC_ARCH="bgp-production"
make -f make_petsc petsc_linsol

3.2) Запуск PETSc:

cp petsc_linsol /gpfs/data/s205XXXX/petsc
cd /gpfs/data/s205XXXX
export COMMAND="petsc -- -atol 1.0e-100 -ksp_max_iter 1100 -rtol 0.0 -f matrix2048 -pc_type none -ksp_type cg -log_summary"
mpisubmit.bg -w 00:15:00 -n 16 -mode VN $COMMAND



Информация по отчету

1) Титульный лист
Стандартный титульный лист.

2) Оглавление

3) Формулировка задачи
Что надо было сделать, какие начальные приближения решения задали, какое ограничение итерации и какая погрешность.

4) Внесенные изменения в программу по части OpenMP
как и куда код вставляли (прагмы).

5) График ускорения на Регатте
у меня получился в раз 6 максимальное ускорение на 8 процессорах. Но это с ключом О3, который я не советую никому использовать.
Пример (для второго варианта, cg.c):

6) Графики ускорения на Блюгене с MPI+OpenMP
Пример (для второго варианта, cg.c):

7) График невязки
Пример (для второго варианта, cg.c):

8) Графики ускорения Petsc (с якоби и без)
Пример без Якоби:


Как и куда сдавать?

Отчет и ЛИСТИНГИ ПРОГРАММ отсылайте на supercomp2010@gmail.com.
Затем будет опубликован список людей, которым надо будет пройти собеседование по коду программ и вообще по выполнению практикума.

Помните, что это всё не Святым Духом генерится и что реклама на сайте - это не для красоты! :)