Shared strings in XS
XSで共有文字列を活用するの続き。スクリプトを変えて再計測を行った。
- http://github.com/gfx/Perl-B-Shared
- git clone git://github.com/gfx/Perl-B-Shared.git
いろいろ試した結果,まとめとしては以下のようになる。
- 共有文字列の生成と破棄は通常の文字列より10%ほど遅い
- ハッシュキーとして使用する場合は通常の文字列より25%ほど速い
- ハッシュキーとして生成してすぐアクセスに使うと,生成・破棄のコストよりアクセス速度のベネフィットのほうが大きい
Perlレベルで意図的に使うことはできないが,XSレベルではnewSVpnv_share()やnewSVpvs_share()で簡単に作ることができ,欠点も特にないのでどんどん活用していきたい。
B-Shared/example/benchmark.pl:
Create and destroy Rate shared normal shared 19029/s -- -9% normal 20958/s 10% -- Create, access, and destroy Rate normal shared normal 20096/s -- -13% shared 23209/s 15% -- Hash access Rate normal shared bare normal 52193/s -- -21% -23% shared 65761/s 26% -- -3% bare 67622/s 30% 3% --
なお,一番下のbareはハッシュキーを定数文字列にしたケースである。そのようなケースではPerlの最適化器がキーを共有文字列にしてくれる。
See also perldoc perlapi for newSVpvn_share