Shared strings in XS

XSで共有文字列を活用するの続き。スクリプトを変えて再計測を行った。

いろいろ試した結果,まとめとしては以下のようになる。

  • 共有文字列の生成と破棄は通常の文字列より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