Planet Python на русском
Подписаться
Python⇒Скорость: бинарный поиск в 6 раз быстрее: от скомпилированного кода до механической симпатии
Оптимизация кода на Python часто начинается с выбора эффективных алгоритмов, использования расширений на компилируемых языках и внедрения параллелизма. Однако для достижения еще большей скорости требуется более глубокое понимание архитектуры ЦП. Например, распространенная проблема в градиентном бустинге гистограмм scikit-learn заключается в равномерном распределении большого массива чисел с плавающей запятой по 255 целочисленным корзинам. Первоначальный подход использует скомпилированный параллельный бинарный поиск по отсортированным границам корзин. Значительные улучшения скорости были достигнуты благодаря тому, что код соответствовал возможностям ЦП, а не работал против них. Это включало понимание таких концепций, как параллелизм на уровне инструкций и кэши памяти. В статье будет продемонстрирован упрощенный пример, иллюстрирующий, как добиться 6-кратного ускорения по сравнению с первоначальной реализацией. Это путешествие коснется продвинутых низкоуровневых аппаратных тем, таких как предсказание ветвлений и SIMD. Хотя это и не подробное руководство, оно познакомит с возможностями таких оптимизаций. Автор предоставит ресурсы для дальнейшего изучения этих сложных аппаратных тем.