=Paper=
{{Paper
|id=Vol-2064/paper24
|storemode=property
|title=
Использование возможностей OPENMP для ускорения расчетов в пакете прикладного программного обеспечения ADEPT
(Using the OPENMP capabilities to speed up the calculations in the ADEPT software package)
|pdfUrl=https://ceur-ws.org/Vol-2064/paper24.pdf
|volume=Vol-2064
|authors=Andrei Gorchakov
}}
==
Использование возможностей OPENMP для ускорения расчетов в пакете прикладного программного обеспечения ADEPT
(Using the OPENMP capabilities to speed up the calculations in the ADEPT software package)
==
УДК 519.853.4 Горчаков А.Ю. Федеральный исследовательский центр «Информатика и управление» РАН, г. Москва, Россия ИСПОЛЬЗОВАНИЕ ВОЗМОЖНОСТЕЙ OPENMP ДЛЯ УСКОРЕНИЯ РАСЧЕТОВ В ПАКЕТЕ ПРИКЛАДНОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ADEPT* Аннотация В данной работе приводится пример использования возможностей OpenMP Application Programming Interface для ускорения расчетов матрицы первых производных вектор- функции (матрицы Якоби) при решении задач о наименьших квадратах методом Левенберга- Марквардта. Вычисление матрицы Якоби производится с помощью методологии быстрого автоматического дифференцирования, при этом применяется пакет прикладного программного обеспечения Adept версии 1.0. Для ускорения расчетов использовано директивное многопоточное программирование c динамическим распределением вычислений между потоками и технология SIMD (Single Instruction Multiple Data) – принцип компьютерных вычислений, позволяющий обеспечить параллелизм на уровне данных. Вышеупомянутые технологии позволили в полной мере задействовать особенности архитектуры современных процессоров Intel, такие как многоядерность/многопоточность, расширение системы команд микропроцессоров Intel/AMD – Advanced Vector Extensions (AVX/AVX2), обрабатывающее данные в формате с плавающей запятой в группах длиной 256 бит, и FMA (Fused Multiply-Add) – технологию, предназначенную для выполнения совмещенной операции умножения-сложения. В результате, при минимальных трудозатратах, время вычисления матрицы первых производных вектор-функции на четырех ядерном процессоре удалось ускорить в 12 раз, по сравнению с вычислениями в однопоточном варианте. Ключевые слова OpenMP; SIMD; матрица Якоби; задача о наименьших квадратах; метод Левенберга- Марквардта. Gorchakov A.Y. Federal Research Center Computer Science and Control of the Russian Academy of Sciences, Moscow, Russia USING THE OPENMP CAPABILITIES TO SPEED UP THE CALCULATIONS IN THE ADEPT SOFTWARE PACKAGE Abstract In this paper, an example is given of using the OpenMP Application Programming Interface to accelerate the calculation of the matrix of the first derivatives of a vector function (the Jacobi matrix) in the solution of least-squares problems by the Levenberg-Marquardt method. The calculation of the Jacobi matrix is produced using the methodology of fast automatic differentiation, the use of application software package Adept 1.0. To speed up the calculations, we used directive multithreaded programming with the dynamic distribution of computations between threads and SIMD (Single Instruction Multiple Data) technology, the principle of computer computation, which allows to provide parallelism at the data level. The aforementioned technologies allowed to fully exploit the features of the architecture of modern Intel processors, such as multi-core / multithreading, the expansion of the command system of microprocessors Intel / AMD – Advanced Vector Extensions (AVX / AVX2), processing data in floating point format in groups of 256 bits, and FMA (Fused Multiply-Add) – a technology designed to perform a combined multiply-add operation. As a result, with a minimum * Труды II Международной научной конференции «Конвергентные когнитивно- информационные технологии» (Convergent’2017), Москва, 24-26 ноября, 2017 Proceedings of the II International scientific conference "Convergent cognitive information technologies" (Convergent’2017), Moscow, Russia, November 24-26, 2017 202 of labor, the time for calculating the matrix of the first derivatives of the vector function on four core processors was 12 times faster, compared to calculations in a single-threaded version. Keywords OpenMP; SIMD; the Jacobi matrix; the least-squares problem; the Levenberg-Marquardt method. Введение Среди задач безусловной оптимизации часто выделяют задачи минимизации функций F(x) вида: 𝑚 1 1 2 𝐹(𝑥) = ∑ 𝑓𝑖2 (𝑥) = ‖𝑓(𝑥)‖2 → min, (1) 2 2 𝑖=1 где f(x) – нелинейная вектор функция с m компонентами 𝑓𝑖 (𝑥), а 𝑥 ∈ 𝑅𝑛, ‖𝑓(𝑥)‖2- евклидова норма. Задачи подобного типа возникают при математическом моделировании физических процессов, например, задача об оптимальном нагреве стержня [1], обратная коэффициентная задача для нестационарного уравнения теплопроводноcти [2], многие задачи машинного обучения. Хотя для решения задач (1) можно использовать универсальные методы, более эффективным будет применение специальных алгоритмов, разработанных именно для задач о наименьших квадратах. Примерами таких алгоритмов являются метод Гаусса-Ньютона и Левенберга-Марквардта [3]. Оба метода используют особую структуру градиента функции и её матрицы Гессе. Пусть J(x) матрица Якоби для f(x) и 𝐻𝑖 (𝑥) матрица Гессе для 𝑓𝑖 (𝑥). Тогда градиент g(x) и матрица Гессе H(x) для F(x) можно записать как: 𝑔(𝑥) = 𝐽(𝑥)𝑇 𝑓(𝑥), (2) 𝑇 𝐻(𝑥) = 𝐽(𝑥) 𝐽(𝑥) + 𝑄(𝑥), (3) 𝑖=1 𝑓𝑖 (𝑥)𝐻𝑖 (𝑥) . Сделав предположения о том, что слагаемое где 𝑄(𝑥) = ∑𝑚 𝐽(𝑥) 𝐽(𝑥) доминирует над Q(x), 𝑇 получаем следующие итерационные схемы методов. Для метода Гаусса-Ньютона: 𝑥𝑘+1 = 𝑥𝑘 + 𝛼𝑘 𝑝𝑘 , (4) где 0 < 𝛼𝑘 ≤ 1 – шаг метода, 𝑝𝑘 - направление поиска, определяемое из решения системы уравнений 𝐽𝑘𝑇 𝐽𝑘 𝑝𝑘 = −𝐽𝑘𝑇 𝑓𝑘 . (5) Для метода Левенберга-Марквардта: 𝑥𝑘+1 = 𝑥𝑘 + 𝑝𝑘 , (6) где I – единичная матрица, 𝜆𝑘 – некоторая неотрицательная константа, своя для каждого шага, 𝑝𝑘 - направление поиска, определяемое из решения системы уравнений (𝐽𝑘𝑇 𝐽𝑘 + 𝜆𝑘 𝐼)𝑝𝑘 = −𝐽𝑘𝑇 𝑓𝑘 . (7) Оба метода, при определенных условиях, могут достигать квадратичной скорости сходимости, хотя при расчете используются только первые производные (матрица Якоби). Следует отметить, что с развитием методологии быстрого автоматического дифференцирования (БАД) [4] скорость расчета матрицы Гессе скалярной функции F(x), при 𝑛 ≤ 𝑚 приблизилась к скорости расчета матрицы Якоби вектор функции f(x), и преимущества по сравнению с ньютоновскими методами существенно сократились. Тем не менее, учитывая особенности вычисления матрицы Якоби и некоторые особенности задач, можно ускорить расчетные схемы методов Гаусса-Ньютона и Левенберга-Марквардта. В данной статье рассматриваются способы ускорения расчетов матрицы Якоби, с помощью открытого стандарта для распараллеливания программ OpenMP. Рассмотрение производится на примере модельной задачи восстановления начальных данных для уравнения переноса. Для вычисления матрицы Якоби применен пакет прикладного программного обеспечения Adept [5], для решения систем линейных уравнений (7) использовался cLapack [6]. Методология быстрого автоматического дифференцирования Пусть 𝑧 ∈ 𝑅𝑛 и 𝑢 ∈ 𝑅 𝑟 векторы. Дифференцируемые функции W(z, u) и 𝛷(z, u) определяют отображения 𝑊: 𝑅𝑛 × 𝑅 𝑟 → 𝑅1 , Φ: 𝑅𝑛 × 𝑅𝑟 → 𝑅𝑟 . Вектора z и u удовлетворяют следующей системе из n нелинейных скалярных уравнений 𝛷(z, u) = 0. Если матрица Φ𝑧𝑇 (𝑧, 𝑢) невырожденна, то сложная функция Ω(u) = W(z(u), u) дифференцируема и ее градиент относительно переменных u вычисляется по формуле: 203 𝑑Ω = 𝑊𝑢 (z(u), u) + Φ𝑢𝑇 (𝑧(𝑢), 𝑢) ∙ 𝑝, (8) du где вектор 𝑝 ∈ 𝑅 находится из решения линейной алгебраической системы: 𝑛 𝑊𝑧 (z, u) + Φ𝑧𝑇 (𝑧, 𝑢) ∙ 𝑝 = 0, (9) Здесь и далее индекс T обозначает транспонирование, нижние индексы z, u обозначают частные 𝜕𝑊 𝜕𝑊 𝜕Φ𝑇 𝜕Φ𝑇 производные функций по векторам z и u: 𝑊𝑢 = , 𝑊𝑧 = , Φ𝑢𝑇 = , Φ𝑧𝑇 = , так же будем обозначать 𝜕𝑢 𝜕𝑧 𝜕𝑢 𝜕𝑧 i-е, j-е компоненты векторов z и u как 𝑧𝑖 , 𝑧𝑗 , 𝑢𝑖 , 𝑢𝑗 . Предположим, что каждый компонент вектора 𝑧𝑖 последовательно выражается только через компоненты вектора u и предыдущие 𝑧𝑗 , т.е. 1≤j1020 , то завершить работу. 12. Если 𝐹𝑘+1 ≥ 𝐹𝑘 , то положить 𝜆𝑘+1 = 10𝜆𝑘 , и перейти к шагу 5. 205 Проведем расчеты в однопоточном и многопоточном режиме с различными флагами оптимизации. Таблица 1. Сходимость метода Левенберга-Марквардта Шаг Значение найденного минимума Начальная точка 1.430922e-01 1 5.963379e-05 2 2.654437e-10 3 1.241797e-17 4 3.839771e-25 Из таблицы 1 видно, что скорость сходимости метода Левенберга-Марквардта достаточна для того, чтобы решить задачу за 4 итерации. При этом функция вычисляется 5 раз, матрица Якоби 4 раза и 4 раза решается система уравнений (7). Таблица 2. Время вычислений в зависимости от флагов оптимизации в однопоточном режиме Шаг/Время сек -O2 -O3 -Ofast Вычисление функции 0.77 0.75 0.46 Вычисление матрицы Якоби 199.96 148.62 76.89 Вычисление коэффициентов системы уравнений 18.15 18.17 8.49 (7) Решение системы уравнений (7) 11.50 11.57 7.30 Всего 230.38 179.11 93.14 Таблица 3. Время вычислений в зависимости от флагов оптимизации в многопоточном режиме Шаг/Время сек -O2 -O3 -Ofast Вычисление функции 0.75 0.74 0.46 Вычисление матрицы Якоби 50.47 44.38 43.64 Вычисление коэффициентов системы уравнений 6.69 6.82 4.86 (7) Решение системы уравнений (7) 11.56 11.56 7.21 Всего 69.48 63.50 56.18 Из таблиц 2 и 3 видно, что основная часть времени (70%-80%) уходит на расчет матрицы Якоби. При этом только за счет флагов оптимизации можно ускорить расчеты примерно в 2.5 раза. Если добавить к этому распараллеливание на 8 потоков (по количеству логических ядер процессора), то расчеты будут ускорены в 4 раза. Причем расчет матрицы Якоби ускоряется в 4.5 раз. Подобрав параметр (ADEPT_MULTIPASS_SIZE), отвечающий за количество столбцов матрицы Якоби, рассчитываемых одновременно в одном потоке можно снизить время расчета до 28 секунд. Перейдем к анализу кода пакета Adept. Матрица Якоби рассчитывается с помощью функции: Stack::jacobian_reverse_openmp(Real* jacobian_out) функция устроена следующим образом – матрица Якоби разбивается по столбцам на блоки размера ADEPT_MULTIPASS_SIZE, при этом размер последнего блока может быть меньше этого параметра. Директивой #pragma omp parallel объявляется параллельный регион программы. Цикл по блокам разбивается на потоки с помощью директивы OpenMP – #pragma omp for. Как было сказано ранее статическое разбиение цикла не всегда является эффективным, и замена директивы на #pragma omp for schedule(dynamic позволяет получить ускорение расчетов порядка 30%. Таблица 4. Время вычислений при использовании #pragma omp for schedule(dynamic) Шаг/Время сек -O2 -O3 -Ofast Вычисление функции 0.76 0.75 0.46 Вычисление матрицы Якоби 38.38 32.86 29.17 Вычисление коэффициентов системы уравнений 3.38 3.39 1.95 (7) Решение системы уравнений (7) 11.68 11.57 7.20 Всего 54.21 48.57 38.77 Дальнейшее рассмотрение функции Stack::jacobian_reverse_openmp(Real* jacobian_out) показывает, что внутри основного цикла широко используется конструкции: а) for(int i = 0; i < block_size; i++), где block_size – размер блока б) int n_non_zero = 0; for (int i = 0; i < block_size; i++) { 206 … if (a[i] != 0.0) n_non_zero = 1; } Используя ключи компилятора -ftree-vectorizer-verbose=3 -fopt-info-vec-all=rezv.txt, можно увидеть, что векторизация данных циклов не производится. То есть преимущества современной архитектуры процессора не используются. Заменим данные конструкции на а) if(flag_extra) for (int i = 0; i < n_extra; i++) … else #pragma omp simd for (int i = 0; i < ADEPT_MULTIPASS_SIZE; i++) … б) int n_non_zero = 0; if(flag_extra) for (int i = 0; i < n_extra; i++) { … if(a[i] != 0) n_non_zero = 1; } else #pragma omp simd reduction(|:n_non_zero) for (int i = 0; i < ADEPT_MULTIPASS_SIZE; i++) { … n_non_zero |= (a[i] != 0); } Здесь переменная цикла для большинства блоков изменяется от 0 до фиксированного значения ADEPT_MULTIPASS_SIZE, и включена принудительная векторизация директивой #pragma omp simd. В случае б) необходимо, кроме этого, выполнять редукцию переменной n_non_zero. В результате, после подбора параметра ADEPT_MULTIPASS_SIZE (рис.1), получаем ускорение расчетов почти в 2 раза. Таблица 5. Время вычислений при использовании SIMD Шаг/Время сек -O2 -O3 -Ofast Вычисление функции 0.75 0.75 0.46 Вычисление матрицы Якоби 24.73 16.35 15.62 Вычисление коэффициентов системы уравнений 3.44 3.46 1.92 (7) Решение системы уравнений (7) 11.76 11.70 7.25 Всего 40.68 32.26 25.26 Рис.1 Время расчетов матрицы Якоби в зависимости от ADEPT_MULTIPASS_SIZE Заключение Исследование показало, что, используя технологии директивного многопоточного программирования, и возможности компилятора, можно ускорить расчет матрицы Якоби более чем в 12 раз. Подчеркнем на 207 процессоре, имеющем 8 логических ядер. При этом трудозатраты по модификации пакета прикладного программного обеспечения минимальны и ограничиваются использованием ключей компилятора и добавлением/изменением нескольких директив OpenMP. В работе не был затронут вопрос распараллеливания методов решения систем линейных уравнений. Пути ускорения могут быть следующие – использование параллельных версий пакета LaPack, применение параллельных версий метода сопряженных градиентов. В ряде случаев будет эффективным использование двойственных постановок задач квадратичного программирования. Благодарности Работа выполнена при поддержке РФФИ, проект 16-07-00458. Литература 1. Евтушенко Ю. Г., Зубов В. И. Об обобщенной методологии быстрого автоматического дифференцирования. Журнал вычислительной математики и математической физики, 2016, vol. 56 (11), pp. 1847-1862. 2. Зубов В. И. Применение методологии быстрого автоматического дифференцирования к решению обратной коэффициентной задачи для уравнения теплопроводности. Журнал вычислительной математики и математической физики, 2016, vol. 56 (10), pp 1760-1774. 3. Гилл Ф., Мюррей У., Райт М. Практическая оптимизация. – 1985. 4. Евтушенко Ю. Г. Оптимизация и быстрое автоматическое дифференцирование //М.: Научное издание ВЦ РАН. – 2013. 5. Hogan R. J. Fast reverse-mode automatic differentiation using expression templates in C++ //ACM Transactions on Mathematical Software (TOMS). – 2014. – Т. 40. – №. 4. – С. 26. 6. Anderson E. et al. LAPACK Users' guide. – Society for Industrial and Applied Mathematics, 1999 7. OpenMP 4.5 Complete Specifications (Nov 2015) 8. Лупин С. А., Посыпкин М. А. Технологии параллельного программирования: Учеб. Пос. Сер. Высш. образ-ние. М.: Форум Инфра-М. – 2008, vol. 208. References 1. Evtushenko Ju. G., Zubov V. I. Ob obobshhennoj metodologii bystrogo avtomaticheskogo differencirovanija. Zhurnal vychislitel'noj matematiki i matematicheskoj fiziki, 2016, vol. 56 (11), pp. 1847-1862. 2. Zubov V. I. Primenenie metodologii bystrogo avtomaticheskogo differencirovanija k resheniju obratnoj kojefficientnoj zadachi dlja uravnenija teploprovodnosti. Zhurnal vychislitel'noj matematiki i matematicheskoj fiziki, 2016, vol. 56 (10), pp 1760-1774. 3. Gill F., Mjurrej U., Rajt M. Prakticheskaja optimizacija. – 1985. 4. Evtushenko Ju. G. Optimizacija i bystroe avtomaticheskoe differencirovanie //M.: Nauchnoe izdanie VC RAN. – 2013. 5. Hogan R. J. Fast reverse-mode automatic differentiation using expression templates in C++ //ACM Transactions on Mathematical Software (TOMS). – 2014. – V. 40. – N. 4. – p. 26. 6. Anderson E. et al. LAPACK Users' guide. – Society for Industrial and Applied Mathematics, 1999 7. OpenMP 4.5 Complete Specifications (Nov 2015) 8. Lupin S. A., Posypkin M. A. Tehnologii parallel'nogo programmirovanija: Ucheb. Pos. Ser. Vyssh. obraz-nie. M.: Forum Infra-M. – 2008, vol. 208. Сведения об авторе: Горчаков Андрей Юрьевич, кандидат физико-математичесикх наук, ведущий математик отдела прикладных проблем оптимизации Вычислительного центра им. А.А. Дородницына, Федеральный исследовательский центр «Информатика и управление» Российской академии наук, andrgor12@gmail.com Note on the author: Gorchakov Andrei Yu., Candidate of Physical and Mathematical Sciences, Leading mathematician, Dorodnicyn Computing Centre, Federal Research Center Computer Science and Control of the Russian Academy of Sciences, andrgor12@gmail.com 208