Skip to content

Instantly share code, notes, and snippets.

@hebasto
Last active May 28, 2023 12:29
Show Gist options
  • Save hebasto/4ef870213543ce74133c82ce8ef2d150 to your computer and use it in GitHub Desktop.
Save hebasto/4ef870213543ce74133c82ce8ef2d150 to your computer and use it in GitHub Desktop.
libsecp256k1 ASM benchmarks

libsecp256k1 ASM benchmarks

System: ODROID HC-1

Commit: 908e02d596b66203788e8945b1f9c93ff28a4536

No assembly optimization

$ cmake -B build
$ cmake --build build
$ ./build/src/bench
Benchmark                     ,    Min(us)    ,    Avg(us)    ,    Max(us)    

ecdsa_verify                  ,   336.0       ,   336.0       ,   340.0    
ecdsa_sign                    ,   212.0       ,   212.0       ,   213.0    
ecdh                          ,   350.0       ,   350.0       ,   350.0    
schnorrsig_sign               ,   190.0       ,   190.0       ,   190.0    
schnorrsig_verify             ,   341.0       ,   341.0       ,   341.0
$ ./build/src/bench_internal
Benchmark                     ,    Min(us)    ,    Avg(us)    ,    Max(us)    

scalar_add                    ,     0.0457    ,     0.0525    ,     0.114  
scalar_negate                 ,     0.0243    ,     0.0244    ,     0.0244 
scalar_mul                    ,     0.279     ,     0.279     ,     0.279  
scalar_split                  ,     1.27      ,     1.27      ,     1.27   
scalar_inverse                ,     9.41      ,     9.41      ,     9.42   
scalar_inverse_var            ,     5.08      ,     5.09      ,     5.09   
field_half                    ,     0.0158    ,     0.0158    ,     0.0158 
field_normalize               ,     0.0351    ,     0.0353    ,     0.0355 
field_normalize_weak          ,     0.0171    ,     0.0171    ,     0.0171 
field_sqr                     ,     0.126     ,     0.127     ,     0.127  
field_mul                     ,     0.181     ,     0.181     ,     0.181  
field_inverse                 ,     9.68      ,     9.69      ,     9.69   
field_inverse_var             ,     5.13      ,     5.13      ,     5.14   
field_is_square_var           ,     5.36      ,     5.37      ,     5.37   
field_sqrt                    ,    34.9       ,    34.9       ,    35.0    
group_double_var              ,     1.12      ,     1.12      ,     1.12   
group_add_var                 ,     2.77      ,     2.77      ,     2.77   
group_add_affine              ,     2.23      ,     2.23      ,     2.23   
group_add_affine_var          ,     1.96      ,     1.96      ,     1.96   
group_add_zinv_var            ,     2.14      ,     2.14      ,     2.14   
group_to_affine_var           ,     5.92      ,     5.92      ,     5.94   
wnaf_const                    ,     0.972     ,     0.977     ,     0.982  
ecmult_wnaf                   ,     1.40      ,     1.40      ,     1.41   
hash_sha256                   ,     0.739     ,     0.741     ,     0.744  
hash_hmac_sha256              ,     3.04      ,     3.04      ,     3.04   
hash_rfc6979_hmac_sha256      ,    16.8       ,    16.8       ,    16.8    
context_create                ,     1.62      ,     1.62      ,     1.62

With assembly optimization

$ cmake -B build -DSECP256K1_ASM=arm32 -DSECP256K1_EXPERIMENTAL=ON
$ cmake --build build
$ ./build/src/bench
Benchmark                     ,    Min(us)    ,    Avg(us)    ,    Max(us)    

ecdsa_verify                  ,   311.0       ,   312.0       ,   316.0    
ecdsa_sign                    ,   202.0       ,   202.0       ,   202.0    
ecdh                          ,   325.0       ,   325.0       ,   325.0    
schnorrsig_sign               ,   178.0       ,   178.0       ,   178.0    
schnorrsig_verify             ,   315.0       ,   315.0       ,   316.0
$ ./build/src/bench_internal
Benchmark                     ,    Min(us)    ,    Avg(us)    ,    Max(us)    

scalar_add                    ,     0.0457    ,     0.0478    ,     0.0668 
scalar_negate                 ,     0.0243    ,     0.0244    ,     0.0244 
scalar_mul                    ,     0.279     ,     0.279     ,     0.279  
scalar_split                  ,     1.27      ,     1.27      ,     1.27   
scalar_inverse                ,     9.41      ,     9.41      ,     9.41   
scalar_inverse_var            ,     5.08      ,     5.08      ,     5.09   
field_half                    ,     0.0158    ,     0.0158    ,     0.0158 
field_normalize               ,     0.0352    ,     0.0352    ,     0.0354 
field_normalize_weak          ,     0.0171    ,     0.0171    ,     0.0171 
field_sqr                     ,     0.118     ,     0.118     ,     0.118  
field_mul                     ,     0.171     ,     0.171     ,     0.171  
field_inverse                 ,     9.73      ,     9.73      ,     9.74   
field_inverse_var             ,     5.11      ,     5.11      ,     5.12   
field_is_square_var           ,     5.36      ,     5.37      ,     5.37   
field_sqrt                    ,    31.9       ,    31.9       ,    31.9    
group_double_var              ,     1.04      ,     1.04      ,     1.04   
group_add_var                 ,     2.56      ,     2.56      ,     2.56   
group_add_affine              ,     2.04      ,     2.04      ,     2.04   
group_add_affine_var          ,     1.83      ,     1.83      ,     1.83   
group_add_zinv_var            ,     1.98      ,     1.98      ,     1.98   
group_to_affine_var           ,     5.85      ,     5.85      ,     5.85   
wnaf_const                    ,     0.970     ,     0.972     ,     0.972  
ecmult_wnaf                   ,     1.42      ,     1.42      ,     1.42   
hash_sha256                   ,     0.755     ,     0.758     ,     0.762  
hash_hmac_sha256              ,     3.14      ,     3.14      ,     3.14   
hash_rfc6979_hmac_sha256      ,    17.4       ,    17.4       ,    17.4    
context_create                ,     1.68      ,     1.68      ,     1.68
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment