Golang の練習用に作成した基数ツリーの実装のベンチマークを試みています。
しかし、「どのようにベンチマークすればよいですか?」という問題に遭遇しました。以下のコードでは、2 つのケースを示しています。または、LookUp 関数のベンチマークを実行するさまざまな方法を示しています。
ケース 1: ツリー上に存在する 1 つのバイト スライスを使用すると、すべての子ノードなどを介してルックアップが成功します。
ケース 2: func を使用して、ツリー内の既存のデータからそのランダムなスライスを生成します。これは、ルックアップも成功することを意味します...
かかる時間はツリーの深さに依存することはわかっています... ケース 2 は実際の実装に近いと思いますか?
質問: ベンチマークするのに、どちらのケースがより効率的または有用ですか?
基準:
func BenchmarkLookUp(b *testing.B) {
radix := New()
insertData(radix, sampleData2)
textToLookUp := randomBytes()
for i := 0; i < b.N; i++ {
radix.LookUp(textToLookUp) // Case 1
//radix.LookUp(randomBytes()) // Case 2
}
}
func randomBytes() []byte {
strings := sampleData2()
return []byte(strings[random(0, len(strings))])
}
func sampleData2() []string {
return []string{
"romane",
"romanus",
"romulus",
...
}
}
結果 ケース 1:
PASS
BenchmarkLookUp-4 10000000 146 ns/op
ok github.com/falmar/goradix 2.068s
PASS
BenchmarkLookUp-4 10000000 149 ns/op
ok github.com/falmar/goradix 2.244s
結果ケース 2:
PASS
BenchmarkLookUp-4 3000000 546 ns/op
ok github.com/falmar/goradix 3.094s
PASS
BenchmarkLookUp-4 3000000 538 ns/op
ok github.com/falmar/goradix 4.481s
一致しない場合の結果:
PASS
BenchmarkLookUp-4 10000000 194 ns/op
ok github.com/falmar/goradix 3.189s
PASS
BenchmarkLookUp-4 10000000 191 ns/op
ok github.com/falmar/goradix 3.243s