Rubyの小さなHash、O(1)検索へ SWARで高速化
Speeding Up (Small) Ruby Hashes
RubyのHashは8エントリ以下では配列による線形探索(O(n))を行うため、末尾のキーほど遅くなる。この記事では、SWAR(レジスタ内SIMD)を使って8バイトのヒントを一括比較し、O(1)の検索を実現する手法を解説する。ベンチマークでは、8番目のキーの検索が1.58倍遅くなることを確認し、SWARによる改善の可能性を示す。
「8バイトのヒントを1つの8バイト整数として解釈し、オーバーフローしない限り、すべてのバイトに対して同時に同じ演算を行うことができる。」