Closed holiman closed 1 year ago
For the github.com/ethereum/go-ethereum/crypto/kzg4844
, the evaluateLagrangePolynomial
falls back into gnark-crypto
, which has element_ops_amd64
and element_mul_amd64
in assembly, but falls back to element_ops_purego
for the 386
version.
For core/vm
, here are the big differences when I run locally, with GOARCH=386
vs normal:
GOARCH=386
:
TestPrecompiledBLS12381G2MultiExp (12.08s)
TestPrecompiledBLS12381Pairing (12.13s)
TestPrecompiledBLS12381MapG2 (5.03s)
GOARCH=amd64
:
TestPrecompiledBLS12381G2MultiExp (1.37s)
TestPrecompiledBLS12381Pairing (1.36s)
TestPrecompiledBLS12381MapG2 (0.44s)
These are tests for an eip which is not active.
On our appveyor CI runs, I compared the windows
386
vsamd64
test execution time. The ones below are not necessarily the most long-running packages, but the ones where the difference between the two architectures are the biggest.We should investigate if there's anything we can do to improve these figures. In the case of crypto ops, it might just be the instruction set / width, but in other case (like
protocols/snap
), I find it hard to see why it386
should be so much slower.