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

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

< Лекция 2 || Самостоятельная работа 1: 12345 || Самостоятельная работа 2 >

Оптимизация 3: балансировка нагрузки

Профилировка программы с использованием Intel VTune Amplifier XE выявила еще одну особенность используемого алгоритма – разное время выполнения отдельных потоков ( рис. 3.9).

Диаграмма исполнения потоков на CPU (до балансировки нагрузки)

увеличить изображение
Рис. 3.9. Диаграмма исполнения потоков на CPU (до балансировки нагрузки)

В текущей версии программы используется статическая схема балансировки нагрузки, при которой каждый поток проводит трассировку примерно одинакового количества фотонов.

Более эффективным будет использование динамической схемы балансировки нагрузки. Динамическая балансировка осуществляется средствами библиотеки OpenMP (./Opt3/xmcmlLauncher/launcher_omp.cpp):

void LaunchOMP(InputInfo* input, OutputInfo* output, MCG59* randomGenerator, int numThreads)
{
    …
    OutputInfo* threadOutputs = new OutputInfo[numThreads];
    for (int i = 0; i < numThreads; ++i)
    {
        InitThreadOutput(&(threadOutputs[i]), output);
    }

    PhotonTrjectory* trajectory =
        new PhotonTrjectory[numThreads];

    #pragma omp parallel for schedule(dynamic)
    for (uint64 i = 0; i < input->numberOfPhotons; ++i)
    {
        int threadId = omp_get_thread_num();
        ComputePhoton(specularReflectance, input,
            &(threadOutputs[threadId]),
            &(randomGenerator[threadId]),
            &(trajectory[threadId]));
    }

    …

    delete[] trajectory;
}

Время работы программы на CPU после проведенной оптимизации незначительно уменьшилось, а на сопроцессоре уменьшилось еще на 9% до 32 секунд.

Диаграмма исполнения потоков на CPU (после балансировки нагрузки)

увеличить изображение
Рис. 3.10. Диаграмма исполнения потоков на CPU (после балансировки нагрузки)

Сводные результаты

Результаты тестовых запусков алгоритма для моделирования переноса излучения на центральном процессоре и сопроцессоре приведены ниже (таблица 3.1 и таким образом, в результате проделанных оптимизаций удалось повысить производительность программы для intel xeon phi вдвое. причем минимальное время работы достигается за счет использования 120 потоков сопроцессора. такой результат, а так же невысокая эффективность распараллеливания программы, объясняется достаточно большим количеством операций чтения/записи данных в алгоритме, а также наличием синхронизации в оптимизированных версиях. Таблица 13.2 соответственно).

Таблица 3.1. Время работы (в секундах) программы для моделирования переноса излучения на CPU, 100 000 фотонов
Число ядер CPU
1 2 4 8
Базовая версия 125,41 71,57 46,41 34,65
Оптимизация 1 105,85 57,49 38,98 31,7
Оптимизация 2 104,74 57,19 41,56 32,17
Оптимизация 3 103,79 61,85 40,41 30,54

Таким образом, в результате проделанных оптимизаций удалось повысить производительность программы для Intel Xeon Phi вдвое. Причем минимальное время работы достигается за счет использования 120 потоков сопроцессора. Такой результат, а так же невысокая эффективность распараллеливания программы, объясняется достаточно большим количеством операций чтения/записи данных в алгоритме, а также наличием синхронизации в оптимизированных версиях.

Таблица 3.2. Число потоков MIC
Число ядер CPU
60 120 240
Базовая версия 57,74 63,05 -
Оптимизация 1 56,28 48,15 -
Оптимизация 2 43,36 35,5 40,41
Оптимизация 3 38,1 32,45 44,64

Сравнение времени работы лучших версий программы для процессора и сопроцессора при различном числе трассируемых фотонов продемонстрировано на рис. 3.11.

Сравнение времени работы программы для моделирования переноса излучения на CPU и Intel MIC

Рис. 3.11. Сравнение времени работы программы для моделирования переноса излучения на CPU и Intel MIC

Приведенные результаты показывают линейную сложность алгоритма в зависимости от количества трассируемых фотонов, время работы программы на сопроцессоре Intel Xeon Phi примерно соответствует времени ее работы на CPU.

Отметим, что продемонстрированные в работе техники оптимизации не являются исчерпывающими для данной задачи, в частности, не описана векторизация кода, применение которой является одним из важнейших способов повысить эффективность программы на Intel Xeon Phi.

Еще одна особенность программы – применение алгоритма поиска пересечения фотона с границами слоя на каждом шаге моделирования. Как показывают результаты профилировки ( рис. 3.7), это один из самых трудоемких этапов алгоритма моделирования, а значит, необходим анализ существующих алгоритмов поиска пересечений с целью выбора наиболее подходящего для работы на сопроцессоре, и его дальнейшая оптимизация.

Отдельного обсуждения заслуживает и выбор модели программирования на сопроцессоре, которую следует использовать для переноса. Режим "исполнения только на сопроцессоре" оптимален на начальном этапе, когда оптимизация проводится одновременно на CPU и на Intel Xeon Phi. Однако для более эффективного использования сопроцессора имеет смысл использовать один из гетерогенных (CPU + MIC) режимов: offload или симметричный.

И, наконец, не стоит пренебрегать такими стандартными подходами к оптимизации кода на Intel Xeon Phi, как работа с выровненными данными, использование команд программной предвыборки данных и др.

Дополнительные задания

  1. Реализовать версию алгоритма с дублированием массива сигналов на детекторах – output->weightInDetector (избавиться от синхронизации записи результатов в этот массив). Оценить целесообразность такой оптимизации.
  2. Реализовать версию алгоритма, работающего в режиме offload. Выносить на сопроцессор имеет смысл только распараллеленную часть кода, все остальное должно делаться на процессоре.
  3. Применить технику двойной буферизации в режиме offload для обеспечения эффективной передачи результатов моделирования с сопроцессора на CPU. На каждой итерации, начиная со второй, в момент обсчета новой порции фотонов можно организовать передачу результатов трассировки предыдущей порции на CPU.
< Лекция 2 || Самостоятельная работа 1: 12345 || Самостоятельная работа 2 >