D. J. Bernstein
Fast arithmetic
Integer multiplication benchmarks

BN

BN was written by Eric Young. It is now part of the OpenSSL package. The OpenSSL home page is www.openssl.org. Sample code using BN:
     #include "openssl/bn.h"
     
     main()
     {
       BIGNUM *a;
       BIGNUM *b;
       BIGNUM *c;
       BN_CTX *t;
     
       t = BN_CTX_new();
       BN_CTX_init(t);
     
       a = BN_new();
       b = BN_new();
       c = BN_new();
     
       BN_dec2bn(&a,"317213509");
       BN_dec2bn(&b,"990371647");
     
       BN_mul(c,a,b,t);
       printf("%s\n",BN_bn2dec(c));
     }

I compiled OpenSSL 0.9.6c on thoth on 2002.02.23:

     lynx -source www.openssl.org/source/openssl-0.9.6c.tar.gz > openssl-0.9.6c.tar.gz
     gunzip < openssl-0.9.6c.tar.gz | tar -xf -
     cd openssl-0.9.6c
     ./config
     make
     # about 120 seconds
     lynx -source cr.yp.to/speed/mult/bn-bench.c > bench.c
     gcc -O3 -o bench bench.c libcrypto.a
     ./bench > bench.out
     # about 340 seconds
Results:
       1:       5221        254        200        199        200        200 
       2:        446        212        199        199        186        186 
       3:        429        186        186        186        186        186 
       4:        441        186        186        186        186        186 
       5:        415        186        186        186        186        186 
       6:        414        186        186        186        186        186 
       7:        442        186        186        186        186        186 
       8:        413        186        186        186        186        186 
      10:        441        212        199        186        186        186 
      12:        423        212        186        186        186        186 
      14:        455        199        186        186        186        186 
      16:        417        199        186        186        186        186 
      20:        474        193        197        180        193        180 
      24:        475        193        180        180        180        180 
      28:        457        193        180        180        180        180 
      32:        399        180        180        180        180        180 
      40:       2505        280        244        231        231        231 
      48:        484        254        231        231        231        231 
      56:        460        274        264        234        224        224 
      64:        458        257        224        224        224        224 
      80:       1170        329        307        284        284        284 
      96:        561        341        341        278        278        278 
     112:       1705        398        373        352        352        352 
     128:       1295        376        360        347        347        347 
     160:       1357        457        457        447        447        447 
     192:       1449        535        535        535        535        535 
     224:       1534        642        642        642        642        642 
     256:       4753        482        442        442        425        425 
     320:       2759       1135       1084       1064       1064       1064 
     384:       2558       1446       1390       1379       1365       1365 
     448:       9111       1829       1829       1792       1792       1792 
     512:      10121       1662       1591       1520       1520       1520 
     640:      13665       4192       4050       3988       3988       3988 
     768:       6259       4182       4012       4012       4012       4012 
     896:       6155       5118       5010       4955       4955       4955 
    1024:       6152       5143       4980       4829       4829       4829 
    1280:      21651      12182      11891      11868      11852      11852 
    1536:      13816      12539      12321      12279      12279      12279 
    1792:      16071      14969      14704      14635      14635      14635 
    2048:      16760      15629      15379      15349      15349      15349 
    2560:      63848      35212      34943      34929      34929      34929 
    3072:      39966      38266      37989      37977      37977      37977 
    3584:      46966      45471      45264      45243      45243      45243 
    4096:      49535      48394      48193      48176      48176      48176 
    5120:     140248     106996     106706     106706     106706     106706 
    6144:     118584     117216     116988     116988     116988     116988 
    7168:     140206     138813     138644     138635     138635     138635 
    8192:     150717     167855     149031     148732     148732     148732 
   10240:     389231     322882     321973     321973     321973     321973 
   12288:     356855     354401     354388     354388     354388     354388 
   14336:     441151     422692     422580     422566     422566     422566 
   16384:     457563     454635     454539     454519     454519     454519 
   20480:    1158352     974787     974580     974547     974547    1007564 
   24576:    1092018    1073016    1072953    1072950    1072950    1072950 
   28672:    1295385    1277121    1277040    1277040    1277040    1292898 
   32768:    1376157    1374992    1374977    1392454    1374985    1374973 
   40960:    3324519    2962170    2977455    2977386    2961078    2989962 
   49152:    3258969    3289929    3260076    3276942    3273855    3276768 
   57344:    3903693    3875955    3909669    3876225    3892914    3906396 
   65536:    4215776    4208691    4189766    4219381    4208178    4201599 
   81920:    9631193    8968698    8981787    8963238    8958951    8964780 
   98304:    9870814    9895245    9875676    9891150    9872712    9873546 
  114688:   11743141   11734887   16601852   11742609   11764606   11735424 
  131072:   12687962   12670887   12709269   12670650   12667929   12670962 
  163840:   28554759   27102935   27072885   27069225   27058968   27061590 
  196608:   29871665   29839643   29928708   29816514   29837655   29836530 
  229376:   35535980   35572404   35486646   35494260   35485038   35480214 
  262144:   38461757   38361253   38371160   38325979   38446643   38340728 
  327680:   85920797   82441654   82319492   82413165   82350547   82332380 
  393216:   90934011   90805787   90799092   90823891   90732222   90785376 
  458752:  107965379  107931219  107900223  107875965  107825310  107878413 
  524288:  116862350  116606376  116551767  116615907  116559792  116532171 
  655360:  258510629  252581588  252662715  252592866  252351006  252070848 
  786432:  278182421  278177772  278254692  278111574  278121465  278152875 
  917504:  331393937  331193658  330951528  330985026  331230474  331251057 
 1048576:  356645440  356214807  356462475  356281833  356717643  356375827 
 1310720:  779727790  766478393  766095624  766078596  765622015  765227042 
 1572864:  842940528  842779434  842332158  843695259  844266458  843699492 
 1835008: 1004139895 1004105574 1004339234 1004081544 1004230732 1004221781 
 2097152: 1082431221 1085156820 1081905129 1082271411 1082074941 1082375982 
 2621440: 2340721122 2313649116 2313807750 2313378786 2313885132 2314466367 
 3145728: 2551012401 2550746108 2550567198 2554318764 2551554992 2551573638 
 3670016: 3037254618 3036600038 3036385558 3035681738 3035483270 3036260846 
 4194304: 3284301273 3280401954 3280293025 3281160638 3280804110 3280877136 
 5242880: 7041577524 6992734518 6990440328 6987581352 6986730330 6990719220 
 6291456: 7711623408 7710990222 7706679632 7718467685 7706209937 7705363141 
 7340032: 9179188840 9174005845 9174374568 9177766976 9177300315 9173816252 
 8388608: 9898105195 9892386954 9916493895 9893409003 9878862492 9889922178 

Older timings of OpenSSL 0.9.3 on a Pentium-II:

      1:       1709        221        199        173        173        173 
      2:        204        173        173        173        173        173 
      4:        189        173        173        173        178        173 
      8:        188        173        173        173        173        173 
     16:        188        173        173        173        173        173 
     32:        241        169        169        169        169        169 
     64:        931        255        237        237        220        220 
    128:        942        398        377        400        377        377 
    256:       2387        551        501        530        501        501 
    512:       5425       2038       1945       1970       1934       1934 
   1024:       9214       6750       6643       6626       6626       6607 
   2048:      31571      21539      21295      21315      21300      21315 
   4096:      80817      67946      67668      67615      67615      67634 
   8192:     231559     210311     210079     210079     210079     210079 
  16384:     686731     644408     644286     644176     644298     650586 
  32768:    2053030    1993736    1971903    1977854    1971871    1977038 
  65536:    6148814    5997568    5979039    5983902    5988009    5988392 
 131072:   18451390   18125190   18120955   18124625   18128916   18118647 
 262144:   55321350   54611910   54601617   54610680   54606015   54646073 
 524288:  166515726  164954703  164927572  164953991  165076395  164969343 
1048576:  499865692  496917476  497227680  496965668  496877964  496856052 
2097152: 1501506341 1495402173 1495164024 1495725984 1496591580 1495947001 
4194304: 4508086985 4496082061 4495497030 4495770108 4497505377 4495974129 

Older timings of OpenSSL 0.9.3 on a Pentium:

      1:       2582        203        164        164        164        164 
      2:        382        157        157        157        157        157 
      4:        383        163        157        157        157        157 
      8:        381        157        157        157        157        157 
     16:        381        157        157        157        157        157 
     32:        447        159        151        148        148        148 
     64:        879        252        222        216        216        216 
    128:       1185        494        466        452        452        452 
    256:       2117        920        893        886        886        886 
    512:       6409       3391       3341       3293       3291       3297 
   1024:      14473      10419      10357      10341      10341      10341 
   2048:      53395      32114      31987      31965      31965      31965 
   4096:     127599      98336      98143      98123      98123      98123 
   8192:     349052     308926     305230     305191     305153     308033 
  16384:    1044194     934956     930814     933789     933798     930822 
  32768:    3036390    2904676    2941772    2898122    2942490    2898460 
  65536:    9074094    8762712    8757750    8757446    8761678    8758266 
 131072:   27285466   26701524   26745194   26745730   26701182   26743878 
 262144:   81282118   79673920   79250288   79178708   79209816   79172410 
 524288:  241980958  239327272  239213726  239671800  239274818  239248328 
1048576:  731180562  726718024  726726610  726994154  727835040  727163878 
2097152: 2180201238 2160878220 2161015476 2167436958 2168630402 2160352964