BLS12: Use mul/add rather than pippengers for low pair count G1/G2 MSM #226
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
For bls12-381 G1 and G2 MSM precompiles, use MUL/ADD loop for low pair counts, since the overhead cost of the gnark-crypto pippenger's algo implementation is more expensive than a straight MUL/ADD loop until the pair count gets over 2.
Added unit tests and data sources to use to determine the 'sweet spot' on various architectures (mainly Apple Silicon and X86_64).
Testing on intel shows mul/add is faster up to 2 pairs with uncapped parallelism and 6 pairs with 1 task.
intel i7 10700F:
Testing on Mac shows 2 pairs with uncapped parallelism and 7 pairs with 1 task.
Mac M2 Max: