Giter VIP home page Giter VIP logo

go-benchmark's Introduction

Hi, I'm Cornel ๐Ÿ‘‹

I'm a Software Engineer with a focus on Backend development using Golang.

go-benchmark's People

Contributors

cornelk avatar crgimenes avatar erikdubbelboer avatar fgrosse avatar jeromer avatar rana avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

go-benchmark's Issues

defer_test is not very fair

In https://github.com/cornelk/go-benchmark/blob/main/defer_test.go, the DeferNo closure may be inflined, but the Defer one can't now, because the current official Go compiler never inlines functions containing defer calls.

Though it is true that defer calls have extra costs.

//go:noinline
func checkDefer(b *testing.B, index, item int) {
	defer checkItem(b, index, item)
}

//go:noinline
func checkDeferNo(b *testing.B, index, item int) {
	checkItem(b, index, item)
}


func BenchmarkDefer(b *testing.B) {
	m := generateIntSlice(b)
	for n := 0; n < b.N; n++ {
		for i := 0; i < len(m); i++ {
			var item = m[i]
			checkDefer(b, i, item)
		}
	}
}

func BenchmarkDeferNo(b *testing.B) {
	m := generateIntSlice(b)
	for n := 0; n < b.N; n++ {
		for i := 0; i < len(m); i++ {
			var item = m[i]
			checkDeferNo(b, i, item)
		}
	}
}
goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz
BenchmarkDefer-4     	 2314526	       515.7 ns/op
BenchmarkDeferNo-4   	 5631787	       213.8 ns/op

Idea: Including the code in the README

Having examples in the README under each benchmark would make it a lot easier to see what each benchmark does.

Example:

Using defer vs not using it

BenchmarkDefer-8                           	   20000	     58155 ns/op
BenchmarkDeferNo-8                         	  300000	      5378 ns/op

Defer

defer checkItem(b, i, item)

No defer

checkItem(b, i, item)

This approach might make it a bit more messy, so another solution could be to at least provide the links to each file used in the benchmarks for easier navigation.

Anyways, great job providing this! I think people will get much use of these benchmarks

Much different result for "interface{} vs unsafe.Pointer"

$ gotv . test -bench=. interface_test.go helpers_test.go 
[Run]: $HOME/.cache/gotv/tag_go1.21rc3/bin/go test -bench=. interface_test.go helpers_test.go
goos: linux
goarch: amd64
cpu: Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz
BenchmarkValueUnsafePointer-4   	27320748	        43.15 ns/op
BenchmarkValueInterface-4       	 3027616	       394.2 ns/op
BenchmarkReflect-4              	 2023377	       588.6 ns/op
BenchmarkCast-4                 	 3398929	       357.0 ns/op

BenchmarkParameterSlicePassedBy{Pointer,Value} tests arrays, not slices

If we want to benchmark passing slices vs pointers-to-slices, we should change the functions like so:

- func getSliceItem(index int, m [BenchMarkSize]int) int
+ func getSliceItem(index int, m []int) int

- func getSlicePointerItem(index int, m *[BenchMarkSize]int) int 
+ func getSlicePointerItem(index int, m *[]int) int

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.