first commit
This commit is contained in:
73
gobench.go
Normal file
73
gobench.go
Normal file
@@ -0,0 +1,73 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
"fmt"
|
||||
"runtime"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
// hashTask calculates SHA-256 hashes for the given number of iterations.
|
||||
func hashTask(iterations int) {
|
||||
data := []byte("benchmarking-sha256")
|
||||
for i := 0; i < iterations; i++ {
|
||||
_ = sha256.Sum256(data)
|
||||
}
|
||||
}
|
||||
|
||||
// benchmarkSingleCore benchmarks single-core performance.
|
||||
func benchmarkSingleCore(iterations int) float64 {
|
||||
start := time.Now()
|
||||
hashTask(iterations)
|
||||
duration := time.Since(start).Seconds()
|
||||
return float64(iterations) / duration // Return raw score
|
||||
}
|
||||
|
||||
// benchmarkMultiCore benchmarks multi-core performance.
|
||||
func benchmarkMultiCore(iterations int, cores int) float64 {
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(cores)
|
||||
start := time.Now()
|
||||
|
||||
for i := 0; i < cores; i++ {
|
||||
go func() {
|
||||
hashTask(iterations / cores)
|
||||
wg.Done()
|
||||
}()
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
duration := time.Since(start).Seconds()
|
||||
return float64(iterations) / duration // Return raw score
|
||||
}
|
||||
|
||||
// humanReadable formats numbers into human-readable units.
|
||||
func humanReadable(score float64) string {
|
||||
units := []string{"", "K", "M", "G", "T", "P", "E", "Z"}
|
||||
i := 0
|
||||
for score >= 1000 && i < len(units)-1 {
|
||||
score /= 1000
|
||||
i++
|
||||
}
|
||||
return fmt.Sprintf("%.2f %s", score, units[i])
|
||||
}
|
||||
|
||||
func main() {
|
||||
iterations := 1_000_000 // Adjust this number for longer or shorter tests
|
||||
|
||||
fmt.Println("Starting CPU benchmark...")
|
||||
|
||||
// Single-core benchmark
|
||||
fmt.Println("Benchmarking single-core performance...")
|
||||
singleCoreScore := benchmarkSingleCore(iterations)
|
||||
fmt.Printf("Single-core score: %s hashes/sec\n", humanReadable(singleCoreScore))
|
||||
|
||||
// Multi-core benchmark
|
||||
cores := runtime.NumCPU()
|
||||
fmt.Println("Benchmarking multi-core performance...")
|
||||
multiCoreScore := benchmarkMultiCore(iterations, cores)
|
||||
fmt.Printf("Multi-core score: %s hashes/sec\n", humanReadable(multiCoreScore))
|
||||
|
||||
fmt.Println("CPU Benchmark completed.")
|
||||
}
|
||||
Reference in New Issue
Block a user