プレフィックスで注釈が付けられたベンチマーク関数の書き込みが含まれます。 これらの関数は、ベンチマークの実行を複数回実行したり、総実行時間を測定するなど、ベンチマークの実行を制御する方法を提供するベンチマークオブジェクト(testing
)を引数として取得します。 次に、ベンチマークを実行するためにBenchmark
コマンドを使用します。たとえば、2つの並べ替えアルゴリズム、*testing.B
とgo test -bench=.
:
bubbleSort
実行quickSort
<code class="go">package main import ( "fmt" "math/rand" "sort" "testing" ) func bubbleSort(data []int) { n := len(data) for i := 0; i < n-1; i++ { for j := 0; j < n-i-1; j++ { if data[j] > data[j+1] { data[j], data[j+1] = data[j+1], data[j] } } } } func quickSort(data []int) { sort.Ints(data) // Using Go's built-in quick sort for comparison } func BenchmarkBubbleSort(b *testing.B) { data := generateRandomData(1000) for i := 0; i < b.N; i++ { bubbleSort(append([]int(nil), data...)) // Create a copy to avoid modifying the original data } } func BenchmarkQuickSort(b *testing.B) { data := generateRandomData(1000) for i := 0; i < b.N; i++ { quickSort(append([]int(nil), data...)) // Create a copy to avoid modifying the original data } } func generateRandomData(size int) []int { data := make([]int, size) for i := 0; i < size; i++ { data[i] = rand.Intn(size) } return data } func main() {}</code>がベンチマーク結果を出力し、各アルゴリズムの実行時間を示します。 その後、これらの時間を直接比較して、相対的なパフォーマンスを評価できます。信頼できる比較を得るために、さまざまなデータセットでベンチマークを複数回実行することを忘れないでください。
go test -bench=.
go?
b.ResetTimer()
コアアルゴリズムの実行時間の測定に焦点を当てます。データ生成や出力などの外部操作を除きます。結果。pprof
gonum/plot
コマンドを超えてツールを探索して、この機能を提供するかどうかを確認します。 簡単な比較には、スプレッドシートで十分かもしれません。 より複雑な分析または自動レポートのために、GOプロットライブラリはより大きな柔軟性を提供します。go test
、testing
のようなフラグは、ベンチマークプロセスに対する細粒の制御を許可します。 コードが最も時間を費やし、ターゲットを絞った最適化を可能にする領域を識別できます。環境。
以上がGOのさまざまなアルゴリズムの実装をベンチマークして比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。