2006年10月30日

[Namazu-devel-ja 1348] Re: mknmz の処理時間短縮

臼田です

On 2006/10/30, at 4:46, Tadamasa Teranishi wrote:

>
>> $ON_MEMORY_MAX 初期値(19回インデックス書きだしあり)
>
> 19回もインデックスを書き出すのは、ちょっと多いような気はします

> ね。

PDFがかなり含まれているのと、htmlのタグが結構多いためでは
ないかと思っています。
MS-Officeの文書などだと文書量の割にファイルサイズが大きいので
同様な傾向になるのではないでしょうか。

読み込みファイルサイズ累計ではなく
処理済みテキストサイズ累計を書き出しタイミング
判定にするのが良さそうですが、
5MBの制限値で動かす分にはあまり変わらないのかもしれません。


>> %Time ExclSec CumulS #Calls sec/call Csec/c Name
>> 13.9 11.19 20.512 1269 0.0088 0.0162 mknmz::make_phrase_hash
>> 11.6 9.320 9.320 873244 0.0000 0.0000 mknmz::hash
>> 10.1 8.129 8.129 5089 0.0016 0.0016 mknmz::wordcount_sub
>> 8.13 6.526 6.525 22160 0.0003 0.0003
>> File::MMagic::magicMatchStr
>> 6.56 5.260 5.260 176718 0.0000 0.0000
>> Text::Kakasi::xs_do_kakasi
>> 5.28 4.239 20.643 1269 0.0033 0.0163 mknmz::count_words
>> 4.80 3.855 3.855 865 0.0045 0.0045 html::get_title_attr
>> 4.09 3.285 3.285 865 0.0038 0.0038 html::get_alt_attr
>> 3.73 2.994 5.704 825 0.0036 0.0069 util::syscmd
>> 2.60 2.085 2.085 2538 0.0008 0.0008
>> gfilter::line_adjust_filter
>> 2.37 1.905 1.905 2538 0.0008 0.0008 NKF::nkf
>> 2.31 1.850 1.947 1283 0.0014 0.0015
>> File::MMagic::checktype_data
>
> hash の回数が多い分、やっぱり効いていますね。
> よく使うフレーズはhash値をキャッシュに置いて、毎回計算し
> ないと速く
> なりそうですが...キャッシュのヒット率を維持するには
> キャッシュサイズ
> が大きくないとダメかもしれないので、う〜ん、改善はしないかなぁ。
>
> とりあえず hash の改良案です。
>
> sub hash ($) {
> my ($word) = @_;
>
> my $len = length($word);
> my $hash = 0;
> for (my $i = 0; $i < $len; $i++) {
> $hash ^= $Seed[$i & 0x03][ord(substr $word, $i, 1)];
> # $word =~ s/^.//; is slower
> }
> return $hash & 65535;
> }

少し速くなりますね。


もう少し速くなりそうな改良案を作成してみました。

sub hash ($) {
my ($word) = @_;

my $hash = 0;
my $i = 0;
$word = reverse($word);
while(length($word)) {
$hash ^= $Seed[$i & 0x03][ord(chop($word))];
$i++;
}
return $hash & 65535;
}

臼田幸生

_______________________________________________
Namazu-devel-ja mailing list
Namazu-devel-ja@xxxxx
http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-devel-ja

投稿者 xml-rpc : 2006年10月30日 07:29
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/48514
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。