Lanczos, C++, MPI, 2
Основные авторы описания: Слюсарь Д.Р.
Содержание
1 Ссылки
Для исследования масшабируемости алгоритма была написана реализация на языке C++ с использованием MPI.
2 Локальность данных и вычислений
2.1 Локальность реализации алгоритма
2.1.1 Структура обращений в память и качественная оценка локальности
2.1.2 Количественная оценка локальности
3 Масштабируемость алгоритма и его реализации
3.1 Масштабируемость алгоритма
3.2 Масштабируемость реализации алгоритма
Реализация была протестирована на суперкомпьютере Ломоносов.
Были исследованы:
- время выполнения программы в зависимости от размера входных данных (матрицы);
- время выполнения в зависимости от размера параллельных нод.
Дополнительно было измерено время работы исходя из оптимизационных флагов компилятора GCC.
Параметры запуска алгоритма:
- размер матрицы от 20000 до 175000 с шагом 2500;
- количество процессоров от 8 до 128 с шагом 8.
Программа запускалась на суперкомьютере "Ломоносов" со следующими характеристиками:
- Компилятор GCC 5.2.1;
- Версия MPI 1.8.4;
- Сборка проводилась командой:
mpic++ -std=c++0x -O2 <CPP_FILE> -lm -static-libstdc++
Полученная эффективность реализации варьируется в пределах от 2% (на маленьких входных данных) до 45% (на больших входных данных и максимальном числе нодов).
На рисунке 1 представлена эффективность программы при отсутствии флага оптимизации O2.
На рисунке 2 представлена эффективность алгоритма с оптимизацией компилятора GCC (-O2).
Как видно из графиков выше, средняя эффективность минимальна при малых входных данных (на размере матрицы в 10000). В среднем данный показатель держится между 9% и 14%.
При этом, оптимизация компилятора MPIC++ позволяет получить выигрыш в эффективности более чем в 3 раза (45,5% против 14,7%). Однако, как можно заметить из графиков, при оптимизации алгоритм ведет себя более нестабильно, скорее всего из-за значительной траты времени на работу с памятью (более плавные участки свидетельствует о том, что необходимые данные нашлись в кеше).