среда, 26 марта 2008 г.

Программирование со ScaLAPACK

Показали мне тут на днях программу на Fortran, которая решает СЛАУ на многопроцессорном компьютере с помощью библиотеки ScaLAPACK.

Сам ScaLAPACK (Sca = Scalable, масштабируемый, т.е. с возможностью распараллеливания на несколько процессоров) по своей структуре очень похож на LAPACK. Такие же маловразумительные названия в виде набора букв. Первая - P (parallel), дальше - тип данных. потом тип матрицы, далее название решаемой задачи (решение СЛАУ, проблема с.з. и т.д.).

Метод, которым в этой проге решалась СЛАУ, остался, к сожалению, неизвестным. Применялся солвер, решающий систему с плотной матрицей. Использовалось 6 процессоров, при этом матрица разбивалась на 6 частей. Раскладывание кусков по процессорам производилось вручную (т.е. значительная часть программы занималась именно этим). Да, ещё: как нам объяснили, каждому процессору потребуются элементы из других кусков, так что будут обмены (хорошо хоть эту задачу берёт на себя солвер, использующий MPI). Как производится сборка результата в один вектор - осталось непонятным, читать фортрановский код тяжело и непривычно.

Итого. ScaLAPACK - это весьма быстрая библиотека с большой историей использования. Создавалась она в те времена, когда Fortran был в чести, поэтому даже в её реализациях на С и Java надо не забывать про особенности хранения матриц (column-major order). Плюс многое надо делать руками (кроме раскладывания матриц по процессорам может потребоваться, например, какой-нибудь промежуточный массив с нетривиальным заполнением, который тоже надо самому создавать). В общем, ничего сложного, но хочется чего-то более человеческого.

Думается, если б существовала SKA-LAPACK расчёты шли бы веселее:)

From now on I'm not a grim joker anymore. Basta.

Комментариев нет: