first commit

This commit is contained in:
tobias
2025-02-08 11:11:03 +01:00
commit 033fc6aaa8
2 changed files with 307 additions and 0 deletions

73
gobench.go Normal file
View 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.")
}