Planet Python 日本語
フォロー
Python⇒Speed: 6× faster binary search: from compiled code to mechanical sympathy
Pythonコードの最適化は、効率的なアルゴリズムの選択、コンパイル済み言語拡張機能の使用、並列処理の組み込みから始まることが多い。しかし、さらに大きな速度を実現するには、CPUアーキテクチャの深い理解が不可欠である。例えば、scikit-learnの勾配ヒストグラムブースティングにおける一般的な問題は、浮動小数点数の大きな配列を255個の整数バケットに均等に割り当てることである。最初の方法は、ソートされたバケット境界に対するコンパイル済み並列バイナリサーチを使用する。CPUの能力に逆らうのではなく、それに沿うようにコードを調整することで、大幅な速度向上が達成された。これには、命令レベル並列処理やメモリキャッシュなどの概念の理解が含まれる。この記事では、元の実装と比較して6倍の速度向上を達成する方法を示す簡単な例を実演する。この過程で、分岐予測やSIMDのような高度な低レベルハードウェアのトピックに触れる。詳細なチュートリアルではないが、このような最適化の可能性を紹介する。著者は、これらの複雑なハードウェアトピックに関するさらなる学習リソースを提供する。