Нижегородский государственный университет им. Н.И.Лобачевского
Опубликован: 02.06.2014 | Доступ: свободный | Студентов: 183 / 28 | Длительность: 04:58:00

Самостоятельная работа 2: Оптимизация вычислительно трудоемкого программного модуля для архитектуры Intel Xeon Phi. Линейные сортировки

Анализ параллельной реализации LSD на Intel Xeon Phi

Параллельный алгоритм LSD состоит из следующих шагов:

  1. 1. Выделение памяти.
  2. 2. Цикл по количеству байт в сортируемом типе данных4Для типа double это будет цикл из 8 итераций.:
    • Создание логических задач.
    • Подсчёт элементов (Counter).
    • Пересчёт массива counters.
    • Размещение элементов (Placer).
  3. Освобождение памяти.

Представим графики времени работы каждого этапа параллельного алгоритма LSD на хосте и сопроцессоре при сортировке 100 миллиона элементов ( рис. 4.23, рис. 4.24). Предварительно внесём изменения в программный код и сделаем следующие замечания:

  1. Количество потоков в программе будем всегда устанавливать в автоматическом режиме.
    task_scheduler_init init();
  2. Параметр nThreads будем так же передавать в функцию сортировки. Таким образом, если nThreads меньше количества потоков, то программа будет использовать только nThreads потоков. Если nThreads больше количества доступных потоков, то часть потоков получат несколько порций массива на обработку. Таким образом, это будет способствовать лучшей балансировке нагрузки между потоками, а параметр nThreads по сути будет задавать размер порции планирования.
  3. В код программы будут добавлены измерения времени каждого из этапов алгоритма.
Профиль параллельной сортировки LSD на хосте

увеличить изображение
Рис. 4.23. Профиль параллельной сортировки LSD на хосте
Профиль параллельной сортировки LSD на сопроцессоре

увеличить изображение
Рис. 4.24. Профиль параллельной сортировки LSD на сопроцессоре

Глядя на профили можно сделать следующие выводы:

  1. Время, которое отводится на выделение/освобождение памяти, создание логических задач и пересчёт элементов массива counters, очень мало по сравнению со временем работы программы и им можно пренебречь. Стоит также отметить, что время выделения/освобождения памяти не зависит от параметра nThreads, в то время как остальные две величины растут при увеличении этого параметра.
  2. Основной вклад в работу алгоритма вносят подсчёт и размещение элементов.
  3. На сопроцессоре время подсчёта сначала уменьшается при увеличении nThreads, а потом начинает возрастать из-за возрастающей конкуренции за ресурсы кэш-памяти между потоками.

Задача сортировки не является вычислительной, поэтому её производительность во многом определяется эффективностью использования подсистемы памяти вычислительной системы (в частности кэш-памяти).