mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2025-01-07 03:22:18 +00:00
158fb2b606
Hi,
I'm syncing Gnosis on a Celeron N5100 to get familiar with the codebase.
In the process I managed to optimize some things from profiling.
Since I'm not yet on the project Discord, I decided to open this PR as a
suggestion. This pass all tests here and gave me a nice boost for that
platform, although I didn't have time to benchmark it yet.
* reuse VM Memory objects with sync.Pool. It starts with 4k as `evmone`
[code
suggested](0897edb001/lib/evmone/execution_state.hpp (L49)
)
as a good value.
* set32 simplification: mostly cosmetic
* sha256-simd: Celeron has SHA instructions. We should probably do the
same for torrent later, but this already helped as it is very CPU bound
on such a low end processor. Maybe that helps ARM as well.
47 lines
805 B
Go
47 lines
805 B
Go
package vtree
|
|
|
|
import (
|
|
"github.com/minio/sha256-simd"
|
|
"math/big"
|
|
"math/rand"
|
|
"testing"
|
|
)
|
|
|
|
func BenchmarkPedersenHash(b *testing.B) {
|
|
var addr, v [32]byte
|
|
|
|
b.ResetTimer()
|
|
b.ReportAllocs()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
rand.Read(v[:])
|
|
rand.Read(addr[:])
|
|
GetTreeKeyCodeSize(addr[:])
|
|
}
|
|
}
|
|
|
|
func sha256GetTreeKeyCodeSize(addr []byte) []byte {
|
|
digest := sha256.New()
|
|
digest.Write(addr)
|
|
treeIndexBytes := new(big.Int).Bytes()
|
|
var payload [32]byte
|
|
copy(payload[:len(treeIndexBytes)], treeIndexBytes)
|
|
digest.Write(payload[:])
|
|
h := digest.Sum(nil)
|
|
h[31] = CodeKeccakLeafKey
|
|
return h
|
|
}
|
|
|
|
func BenchmarkSha256Hash(b *testing.B) {
|
|
var addr, v [32]byte
|
|
|
|
b.ResetTimer()
|
|
b.ReportAllocs()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
rand.Read(v[:])
|
|
rand.Read(addr[:])
|
|
sha256GetTreeKeyCodeSize(addr[:])
|
|
}
|
|
}
|