Уровень реализации

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.

Рисунок 1. Эффективность параллельной реализации алгоритма Ланцоща на MPI.

На рисунке 2 представлена эффективность алгоритма с оптимизацией компилятора GCC (-O2).

Рисунок 2. Эффективность параллельной реализации алгоритма Ланцоща на MPI с использованием оптимизации компилятора -O2.

Как видно из графиков выше, средняя эффективность минимальна при малых входных данных (на размере матрицы в 10000). В среднем данный показатель держится между 9% и 14%.

При этом, оптимизация компилятора MPIC++ позволяет получить выигрыш в эффективности более чем в 3 раза (45,5% против 14,7%). Однако, как можно заметить из графиков, при оптимизации алгоритм ведет себя более нестабильно, скорее всего из-за значительной траты времени на работу с памятью (более плавные участки свидетельствует о том, что необходимые данные нашлись в кеше).

4 Динамические характеристики и эффективность реализации алгоритма

5 Результаты прогонов