Вы находитесь на странице: 1из 5

Зайцев Д.А.

Грид-технологии и облачные вычисления

Лабораторная работа № 1

Установка и использование пакета LAPACK

Краткая информация

Пакет LAPACK (http://www.icl.utk.edu/research/lapack) для решения задач линейной алгебры, в


частности систем линейных алгебраических уравнений, является одним из наиболее широко
используемых пакетов численных методов, руководство пользователя LAPACK является одним
из наиболее цитируемых источников компьютерных наук. Кроме того, пакет используют для
тестирования производительности суперкомпьютеров и кластеров, результаты представлены на
http://top500.org

Задание

1. Установить и протестировать пакет LAPACK и интерфейс LAPACKE

2. Выполнить тестирование пакета, решая системы размера 10х10, 100х100, 1000х1000,


10000х10000 и т.д., выполнить табуляцию времени решения систем

3. Откомпилировать и запустить программу решения примера системы, выполнить проверку


решения

4. Разработать и запустить программу решения заданной системы, выполнить проверку решения

Содержание отчёта

1. Протокол (листинг) команд и результатов их выполнения (сокращённо)


2. Таблица тестирования производительности компьютера
3. Расчёт исходных данных варианта задания
4. Текст программы, Makefile и результаты решения системы
5. Проверка решения системы
6. Выводы

Порядок выполнения работы

I. Установить системы программирования на языках C и Fortran

1. Установить компилятор gcc (а также g++, make)

sudo apt update


sudo apt install build-essential

2. Установить компиляторы gfortran и python


sudo apt update
sudo apt install gfortran python

II. Установить пакет LAPACK и интерфейс LAPACKE

1. Скачать архив lapack-3.8.0.tar.gz с исходным текстом LAPACK c

http://www.netlib.org/lapack/

2. Распаковать архив в домашний каталог

tar -zxvf lapack-3.8.0.tar.gz

3. Перейти в каталог LAPACK

cd lapack-3.8.0

4. Скопировать пример файла параметров построения пакета

cp make.inc.example make.inc

5. Отредактировать файл параметров построения пакета

gedit make.inc

6. Построить и протестировать библиотеки LAPACK

make

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

ulimit -s unlimited

по завершению получить таблицу успешного тестирования

--> LAPACK TESTING SUMMARY <--


Processing LAPACK Testing output found in the TESTING directory
SUMMARY nb test run numerical error other error
================ =========== ================= ================
REAL 1292645 0 (0.000%) 0 (0.000%)
DOUBLE PRECISION 1293457 0 (0.000%) 0 (0.000%)
COMPLEX 752816 0 (0.000%) 0 (0.000%)
COMPLEX16 743716 1 (0.000%) 1 (0.000%)

--> ALL PRECISIONS 4082634 1 (0.000%) 1 (0.000%)

7. Построить интерфейс CBLAS

cd CBLAS
make
cd ..

7. Построить интерфейс LAPACKE

cd LAPACKE
make

8. Запустить тестовые примеры LAPACKE

cd example
make

проверить результаты тестирования, например, результаты решения системы

./xexample_DGESV_colmajor

Entry Matrix A
0.34 -0.11 0.28 0.30 0.41
-0.30 -0.16 0.27 -0.22 0.05
-0.02 0.13 -0.14 0.01 0.45
0.42 0.14 0.22 -0.36 0.11
-0.48 -0.26 -0.36 0.30 -0.34

Right Rand Side b


-0.10
-0.37
-0.39
0.50
-0.28

LAPACKE_dgesv (row-major, high-level) Example Program Results

Solution
1.29
-0.31
-0.35
-0.47
-0.80

III. Для тестирования пакета использовать программу

example_DGESV_rowmajor.c

и соответствующий исполнимый модуль выполняющий построение исходных данных с


помощью генератора случайных чисел и вызов функции LAPACKE_dgesv

xexample_DGESV_rowmajor

Например, для решения системы размера 10х10:

./xexample_DGESV_rowmajor -n 10
Для измерения времени использовать утилиту time и перенаправить вывод в фиктивное нулевое
устройство

time ./xexample_DGESV_rowmajor -n 2000 > /dev/null

IV. Компиляция и выполнение тестовой программы из Приложения 1 с помощью тестового


Makefile из Приложения 2

1. Выйти из каталога example, создать собственный тестовый каталог и перейти в него

cd ..
mkdir myex
cd myex

2. Создать файл программы pl_ex1.c и Makefile с помощью текстового редактора gedit,


скопировав их содержимое из Приложений 1 и 2

3. Запустить тест и проверить полученное решение

IV. Модифицировать программу lp_ex1.c и Makefile для решения указанной в варианте задания
системы, назвать соответствующую программу lp_ex_surmame.c, выполнить полную проверку
полученного решения

Вариант задания:

- размер системы 5х5;


- для получения матрицы коэффициентов использовать строку из 30 символов, полученную
путем конкатенации Вашей фамилии, имени и отчества, дополненных при необходимости
символами имен представителей Вашего генеалогического дерева;
- записать последовательность номеров ASCII кодов, нечетные числа взять с отрицательным
знаком, все числа затем поделить на 10;
- первые 25 чисел использовать в качестве матрицы A, записанной по строкам;
- последние 5 чисел использовать как вектор правой части b.

Представить отчёт с листингом терминала (основные этапы), расчётом варианта,


разработанной программой и результатами проверок решений в pdf файле

Приложение 1. Тестовая программы lp_ex1.c

/* solving the matrix equation A*x=b using LAPACK function

lapack_int LAPACKE_sgesv( int matrix_layout, lapack_int n, lapack_int nrhs,


float* a, lapack_int lda, lapack_int* ipiv, float* b,
lapack_int ldb ); */

#include <stdio.h>
#include <lapacke.h>
#define size 3 /* dimension of matrix */

int main()
{
lapack_int n=size, nrhs=1, lda=size, ldb=1, info, ipiv[size];
float A[size*size] = {2.0,5.0,8.0,
3.0,-6.0,9.0,
4.0,7.0,-1.0};
float b[size] = {13.0,25.0,-7.0};
int i,j;

info = LAPACKE_sgesv(LAPACK_ROW_MAJOR, n, nrhs, A, lda, ipiv, b, ldb);

for (i=0; i<n; i++) printf("%f\n", b[i]); /* print vector x */


}

Приложение 2. Makefile для построения и запуска тестовой программы

include ../../make.inc

all: lp_ex1

LIBRARIES = ../../$(LAPACKELIB) ../../$(LAPACKLIB) $(BLASLIB)

lp_ex1: lp_ex1.o $(LIBRARIES)


$(LOADER) $(LOADOPTS) -o $@ $^
./$@

clean: cleanobj cleanexe


cleanobj:
rm -f *.o
cleanexe:
rm -f x*

.c.o:
$(CC) $(CFLAGS) -I. -I../include -c -o $@ $<