1. 004.416.6 2. Ускорение расчетов цен финансовых

advertisement
1. 004.416.6
2. Ускорение расчетов цен финансовых инструментов на современных ЦП
3. Доронин Олег Владимирович, Шполянский Юрий Александрович (СанктПетербургский национальный исследовательский университет информационных
технологий, механики и оптики, Санкт-Петербург; Itiviti, Санкт-Петербург)
4. Шполянский Юрий Александрович (Санкт-Петербургский национальный
исследовательский университет информационных технологий, механики и оптики,
Санкт-Петербург; Itiviti, Санкт-Петербург)
5. Тезис
В наши дни программное обеспечение становится все более требовательным к
ресурсам вычислительной системы. Если время выполнения программ на компьютере не
удовлетворяет пользователя, он может купить более современное аппаратное обеспечение и,
таким образом, пытаться решить проблему недостатка производительности. Отрицательная
сторона такого подхода в финансовых затратах, которые необходимо понести пользователю
для обновления оборудования. Кроме этого, далеко не во всех случаях удается добиться
желаемой скорости работы за счет установки нового оборудования. Второй подход
заключается в оптимизации программного продукта. Но, что же понимается под
оптимизацией? Оптимизация – улучшение программы по различным критериям:
потребляемая память, ресурсы процессора, масштабируемость и т.д. Здесь под оптимизацией
мы будем понимать увеличение скорости работы программы.
Цель работы - ускорение расчетов цен финансовых инструментов в системе
алгоритмической торговли на электронной бирже Itiviti Tbricks для обеспечения
конкурентоспособности с другими программными системами. К моменту начала работы в
системе Itiviti Tbricks существовала библиотека расчета цен финансовых инструментов с
реализованными численными алгоритмами. Для нее были разработаны средства измерения
производительности инфраструктурной части библиотеки и численных алгоритмов. Для
ускорения вычислений были изучены возможности последней версии компилятора clang для
языка программирования C++ по автовекторизации операций на современных CPU,
автоматического встраивания тела функции и другие техники оптимизации. После чего были
модифицированы алгоритмы для наиболее эффективного применения этих техник.
В ходе работы проанализированы операции умножения и деления, их количество
было уменьшено, за счет чего удалось достигнуть ускорения на 0,8% - 4,8%. Далее условные
операторы были вынесены из тела цикла наружу в ряде мест, а так же было уменьшено
количество операций, выполняемых над массивами, за счет добавления условий более
раннего выхода из цикла. Данное улучшение дало прирост производительности на 7,7% 11,6%. Так же в алгоритме выявлены математические данные, которые повторно
вычислялись на каждой итерации цикла. Был применен предварительный расчѐт значений, за
счет чего удалось достигнуть ускорения на 8,5% - 11,4%. Из-за этого потребление памяти на
стеке выросло в 1,5 раза, оставшись, однако, в приемлемых пределах. Следующим шагом
стало улучшение алгоритма интерполяции, после чего программа стала работать быстрее на
0,09% - 22,4%. Для достижения эффекта автовекторизации некоторые циклы были разбиты
на более мелкие, что дало выигрыш 7,5% - 9%. На последнем шаге было уменьшено
количество запросов к внешнему для данного алгоритма классу, отвечающему за работу с
кривой доходности финансовых инструментов. Это обеспечило прирост производительности
на 30%-37%. Совокупное ускорение расчета цен финансовых инструментов за счет всех
перечисленных улучшений превысило 3 раза, что рассматривается как существенное
повышение эффективности работы системы алгоритмической торговли в целом.
Download