:)

Here is the proof tested on my P4 3.6 GHz:


Proc/Byte? 0? ?1? ?2? ?3? ?5? ?8? 13? 22? 39? 55? 89 144 239? 999
0 byte misalignment
szLength? 16? 15? 14? 15? 20? 22? 24? 32? 56? 79 144 245 250? 861
Ratch? ? ?12? 17? 20? 22? 19? 21? 25? 35? 59? 80 135 180 268 1046
Jens_fast 18? 20? 20? 19? 21? 26? 35? 73? 84? 99 127 168 243 1097
roticvSSE? 9? 32? 31? 32? 31? 36? 36? 42? 55? 68 111 235 325? 919
lszLenSSE 30? 28? 28? 30? 30? 32? 32? 37? 51? 65 101 193 275? 978
Jens_mmx2? 9? 48? 45? 45? 50? 51? 54? 62? 79? 64? 98? 90 152? 460
slenLingo 14? 14? 15? 15? 15? 15? 15? 22? 27? 36? 48? 72? 96? 405

1 byte misalignment
szLength? 20? 20? 18? 25? 23? 26? 29? 35? 51? 63 210 178 262? 869
Ratch? ? ?13? 15? 18? 20? 19? 19? 25? 37? 59? 91 171 257 420 1666
Jens_fast 19? 19? 19? 18? 20? 24? 29? 72? 85 131 155 207 322 1450
roticvSSE? 7? 13? 16? 19? 24? 57? 57? 62? 79? 94 122 169 319? 967
lszLenSSE 29? 29? 29? 29? 28? 32? 32? 42? 74 113 116 230 329 1095
Jens_mmx2? 9? 13? 17? 21? 30? 76? 82? 88 113? 97 134 147 179? 564
slenLingo 15? 15? 15? 15? 15? 15? 15? 22? 27? 37? 49? 71 101? 407

2 byte misalignment
szLength? 21? 18? 22? 21? 21? 27? 26? 37? 51? 63 131 176 255? 965
Ratch? ? ?13? 17? 19? 22? 21? 22? 36? 34? 59? 79 166 246 422 1491
Jens_fast 19? 23? 18? 20? 22? 23? 88 101 119 101 156 211 330 1355
roticvSSE? 9? 13? 16? 18? 24? 56? 55? 63? 76? 92 169 260 299? 939
lszLenSSE 29? 29? 29? 28? 28? 33? 45? 38? 56? 69 115 221 330 1195
Jens_mmx2? 9? 14? 17? 21? 32? 77? 77? 88 118? 89 120 151 183? 502
slenLingo 15? 15? 15? 15? 14? 15? 15? 22? 28? 37? 49? 71 102? 407

3 byte misalignment
szLength? 20? 24? 23? 23? 26? 25? 32? 38? 92 105 135 176 253? 880
Ratch? ? ?13? 18? 20? 22? 21? 20? 24? 34? 72? 95 169 318 410 1434
Jens_fast 20? 21? 19? 20? 22? 24? 27? 74 119 135 159 237 331 1474
roticvSSE? 8? 14? 16? 18? 24? 51? 56? 60? 72? 86 114 160 296 1090
lszLenSSE 29? 30? 28? 29? 28? 32? 31? 38? 59? 76 119 247 343 1124
Jens_mmx2? 8? 11? 17? 21? 30? 66? 81 141 192? 85 119 136 170? 484
slenLingo 14? 14? 14? 15? 15? 14? 15? 22? 28? 36? 48? 72 103? 406

Press enter to exit...


Regards,
Lingo
Attachments:
Posted on 2005-08-04 17:11:08 by lingo12
Nice to see that it's not optimized at the expense of short strings, and that it's still the fastest for long strings. Nice work :)

You might want to add a few details, though - like minimum processor requirement, and which processor you did the test on.
Posted on 2005-08-04 18:21:36 by f0dder
He's tested it on P4 3.6GHz, like he said, yet the RAM speed and motherboard are what I think is also important for the benchmark tables. It's SSE, so "slenLingo" needs at least a P3 or K7:Palomino. (I don't have SSE experience yet, so I can be wrong on this)
I tested it on my AthlonXP 2000+ (1.66GHz) , VIA-K400A, 512MB DDR @400MHz, no overclocking. The results are much better than those on lingo12's PC, but the erroneous results are what bothers me:


Test routines for correctness:
0 byte misalignment
szLength    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Ratch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_fast    0    1    2    3    5    8  13  22  39  55  89  144  239  999
roticvSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
lszLenSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_mmx2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
slenLingo    0    1    2    3    5  17  22  22  39  55  98  144 1255  999
1 byte misalignment
szLength    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Ratch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_fast    0    1    2    3    5    8  13  22  39  55  89  144  239  999
roticvSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
lszLenSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_mmx2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
slenLingo    0    1    2    3    5  17  22  22  48  64  98  144  239 1008
2 byte misalignment
szLength    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Ratch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_fast    0    1    2    3    5    8  13  22  39  55  89  144  239  999
roticvSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
lszLenSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_mmx2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
slenLingo    0    1    2    3    5  17  30  31  48  64  98  144  239 1008
3 byte misalignment
szLength    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Ratch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_fast    0    1    2    3    5    8  13  22  39  55  89  144  239  999
roticvSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
lszLenSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_mmx2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
slenLingo    0    1    2    3    5  17  13  31  48  64  98  144  239 1008

Proc/Byte    0    1    2    3    5    8  13  22  39  55  89  144  239  999
========= ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

0 byte misalignment
szLength    8  10    9  10  12  14  17  24  34  47  91  133  206  790
Ratch        8  11  12  15  14  14  20  31  65  80  101  141  229  858
Jens_fast  19  20  20  20  21  26  29  37  57  70  99  146  221  931
roticvSSE    6  28  28  30  28  32  32  35  40  52  80  112  158  586
lszLenSSE  25  25  25  25  25  28  28  33  38  47  82  120  168  592
Jens_mmx2    8  32  32  32  37  44  46  56  79  47  93  58  126  289
slenLingo  25  25  25  25  25  28  28  28  31  39  54  70  442  356

1 byte misalignment
szLength    13  14  13  15  15  19  20  26  40  52  93  135  209  788
Ratch        8  11  12  15  18  15  24  32  70  86  109  155  256  956
Jens_fast  20  20  20  19  24  28  32  40  62  76  106  154  239 1002
roticvSSE    4    7  11  12  19  48  49  52  59  73  94  126  176  586
lszLenSSE  28  28  28  28  27  30  31  34  42  55  94  126  178  623
Jens_mmx2    6    8  12  16  26  52  60  66  86  62  96  123  143  295
slenLingo  28  28  28  28  28  31  31  31  43  46  56  72  118  366

2 byte misalignment
szLength    14  14  16  17  15  20  19  30  40  52  93  136  209  788
Ratch      10  11  12  15  18  15  23  32  69  87  110  155  255  957
Jens_fast  20  19  20  20  23  28  32  40  61  77  105  154  239 1004
roticvSSE    6    7  10  12  19  45  46  51  60  67  91  120  180  588
lszLenSSE  29  28  28  28  28  31  31  31  42  56  92  124  177  625
Jens_mmx2    7    9  12  16  26  49  54  69  86  59  96  120  139  294
slenLingo  29  28  28  28  28  31  34  33  42  46  57  71  119  367

3 byte misalignment
szLength    14  16  16  15  19  20  24  30  41  52  95  137  210  788
Ratch        8  11  12  15  18  15  23  33  69  86  110  155  255  956
Jens_fast  20  20  20  20  24  28  33  41  62  76  105  156  239 1002
roticvSSE    5    7  10  12  18  43  46  50  54  66  90  125  173  587
lszLenSSE  28  28  29  27  28  31  30  35  43  57  90  124  174  628
Jens_mmx2    7    9  12  16  26  45  59  67  83  55  112  117  137  292
slenLingo  28  28  28  29  28  32  31  34  42  47  56  72  117  363


Also, more importantly, notice the speed of Jens_mmx2!
Posted on 2005-08-04 22:07:31 by Ultrano
My results on a amd athlon 3000+
i too get the
slenLingo? ? 0? ? 1? ? 2? ? 3? ? 5? ?17? ?13? ?31? ?48? ?64? ?98? 144? 239 1008
seems it doesnt work correctly on an amd.
and much faster then that p4 3.6 ghz, furthers my opinions about how amd is much better then intel.

0 byte misalignment
szLength? ? ?8? ? 9? ?10? ?10? ?11? ?15? ?16? ?24? ?34? ?47? ?90? 132? 203? 782
Ratch? ? ? ? 8? ?10? ?12? ?15? ?14? ?14? ?20? ?30? ?65? ?78? 102? 141? 231? 856
Jens_fast? ?20? ?20? ?20? ?20? ?21? ?25? ?29? ?36? ?56? ?70? ?99? 146? 221? 929
roticvSSE? ? 6? ?28? ?28? ?29? ?28? ?32? ?32? ?35? ?39? ?53? ?80? 112? 157? 587
lszLenSSE? ?25? ?25? ?25? ?25? ?25? ?28? ?28? ?32? ?38? ?47? ?82? 119? 167? 591
Jens_mmx2? ? 6? ?32? ?32? ?31? ?37? ?43? ?47? ?56? ?80? ?47? ?93? ?59? 124? 290
slenLingo? ?25? ?25? ?25? ?25? ?25? ?28? ?28? ?28? ?31? ?39? ?53? ?70? 438? 355

1 byte misalignment
szLength? ? 12? ?14? ?14? ?16? ?15? ?19? ?20? ?26? ?40? ?51? ?92? 135? 208? 784
Ratch? ? ? ? 8? ?11? ?12? ?15? ?18? ?15? ?22? ?32? ?70? ?86? 109? 154? 255? 954
Jens_fast? ?20? ?20? ?20? ?20? ?24? ?28? ?32? ?41? ?63? ?76? 106? 154? 238 1000
roticvSSE? ? 5? ? 7? ?11? ?12? ?18? ?48? ?49? ?51? ?59? ?72? ?94? 126? 175? 584
lszLenSSE? ?28? ?28? ?28? ?28? ?28? ?30? ?31? ?33? ?41? ?55? ?93? 125? 179? 620
Jens_mmx2? ? 6? ? 9? ?13? ?16? ?25? ?51? ?59? ?66? ?86? ?62? ?96? 122? 143? 295
slenLingo? ?28? ?28? ?28? ?28? ?28? ?31? ?31? ?30? ?42? ?46? ?57? ?72? 119? 366

2 byte misalignment
szLength? ? 14? ?14? ?16? ?16? ?15? ?19? ?20? ?29? ?40? ?51? ?92? 136? 208? 786
Ratch? ? ? ? 9? ?11? ?12? ?15? ?18? ?15? ?23? ?32? ?68? ?86? 109? 155? 254? 954
Jens_fast? ?20? ?20? ?20? ?20? ?24? ?28? ?32? ?40? ?61? ?76? 105? 154? 238 1000
roticvSSE? ? 6? ? 7? ?10? ?12? ?19? ?45? ?46? ?51? ?59? ?66? ?92? 120? 180? 584
lszLenSSE? ?28? ?28? ?28? ?28? ?28? ?30? ?30? ?32? ?41? ?55? ?92? 124? 177? 624
Jens_mmx2? ? 8? ? 9? ?12? ?16? ?26? ?48? ?54? ?69? ?86? ?59? ?96? 120? 140? 293
slenLingo? ?28? ?28? ?28? ?28? ?28? ?31? ?34? ?34? ?43? ?46? ?57? ?71? 118? 365

3 byte misalignment
szLength? ? 14? ?16? ?15? ?15? ?19? ?20? ?24? ?29? ?41? ?52? ?94? 136? 209? 787
Ratch? ? ? ? 8? ?10? ?11? ?15? ?18? ?15? ?23? ?32? ?69? ?86? 109? 156? 254? 951
Jens_fast? ?20? ?20? ?20? ?20? ?24? ?28? ?32? ?40? ?62? ?76? 106? 154? 238 1001
roticvSSE? ? 5? ? 7? ? 9? ?12? ?18? ?43? ?46? ?49? ?53? ?66? ?90? 125? 172? 586
lszLenSSE? ?28? ?28? ?28? ?28? ?28? ?31? ?30? ?35? ?43? ?57? ?90? 124? 174? 626
Jens_mmx2? ? 6? ? 8? ?12? ?16? ?26? ?45? ?59? ?67? ?84? ?55? 108? 116? 137? 292
slenLingo? ?28? ?28? ?28? ?28? ?28? ?31? ?31? ?34? ?42? ?46? ?57? ?73? 115? 362

Posted on 2005-08-04 22:15:57 by Qages
Thank you guys,? :D

Qages,
"seems it doesn't work correctly on an amd"

Seems you are right about Athlon 3000+
and? AthlonXP 2000+ :sad:


Ultrano,

"yet the RAM speed and motherboard are what I think
is also important for the benchmark tables."


Here is the contents of the my box:

Mobo:
Asus? P5AD2-E PREMIUM/WLOM Socket 775,
Intel i925XE Chipset w/ PCI Express x16 (ATX)
Onboard High Definition Audio, Serial ATA & IDE RAID,
Gigabit Lan and 1394b/a Firewire.

CPU:
Intel Pentium 4 -560J, 3.6-GHz (Prescott) @ 800Mhz w/ 1Mb
(Socket 775) (Retail Box) with Heat Sink & Fan - Supports
Hyper-Threading Technology

Hard Drives:
2X74 GB Western Digital? Raptor SATA-150 10,000RPM 8Mb
in RAID-0

Optical Drive:
NEC ND-3520A Dual Layer DVD?R/RW Drive (IDE) OEM,
Black - DVD+R (16X), DVD+RW (8X), DVD-R (16X),
DVD-RW (6X), DL DVD+R (4X), CDR (48X), CDRW (24X)

Memory:
OCZ 2Gb PC2-4200 DDR2 533Mhz Platinum EB Dual Channel
Limited Edition Rev 2 (2 x 1GB) (OCZ25332048EBDCPER2-K)
Timings: 3-2-2-8

Case:
Soyo / Black / ATX Mid-Tower / 350-Watt Power Supply / 7-Bay
/ Front USB / Keyboard, Mouse, Speakers / Computer Case

PSU:
Ultra / X-Connect / 500-Watt / ATX / Dual 80mm Fan / Titanium-Blue /
Limited Edition Modular Power Supply

Video Card:
Asus Extreme AX850XT Platinum Edition

TV&FM? Tuner:
Sapphire Theatrix? Theatre 550 Pro FM & TV-Tuner

When my daughter play games the CPU is overclocked at 4.22 GHz
Of course it is not overclocked for my tests

"Also, more importantly, notice the speed of Jens_mmx2!"

You have an error in the "Test routines for correctness"
This means that the timing result is wrong too, hence
"more importantly, I can't notice and compare the speed of Jens_mmx2!" because of that...


f0dder,

"You might want to add a few details, though -
like minimum processor requirement, and which processor you did the test on."


You are right of course and I shall try when have more free time :)

Regards,
Lingo


Posted on 2005-08-05 18:04:08 by lingo12
Haven't had time to really look at the code yet, got a visitor here I want to spent (most of) my time on :)

Do you make sure the strings aren't in cache after the first algorithm is timed?
Posted on 2005-08-05 18:16:22 by f0dder
Guys,? :)

I included new version with hope
to work with your CPU

Pls, reload the zip file and test it again

Regards,
Lingo
Posted on 2005-08-05 22:18:16 by lingo12
still not workin ;(



Test routines for correctness:
0 byte misalignment
szLength    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Ratch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_fast    0    1    2    3    5    8  13  22  39  55  89  144  239  999
roticvSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
lszLenSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_mmx2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoSSE    0  16    0  32    0  32    0  32    0  32    0  32    0  32
LingoSSE2    0    1    2    3    5  17  22  22  39  55  98  144 1255  999
1 byte misalignment
szLength    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Ratch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_fast    0    1    2    3    5    8  13  22  39  55  89  144  239  999
roticvSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
lszLenSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_mmx2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoSSE    0  15    0  31    0  31    0  31    0  31    0  31    0  31
LingoSSE2    0    1    2    3    5  17  22  22  48  64  98  144  239 1008

...
Proc/Byte    0    1    2    3    5    8  13  22  39  55  89  144  239  999
========= ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

0 byte misalignment
szLength    9    8    9  10  11  14  18  24  34  47  90  131  204  784
Ratch        8  11  11  15  15  14  20  30  64  79  102  141  230  857
Jens_fast  20  20  20  20  21  26  29  36  56  69  99  146  222  927
roticvSSE    3  28  28  29  28  32  32  35  39  52  80  111  157  565
lszLenSSE  25  25  25  25  25  28  28  32  39  47  82  120  169  591
Jens_mmx2    7  31  32  31  37  43  47  56  80  46  93  59  125  289
LingoSSE    30  31  30  32  32  32  30  27  27  28  27  28  27  27
LingoSSE2  25  25  25  25  25  28  29  28  32  39  53  68  434  350

1 byte misalignment
szLength    13  14  13  16  15  19  20  26  41  51  92  137  208  785
Ratch        7  10  11  15  18  15  23  32  70  86  109  156  255  953
Jens_fast  20  20  20  20  24  28  32  40  65  76  105  154  238 1000
roticvSSE    4    7  10  12  18  48  48  52  58  71  94  125  176  585
lszLenSSE  28  28  28  28  28  30  31  33  41  54  93  125  178  624
Jens_mmx2    6    9  13  16  26  51  60  65  86  62  96  123  143  295
LingoSSE    33  36  33  31  36  34  31  30  30  31  30  31  31  30
LingoSSE2  28  28  28  28  28  32  31  32  42  46  57  71  115  362


...

Posted on 2005-08-05 23:05:09 by Qages

Test routines for correctness:
0 byte misalignment
szLength    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Ratch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_fast    0    1    2    3    5    8  13  22  39  55  89  144  239  999
roticvSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
lszLenSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_mmx2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoSSE2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
1 byte misalignment
szLength    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Ratch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_fast    0    1    2    3    5    8  13  22  39  55  89  144  239  999
roticvSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
lszLenSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_mmx2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoSSE2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
2 byte misalignment
szLength    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Ratch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_fast    0    1    2    3    5    8  13  22  39  55  89  144  239  999
roticvSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
lszLenSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_mmx2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoSSE2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
3 byte misalignment
szLength    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Ratch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_fast    0    1    2    3    5    8  13  22  39  55  89  144  239  999
roticvSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
lszLenSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_mmx2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoSSE2    0    1    2    3    5    8  13  22  39  55  89  144  239  999

Proc/Byte    0    1    2    3    5    8  13  22  39  55  89  144  239  999
========= ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

0 byte misalignment
szLength    5    5    6    6    8  11  13  18  28  55  77  110  171  648
Ratch        4    7  13  16  10    8  16  25  59  70  91  130  209  785
Jens_fast  16  16  16  16  17  18  22  26  52  64  91  134  208  855
roticvSSE    4  17  20  20  20  23  23  25  31  36  68  88  122  407
lszLenSSE  19  18  19  23  18  22  22  25  30  35  69  90  123  413
Jens_mmx2    5  29  29  29  28  30  32  38  72  37  76  60  102  257
LingoSSE    22  23  22  20  24  22  22  24  26  29  37  53  90  282
LingoSSE2  22  22  22  22  22  22  22  24  24  29  36  52  89  284

1 byte misalignment
szLength    11  12  12  11  12  16  17  22  53  62  84  119  178  654
Ratch        4    7  13  15  14  11  16  27  60  72  92  131  211  788
Jens_fast  16  16  16  16  20  21  22  30  58  68  93  136  209  869
roticvSSE    2    7    6    9  15  50  50  38  46  52  81  103  140  429
lszLenSSE  19  19  20  19  19  26  25  29  33  38  71  91  126  419
Jens_mmx2    5    4    9  14  24  58  44  48  62  52  73  103  120  264
LingoSSE    26  27  26  26  26  27  26  29  30  32  41  57  96  292
LingoSSE2  26  27  26  26  26  27  26  29  31  32  37  53  94  283

2 byte misalignment
szLength    12  12  11    8  12  17  17  26  52  58  83  118  177  662
Ratch        5    8  13  15  10  11  16  27  60  72  91  130  214  782
Jens_fast  16  16  16  16  20  21  25  30  53  69  94  135  206  871
roticvSSE    5    3    6    9  15  48  48  55  61  67  95  119  153  421
lszLenSSE  20  19  19  19  20  25  25  28  33  38  71  91  129  410
Jens_mmx2    6    4    9  14  24  64  63  30  59  51  72  100  116  252
LingoSSE    26  26  26  27  26  26  26  28  31  32  41  57  100  291
LingoSSE2  26  26  32  27  26  26  26  28  31  32  37  53  96  288

3 byte misalignment
szLength    12  11  11  12  16  17  21  26  37  47  84  118  178  659
Ratch        4    7  13  15  10  11  16  27  60  72  93  132  214  786
Jens_fast  16  16  19  16  20  21  22  30  58  68  93  135  206  873
roticvSSE    4    3    6    9  15  32  34  37  42  47  75  97  137  418
lszLenSSE  19  20  19  19  19  26  25  28  33  37  71  96  125  410
Jens_mmx2    5    7    9  14  24  42  48  52  57  48  90  94  113  253
LingoSSE    27  26  26  26  27  28  27  28  31  33  41  59  99  285
LingoSSE2  27  26  26  26  27  26  27  28  31  33  37  53  94  286


Socket 939 AMD64 3500+, TWINX1024-3200C2 DDR-400 (2x512MB), MSI K8N-NEO4-Platinum nForce4 chipset.
Posted on 2005-08-06 03:49:37 by f0dder
Btw, what's the fastest you can do if using maximum the MMX instruction set? That's probably the lowest instruction set I dare target for generic code (unless, of course, I'm making "detect features at runtime and select appropriate code" :-) ).
Posted on 2005-08-06 03:52:12 by f0dder
maybe not the fastest but it's mmx only

;; assume string is aligned@8
OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE
StrLenMMX proc pszString
mov edx,;;pszString
pxor mm1,mm1
@@: movq mm0,
add edx,8
pcmpeqb mm0,mm1
movd eax,mm0
psrlq mm0,32
movd ecx,mm0
test eax,eax
jnz @F
test ecx,ecx
jz @B
emms
bsf eax,ecx
shr eax,3
sub edx,;;pszString
lea eax,
ret 1*4
@@: emms
bsf eax,eax
shr eax,3
sub edx,;;pszString
lea eax,
ret 1*4
StrLenMMX endp
OPTION PROLOGUE:PROLOGUEDEF
OPTION EPILOGUE:EPILOGUEDEF

(for sure lingo12 can do better ;)
Posted on 2005-08-06 17:17:40 by drizz
f0dder,

I improved my algos LingoSSE2 and? LingoMMX? (see timelen.asm)
and finished 32 bit algo of strlen too.. (see timelen1.asm)
I'm curious about the results on your CPU
Here is the results on my P4 3.6 GHz Prescott:


A. Timelen.asm -> test

Test routines for correctness:
0 byte misalignment
Borland? ?0 1 2 3 5 8 13 22 39 55 89 144 239 999
szLength? 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Ratch? ? ?0 1 2 3 5 8 13 22 39 55 89 144 239 999
Hutch? ? ?0 1 2 3 5 8 13 22 39 55 89 144 239 999
Jens_fast 0 1 2 3 5 8 13 22 39 55 89 144 239 999
lszLenSSE 0 1 2 3 5 8 13 22 39 55 89 144 239 999
roticvSSE 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Biterider 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Jens_mmx2 0 1 2 3 5 8 13 22 39 55 89 144 239 999
LingoMMX? 0 1 2 3 5 8 13 22 39 55 89 144 239 999
LingoSSE2 0 1 2 3 5 8 13 22 39 55 89 144 239 999

1 byte misalignment
Borland? ?0 1 2 3 5 8 13 22 39 55 89 144 239 999
szLength? 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Ratch? ? ?0 1 2 3 5 8 13 22 39 55 89 144 239 999
Hutch? ? ?0 1 2 3 5 8 13 22 39 55 89 144 239 999
Jens_fast 0 1 2 3 5 8 13 22 39 55 89 144 239 999
lszLenSSE 0 1 2 3 5 8 13 22 39 55 89 144 239 999
roticvSSE 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Biterider 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Jens_mmx2 0 1 2 3 5 8 13 22 39 55 89 144 239 999
LingoMMX? 0 1 2 3 5 8 13 22 39 55 89 144 239 999
LingoSSE2 0 1 2 3 5 8 13 22 39 55 89 144 239 999

2 byte misalignment
Borland? ?0 1 2 3 5 8 13 22 39 55 89 144 239 999
szLength? 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Ratch? ? ?0 1 2 3 5 8 13 22 39 55 89 144 239 999
Hutch? ? ?0 1 2 3 5 8 13 22 39 55 89 144 239 999
Jens_fast 0 1 2 3 5 8 13 22 39 55 89 144 239 999
lszLenSSE 0 1 2 3 5 8 13 22 39 55 89 144 239 999
roticvSSE 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Biterider 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Jens_mmx2 0 1 2 3 5 8 13 22 39 55 89 144 239 999
LingoMMX? 0 1 2 3 5 8 13 22 39 55 89 144 239 999
LingoSSE2 0 1 2 3 5 8 13 22 39 55 89 144 239 999

3 byte misalignment
Borland? ?0 1 2 3 5 8 13 22 39 55 89 144 239 999
szLength? 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Ratch? ? ?0 1 2 3 5 8 13 22 39 55 89 144 239 999
Hutch? ? ?0 1 2 3 5 8 13 22 39 55 89 144 239 999
Jens_fast 0 1 2 3 5 8 13 22 39 55 89 144 239 999
lszLenSSE 0 1 2 3 5 8 13 22 39 55 89 144 239 999
roticvSSE 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Biterider 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Jens_mmx2 0 1 2 3 5 8 13 22 39 55 89 144 239 999
LingoMMX? 0 1 2 3 5 8 13 22 39 55 89 144 239 999
LingoSSE2 0 1 2 3 5 8 13 22 39 55 89 144 239 999


Proc/Byte? 0? 1? 2 3? 5? 8? 13 22? 39? 55? 89 144 239? 999
===========================================================

0 byte misalignment
Borland? ?19 20 20 20 22 25 32 42? 70 122 167 232 344 1988
szLength? 15 15 16 16 19 22 24 31? 52? 72 128 174 248? 866
Ratch? ? ?12 15 18 20 19 21 24 35? 59? 82 140 182 284? 993
Hutch? ? ?21 21 23 23 24 30 33 40? 56? 81 149 187 279? 989
Jens_fast 19 19 19 19 20 23 43 80? 88 101 126 168 252? 981
lszLenSSE 28 29 28 28 28 32 32 37? 52? 64 101 200 289? 925
roticvSSE? 8 13 19 18 25 36 36 41? 59? 73 109 159 275? 924
Biterider 14 15 15 15 14 25 23 37? 49? 61 102 219 272? 922
Jens_mmx2? 8 44 45 45 50 53 57 67? 78? 63? 99? 90 155? 466
LingoMMX? 14 14 14 14 14 24 24 36? 47? 66 100 117 143? 402
LingoSSE2 14 14 14 14 14 14 14 25? 39? 46? 69? 98 111? 301

1 byte misalignment
Borland? ?19 20 20 20 22 25 31 42? 69 165 189 281 437 2535
szLength? 19 19 19 23 23 27 29 35? 50? 63 131 176 256? 882
Ratch? ? ?12 15 18 20 19 20 25 34? 59? 92 170 247 397 1465
Hutch? ? ?20 21 24 23 38 40 42 45? 60? 83 154 187 298 1002
Jens_fast 20 20 19 20 23 32 27 72? 85 131 162 215 321 1362
lszLenSSE 28 28 28 28 28 32 32 36? 51? 76 118 226 331 1084
roticvSSE 10 14 16 18 24 58 60 64? 83? 97 122 168 308? 978
Biterider 14 14 14 14 14 24 24 37? 55? 72? 97 165 283? 932
Jens_mmx2? 8 12 17 21 31 77 84 95 119 100 131 153 183? 490
LingoMMX? 14 14 14 14 14 24 24 36? 51? 67 101 121 145? 403
LingoSSE2 14 14 14 14 14 14 14 25? 39? 49? 69? 98 117? 304

2 byte misalignment
Borland? ?19 20 20 20 22 26 43 42? 69 121 192 284 455 2418
szLength? 19 18 21 21 21 24 27 37? 51? 63 131 176 253? 872
Ratch? ? ?12 15 19 21 20 20 37 36? 59? 81 166 247 401 1472
Hutch? ? ?19 21 20 22 33 36 41 51? 60? 80 159 212 321 1006
Jens_fast 19 19 19 19 20 27 62 77? 85? 99 156 209 328 1366
lszLenSSE 29 29 28 28 28 32 44 37? 52? 64 124 253 343 1091
roticvSSE? 8 12 16 18 25 55 54 64? 76? 90 117 164 297? 956
Biterider 14 14 15 14 15 24 24 44? 56? 73? 97 160 284? 936
Jens_mmx2? 8 14 17 20 33 76 77 92 106? 89 123 144 177? 497
LingoMMX? 13 15 15 15 14 24 24 38? 56? 69? 97 118 145? 403
LingoSSE2 14 14 14 14 14 14 14 25? 39? 50? 74 101 117? 301

3 byte misalignment
Borland? ?20 23 23 23 23 26 31 45? 83 150 196 328 443 2381
szLength? 20 21 21 22 24 24 31 37? 92 104 137 176 254? 872
Ratch? ? ?13 15 17 20 20 20 24 35? 72? 95 167 282 405 1438
Hutch? ? ?19 19 22 28 32 33 40 65? 70? 94 158 264 367? 998
Jens_fast 19 19 19 19 20 27 59 86 117 128 150 198 301 1377
lszLenSSE 30 28 29 28 28 32 34 40? 59? 76 111 245 354 1128
roticvSSE? 8 12 16 19 24 51 55 60? 72? 89 115 161 293? 962
Biterider 14 14 15 15 24 24 37 44? 55? 73? 97 156 283? 935
Jens_mmx2? 8 12 17 20 30 66 74 82 101? 82 118 142 180? 490
LingoMMX? 13 14 14 14 14 24 25 41? 57? 71? 97 117 146? 402
LingoSSE2 14 14 14 14 14 14 14 25? 39? 46? 69? 98 117? 301

Press enter to exit...


B. Timelen1.asm -> test

Test routines for correctness:
0 byte misalignment
RatchN? 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Lingo32 0 1 2 3 5 8 13 22 39 55 89 144 239 999

1 byte misalignment
RatchN? 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Lingo32 0 1 2 3 5 8 13 22 39 55 89 144 239 999

2 byte misalignment
RatchN? 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Lingo32 0 1 2 3 5 8 13 22 39 55 89 144 239 999

3 byte misalignment
RatchN? 0 1 2 3 5 8 13 22 39 55 89 144 239 999
Lingo32 0 1 2 3 5 8 13 22 39 55 89 144 239 999


Proc/Byte 0? 1? 2? 3? 5? 8 13 22 39 55? 89 144 239? 999

========================================================

0 byte misalignment
RatchN? ?12 18 22 23 21 20 26 36 65 80 135 178 258 1392
Lingo32? 10 14 17 19 18 17 20 28 39 55 111 141 198 1047

1 byte misalignment
RatchN? ? 9 15 21 32 38 38 44 57 75 101 146 192 270 1513
Lingo32? ?9 14 18 22 27 27 31 32 46? 53 113 146 203 1054

2 byte misalignment
RatchN? ? 9 15 25 29 32 32 37 48 70 93 144 189 268 1493
Lingo32? 10 15 18 20 26 26 27 33 46 54 113 147 206 1052

3 byte misalignment
RatchN? ? 9 22 22 23 23 31 30 42 64 87 139 184 257 1411
Lingo32? ?9 15 17 19 17 28 28 34 47 55 112 148 200 1053

Press enter to exit...



Regards,
Lingo

Attachments:
Posted on 2005-08-16 13:25:38 by lingo12
Cheers :)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TIMELEN.EXE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Test routines for correctness:
0 byte misalignment
Borland      0    1    2    3    5    8  13  22  39  55  89  144  239  999
szLength    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Ratch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Hutch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_fast    0    1    2    3    5    8  13  22  39  55  89  144  239  999
lszLenSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
roticvSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Biterider    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_mmx2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoMMX    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoSSE2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
1 byte misalignment
Borland      0    1    2    3    5    8  13  22  39  55  89  144  239  999
szLength    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Ratch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Hutch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_fast    0    1    2    3    5    8  13  22  39  55  89  144  239  999
lszLenSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
roticvSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Biterider    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_mmx2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoMMX    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoSSE2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
2 byte misalignment
Borland      0    1    2    3    5    8  13  22  39  55  89  144  239  999
szLength    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Ratch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Hutch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_fast    0    1    2    3    5    8  13  22  39  55  89  144  239  999
lszLenSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
roticvSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Biterider    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_mmx2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoMMX    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoSSE2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
3 byte misalignment
Borland      0    1    2    3    5    8  13  22  39  55  89  144  239  999
szLength    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Ratch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Hutch        0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_fast    0    1    2    3    5    8  13  22  39  55  89  144  239  999
lszLenSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
roticvSSE    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Biterider    0    1    2    3    5    8  13  22  39  55  89  144  239  999
Jens_mmx2    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoMMX    0    1    2    3    5    8  13  22  39  55  89  144  239  999
LingoSSE2    0    1    2    3    5    8  13  22  39  55  89  144  239  999

Proc/Byte    0    1    2    3    5    8  13  22  39  55  89  144  239  999
========= ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

0 byte misalignment
Borland      5    6    7    9  12  14  20  29  59  74  110  170  259 1012
szLength    5    5    6    6    8  11  13  18  45  55  77  112  171  650
Ratch        4    7  13  15  10  10  18  25  58  70  91  134  209  780
Hutch        8  11  14  14  18  20  22  30  58  67  95  137  207  780
Jens_fast  16  16  16  16  17  18  22  26  52  64  92  137  203  855
lszLenSSE  21  19  19  21  19  22  22  25  30  35  69  90  123  412
roticvSSE    4  20  20  20  20  23  23  26  31  36  68  88  124  407
Biterider  19  21  21  21  21  25  25  27  32  34  67  87  121  406
Jens_mmx2    8  29  29  29  28  30  32  38  66  37  76  62  102  291
LingoMMX    21  22  21  26  21  22  22  22  28  45  59  67  78  229
LingoSSE2  21  21  21  21  21  21  21  19  26  29  52  66  77  199

1 byte misalignment
Borland      5    5    7    9  12  15  20  29  64  81  110  168  259 1029
szLength    11  12  12  11  12  16  18  22  52  62  83  117  181  654
Ratch        4    7  13  15  10  11  16  27  60  72  95  130  210  786
Hutch        6  10  14  17  24  28  30  36  86  97  103  163  236  794
Jens_fast  16  16  16  16  20  21  22  30  58  71  93  135  207  871
lszLenSSE  19  21  20  19  19  26  25  29  33  38  71  91  126  414
roticvSSE    4    3    6    9  15  50  50  54  63  53  81  104  143  426
Biterider  21  21  21  21  21  25  25  28  33  38  67  88  121  410
Jens_mmx2    5    4    9  14  24  68  67  72  85  70  74  103  121  260
LingoMMX    21  23  21  21  21  22  22  22  42  47  60  67  83  233
LingoSSE2  21  21  21  21  21  21  21  22  26  29  52  66  81  202

2 byte misalignment
Borland      5    6    7    9  12  15  20  31  64  80  112  167  266 1029
szLength    12  15  11  11  12  17  17  26  52  62  84  118  177  656
Ratch        5    7  13  15  10  11  16  27  60  72  98  130  213  783
Hutch        7  10  14  19  22  26  28  36  68  77  101  143  216  791
Jens_fast  16  16  16  16  20  21  25  58  57  68  93  135  210  868
lszLenSSE  20  19  20  22  20  25  25  28  34  38  71  91  139  409
roticvSSE    5    2    6    5  15  48  48  54  44  51  78  100  137  426
Biterider  21  21  23  21  21  25  25  29  33  38  67  87  123  409
Jens_mmx2    6    4    9  14  25  40  43  47  59  51  70  97  116  252
LingoMMX    21  21  21  23  21  22  23  29  42  47  59  67  81  232
LingoSSE2  26  21  21  21  21  21  21  22  29  29  53  69  80  199

3 byte misalignment
Borland      5    6    7    9  12  15  20  29  64  80  112  169  265 1025
szLength    12  11  11  12  16  17  21  26  38  47  84  119  180  658
Ratch        4    7  13  15  10  11  16  27  60  72  91  130  213  783
Hutch        3  10  16  19  23  23  27  33  63  73  101  139  211  786
Jens_fast  16  16  16  16  20  21  22  30  59  68  96  135  206  867
lszLenSSE  22  20  19  19  19  25  25  28  33  38  71  92  126  412
roticvSSE    4    3    6    9  15  32  34  35  42  48  75  97  133  421
Biterider  21  21  21  21  25  25  27  29  33  38  67  87  125  413
Jens_mmx2    5    7    9  14  24  42  48  52  62  51  95  103  120  256
LingoMMX    21  21  21  21  22  22  22  26  42  47  58  67  82  233
LingoSSE2  18  21  21  21  21  21  22  22  26  29  52  66  80  199


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TIMELEN1.EXE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Test routines for correctness:
0 byte misalignment
RatchN      0    1    2    3    5    8  13  22  39  55  89  144  239  999
Lingo32      0    1    2    3    5    8  13  22  39  55  89  144  239  999
1 byte misalignment
RatchN      0    1    2    3    5    8  13  22  39  55  89  144  239  999
Lingo32      0    1    2    3    5    8  13  22  39  55  89  144  239  999
2 byte misalignment
RatchN      0    1    2    3    5    8  13  22  39  55  89  144  239  999
Lingo32      0    1    2    3    5    8  13  22  39  55  89  144  239  999
3 byte misalignment
RatchN      0    1    2    3    5    8  13  22  39  55  89  144  239  999
Lingo32      0    1    2    3    5    8  13  22  39  55  89  144  239  999

Proc/Byte    0    1    2    3    5    8  13  22  39  55  89  144  239  999
========= ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

0 byte misalignment
RatchN      8  11  14  16  13  12  18  27  61  72  94  132  211  979
Lingo32      6    8    7    9    8  10  15  18  44  52  69  96  146  765

1 byte misalignment
RatchN      4    6  10  22  24  24  30  39  61  72  105  144  212 1008
Lingo32      7  11  15  20  21  20  19  24  51  58  75  108  152  776

2 byte misalignment
RatchN      5    6  12  18  23  23  29  29  61  73  104  142  215 1012
Lingo32      7  11  12  14  16  17  20  22  50  59  75  103  147  774

3 byte misalignment
RatchN      4  10  13  16  11  23  17  28  60  73  93  142  211  978
Lingo32      7  10  12  13  12  14  16  20  47  56  71  101  148  772

Press enter to exit...

Posted on 2005-08-17 01:05:17 by f0dder
Cute,? :)

Thank you for your time

Regards,
Lingo
Posted on 2005-08-17 07:07:23 by lingo12
no problem at all, I had some minutes of idle time anyway :)
Posted on 2005-08-17 07:27:32 by f0dder
    See page 10 of this link.  Ratch

http://www.masmforum.com/simple/index.php?topic=1807.135
Posted on 2005-08-17 08:55:46 by Ratch