 |
|
 |
At last I made an easy to be run test package (a NSIS installation):
http://www.sanmayce.com/Downloads/index.html#Jesters[^]
I initiated a thread on a cool (COLD yes) overclock maniacs forum at:
http://www.overclockaholics.com/forums/showthread.php?t=5132[^]
'Monstrous Jesters' benchmark package short overview:
This is my latest 32bit/64bit (strstr-showdown included) CPU/RAM benchmark package (a NSIS installation).
File: Monstrous_Jesters.exe
Size: 153 MB (161,009,933 bytes)
Size unpacked: 500 MB
Size needed: 1200 MB
After installation 5 shortcuts (tests) are placed on Desktop/Programs.
All tests are written in C (sources included), and compiled with latest Intel 12.1 and Microsoft 16 optimizers.
The MEMMEM (strstr-showdown) test takes some 21minutes to complete on Core2Duo_E7500_2.93Ghz.
Of course in order to obtain decent results stop all the concurrent processes before running the test.
Also enable 100% computing power.
Well, there are some additional tests (Intel 12.1 and Microsoft 16 executables included):
- lzpre a LZ77 32bit/64bit [de]compressor, written by Matt Mahoney;
- Yappy a LZ 32bit/64bit [de]compressor, written by IronPeter;
- Knight tour benchmark, finds first 9,000,000 tours (at rate some 1 billion per minute jumps), in fact tests/stresses only CPU clock;
- Quicksort 32bit/64bit used to sort 200,000,000+ pointers (pointing to 7bytes chunks).
Also I would be glad for some feedback and results on your machines.
Enjoy!
Get down get down get down get it on show love and give it up
What are you waiting on?
|
|
|
|
 |
|
 |
Just noticed your comment in an older post:
"Quick note3: 'Trident' being 200MB/s faster than BNDM_64 for text and 700MB/s slower than BNDM_64 for DNA, ouch!"
Yes, pretty much that exact statement is in "Flexible Pattern Matching...", the Navarro text.
The statistical analysis there says that BNDM on average beats Horspool for small alphabets like DNA,
Horspool beats BNDM for larger alphabets like English -- i.e. where the probability of any given character occurring is less and less.
BNDM immediately benefits from larger word sizes, Horspool doesn't.
For longer patterns, there's another algorithm (Backward Oracle Matching) that beats Horspool, but has a higher setup cost.
The 64bit tests I'm running mostly confirm this. Linux 2.6.32, GCC 4.3.4, Intel Core2 12-CPU 3.33GHz, L1 cache 12MB.
"Dreams come true, not free" -- S.Sondheim
|
|
|
|
 |
|
 |
Mischa thanks for keeping the pace.
My last test (you referring to) shows that for 16/32 long patterns 'Trident' is (but slowing down with patterns getting longer) significantly faster than BNDM_64. However starting from 48- long patterns (due to increased number of repetitive chars/pairs) 'Trident' is inferior thus it should be silenced. For 64- byte long patterns BNDM_64 thrashes 'Trident'. That is why my eyes are on mixing the BNDM_64 and 'Trident'.
>... Backward Oracle Matching ...
I should fill another caldera of mine, the cost is the last thing I look for.
Just got emotional (again) and went to 'The Lounge'. Did you know that UNIX stands for "UNIversal eXecutive" - I like knowing such stuff.
http://www.codeproject.com/Lounge.aspx?msg=4179708#xx4179708xx[^]
Get down get down get down get it on show love and give it up
What are you waiting on?
|
|
|
|
 |
|
 |
Yep. But then I've been using Unix since 1977
"Dreams come true, not free" -- S.Sondheim
|
|
|
|
 |
|
 |
Just found an inspiring PDF article at:
http://www.stringology.org/event/2008/p14.html[^]
An excerpt:
We presented two efficient variants of the Backward Oracle Matching algorithm which
is considered one of the most effective algorithm for exact string matching. The first
variation, called Extended-BOM, introduces an efficient fast-loop over transitions of
the oracle by reading two consecutive characters for each iteration. The second varia-
tion, called Forward-BOM, extends the previous one by using a look-ahead character
at the beginning of transitions in order to obtain larger shift advancements.
Thanks for pointing out. Very good tests they conducted - it is quite obvious there is a lot of yummy food.
Get down get down get down get it on show love and give it up
What are you waiting on?
|
|
|
|
 |
|
 |
In following tests 'Tridentx64' ('Gulliver' reinforced by BNDM_64 order 4 presence check) failed miserably to stand against BNDM_64 for patterns 32+ bytes long.
Five stable facts:
- BNDM_64 much slower for DNA-type needles and DNA-type haystacks
- BNDM_64 much slower for English-type needles (32-- long) and English-type haystacks
- BNDM_64 much faster for English-type needles (32+ long) and English-type haystacks
- BNDM_64 much faster for English-type needles and DNA-type haystacks
- BNDM_64 much faster for DNA-type needles and English-type haystacks
In next two (DNA-type haystacks) tests 'Hasherezade' is faster than 'Tridentx64', both faster than BNDM_64.
Note: Still I am stunned badly from the awful 64bit 'Hasherezade' performance compared to 32bit 'Hasherezade'.
Haystack: hs_alt_HuRef_chr1.fa
Executable: strstr_SHORT-SHOWDOWN_Microsoft_v16_Ox_32bit.exe
Skip-Performance(bigger-the-better): 1266%, 17578894 skips/iterations
Found ('AGATTTTAAAGATTTT') 3 time(s), Railgun_Quadruplet_7Tridentx64 performance: 1309KB/clock
Skip-Performance(bigger-the-better): 1261%, 17648956 skips/iterations
Found ('TTGACATAGAATCTTA') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 1294KB/clock
Skip-Performance(bigger-the-better): 1268%, 17542938 skips/iterations
Found ('TGGAGGCTGAGAAATA') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 1221KB/clock
Skip-Performance(bigger-the-better): 2551%, 8724089 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATA') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2195KB/clock
Skip-Performance(bigger-the-better): 2438%, 9128017 skips/iterations
Found ('GAATCTTATGGAGGCTGAGAAATAATTTTTTT') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2031KB/clock
Skip-Performance(bigger-the-better): 3624%, 6142214 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCT') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2823KB/clock
Skip-Performance(bigger-the-better): 3264%, 6820145 skips/iterations
Found ('TAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAA') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2498KB/clock
Skip-Performance(bigger-the-better): 4386%, 5074980 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTT') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3019KB/clock
Skip-Performance(bigger-the-better): 4590%, 4849475 skips/iterations
Found ('TTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTTTCTA') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3150KB/clock
Railgun_Quadruplet_7Tridentx64 49 i.e. average performance: 3269KB/clock
Railgun_Quadruplet_7Tridentx64 49 total Skip-Performance/Iterations: 2634368/7091550000
Skip-Performance(bigger-the-better): 1449%, 15356686 skips/iterations
Found ('AGATTTTAAAGATTTT') 3 time(s), BNDM_64 performance: 1045KB/clock
Skip-Performance(bigger-the-better): 1396%, 15944910 skips/iterations
Found ('TTGACATAGAATCTTA') 1 time(s), BNDM_64 performance: 1045KB/clock
Skip-Performance(bigger-the-better): 1408%, 15804660 skips/iterations
Found ('TGGAGGCTGAGAAATA') 1 time(s), BNDM_64 performance: 997KB/clock
Skip-Performance(bigger-the-better): 2972%, 7488740 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATA') 1 time(s), BNDM_64 performance: 1811KB/clock
Skip-Performance(bigger-the-better): 2963%, 7512750 skips/iterations
Found ('GAATCTTATGGAGGCTGAGAAATAATTTTTTT') 1 time(s), BNDM_64 performance: 1739KB/clock
Skip-Performance(bigger-the-better): 4533%, 4909974 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCT') 1 time(s), BNDM_64 performance: 2470KB/clock
Skip-Performance(bigger-the-better): 4530%, 4913981 skips/iterations
Found ('TAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAA') 1 time(s), BNDM_64 performance: 2442KB/clock
Skip-Performance(bigger-the-better): 6121%, 3636339 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTT') 1 time(s), BNDM_64 performance: 2937KB/clock
Skip-Performance(bigger-the-better): 6120%, 3637209 skips/iterations
Found ('TTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTTTCTA') 1 time(s), BNDM_64 performance: 2977KB/clock
BNDM_64 49 i.e. average performance: 3502KB/clock
BNDM_64 49 total Skip-Performance/Iterations: 2806144/6595760528
Skip-Performance(bigger-the-better): 1242%, 17921894 skips/iterations
Found ('AGATTTTAAAGATTTT') 3 time(s), Railgun_Quadruplet_7Hasherezade performance: 1411KB/clock
Skip-Performance(bigger-the-better): 1083%, 20540215 skips/iterations
Found ('TTGACATAGAATCTTA') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 1187KB/clock
Skip-Performance(bigger-the-better): 1151%, 19328506 skips/iterations
Found ('TGGAGGCTGAGAAATA') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 1228KB/clock
Skip-Performance(bigger-the-better): 2619%, 8497158 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATA') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 2860KB/clock
Skip-Performance(bigger-the-better): 2654%, 8385171 skips/iterations
Found ('GAATCTTATGGAGGCTGAGAAATAATTTTTTT') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 2619KB/clock
Skip-Performance(bigger-the-better): 4119%, 5403967 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCT') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 3882KB/clock
Skip-Performance(bigger-the-better): 4124%, 5397642 skips/iterations
Found ('TAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAA') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 3684KB/clock
Skip-Performance(bigger-the-better): 5609%, 3968150 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTT') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 4025KB/clock
Skip-Performance(bigger-the-better): 5643%, 3944537 skips/iterations
Found ('TTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTTTCTA') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 4180KB/clock
Railgun_Quadruplet_7Hasherezade 49 i.e. average performance: 3376KB/clock
Railgun_Quadruplet_7Hasherezade 49 total Skip-Performance/Iterations: 2691888/7089590528
Haystack: hs_alt_HuRef_chr1.fa
Executable: strstr_SHORT-SHOWDOWN_Microsoft_v16_Ox_64bit.exe:
Skip-Performance(bigger-the-better): 1266%, 17578894 skips/iterations
Found ('AGATTTTAAAGATTTT') 3 time(s), Railgun_Quadruplet_7Tridentx64 performance: 1341KB/clock
Skip-Performance(bigger-the-better): 1261%, 17648956 skips/iterations
Found ('TTGACATAGAATCTTA') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 1509KB/clock
Skip-Performance(bigger-the-better): 1268%, 17542938 skips/iterations
Found ('TGGAGGCTGAGAAATA') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 1325KB/clock
Skip-Performance(bigger-the-better): 2551%, 8724089 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATA') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2557KB/clock
Skip-Performance(bigger-the-better): 2438%, 9128017 skips/iterations
Found ('GAATCTTATGGAGGCTGAGAAATAATTTTTTT') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2264KB/clock
Skip-Performance(bigger-the-better): 3624%, 6142214 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCT') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3196KB/clock
Skip-Performance(bigger-the-better): 3264%, 6820145 skips/iterations
Found ('TAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAA') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2787KB/clock
Skip-Performance(bigger-the-better): 4386%, 5074980 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTT') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3344KB/clock
Skip-Performance(bigger-the-better): 4590%, 4849475 skips/iterations
Found ('TTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTTTCTA') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3450KB/clock
Railgun_Quadruplet_7Tridentx64 49 i.e. average performance: 3263KB/clock
Railgun_Quadruplet_7Tridentx64 49 total Skip-Performance/Iterations: 2634368/7091550000
Skip-Performance(bigger-the-better): 1449%, 15356686 skips/iterations
Found ('AGATTTTAAAGATTTT') 3 time(s), BNDM_64 performance: 1175KB/clock
Skip-Performance(bigger-the-better): 1396%, 15944910 skips/iterations
Found ('TTGACATAGAATCTTA') 1 time(s), BNDM_64 performance: 1228KB/clock
Skip-Performance(bigger-the-better): 1408%, 15804660 skips/iterations
Found ('TGGAGGCTGAGAAATA') 1 time(s), BNDM_64 performance: 1156KB/clock
Skip-Performance(bigger-the-better): 2972%, 7488740 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATA') 1 time(s), BNDM_64 performance: 2110KB/clock
Skip-Performance(bigger-the-better): 2963%, 7512750 skips/iterations
Found ('GAATCTTATGGAGGCTGAGAAATAATTTTTTT') 1 time(s), BNDM_64 performance: 2031KB/clock
Skip-Performance(bigger-the-better): 4533%, 4909974 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCT') 1 time(s), BNDM_64 performance: 2860KB/clock
Skip-Performance(bigger-the-better): 4530%, 4913981 skips/iterations
Found ('TAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAA') 1 time(s), BNDM_64 performance: 2860KB/clock
Skip-Performance(bigger-the-better): 6121%, 3636339 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTT') 1 time(s), BNDM_64 performance: 3450KB/clock
Skip-Performance(bigger-the-better): 6120%, 3637209 skips/iterations
Found ('TTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTTTCTA') 1 time(s), BNDM_64 performance: 3450KB/clock
BNDM_64 49 i.e. average performance: 3736KB/clock
BNDM_64 49 total Skip-Performance/Iterations: 2806144/6595760528
Skip-Performance(bigger-the-better): 1242%, 17921894 skips/iterations
Found ('AGATTTTAAAGATTTT') 3 time(s), Railgun_Quadruplet_7Hasherezade performance: 1103KB/clock
Skip-Performance(bigger-the-better): 1083%, 20540215 skips/iterations
Found ('TTGACATAGAATCTTA') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 869KB/clock
Skip-Performance(bigger-the-better): 1151%, 19328506 skips/iterations
Found ('TGGAGGCTGAGAAATA') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 945KB/clock
Skip-Performance(bigger-the-better): 2619%, 8497158 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATA') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 2050KB/clock
Skip-Performance(bigger-the-better): 2654%, 8385171 skips/iterations
Found ('GAATCTTATGGAGGCTGAGAAATAATTTTTTT') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 1976KB/clock
Skip-Performance(bigger-the-better): 4119%, 5403967 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCT') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 2977KB/clock
Skip-Performance(bigger-the-better): 4124%, 5397642 skips/iterations
Found ('TAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAA') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 2937KB/clock
Skip-Performance(bigger-the-better): 5609%, 3968150 skips/iterations
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTT') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 3506KB/clock
Skip-Performance(bigger-the-better): 5643%, 3944537 skips/iterations
Found ('TTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTTTCTA') 1 time(s), Railgun_Quadruplet_7Hasherezade performance: 3563KB/clock
Railgun_Quadruplet_7Hasherezade 49 i.e. average performance: 2998KB/clock
Railgun_Quadruplet_7Hasherezade 49 total Skip-Performance/Iterations: 2691888/7089590528
In next (English-type haystack) test BNDM_64 dominates almost everywhere.
Haystack: OSHO.TXT
Executable: SHORT-SHOWDOWN_Intel_O3_64bit.exe
Found ('If you have read') 9 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2525KB/clock
Found ('you should have ') 181 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2624KB/clock
Found ('pretty good idea') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2845KB/clock
Found ('Osho Books on CD') 4 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2845KB/clock
Found ('use you will put') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2658KB/clock
Found ('to is up to you.') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2624KB/clock
Found ('the largest ever') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2494KB/clock
Found ('of understanding') 852 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2806KB/clock
Found ('and knowledge on') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2658KB/clock
Found ('more, a complete') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2806KB/clock
Found ('and a new way of') 5 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2694KB/clock
Found ('access to Osho's') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2767KB/clock
Found ('words, ideas and') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2658KB/clock
Found ('ideas and vision') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2624KB/clock
Found ('and to make them') 6 time(s), Railgun_Quadruplet_7Tridentx64 performance: 2377KB/clock
Found ('AGATTTTAAAGATTTT') 0 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3207KB/clock
Found ('TTGACATAGAATCTTA') 0 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3207KB/clock
Found ('TGGAGGCTGAGAAATA') 0 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3259KB/clock
Found ('fastest fox with biggest strides') 0 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3483KB/clock
Found ('you will put it to is up to you.') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3367KB/clock
Found ('on meditation and its techniques') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3367KB/clock
Found ('way of life. The purpose of this') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3367KB/clock
Found ('ROM is to provide access to Osho') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3424KB/clock
Found ('Osho's words, ideas and vision, ') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3424KB/clock
Found ('and to make them available to as') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3424KB/clock
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATA') 0 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3812KB/clock
Found ('GAATCTTATGGAGGCTGAGAAATAATTTTTTT') 0 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3812KB/clock
Found ('you have read through the preceding chapters you') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3544KB/clock
Found ('through the preceding chapters you should have a') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3424KB/clock
Found ('preceding chapters you should have a pretty good') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3544KB/clock
Found ('CD-ROM. What use you will put it to is up to you') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3544KB/clock
Found ('of understanding and knowledge on meditation and') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3483KB/clock
Found ('much more, a complete, world view of the New Man') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3544KB/clock
Found ('world view of the New Man and a new way of life.') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3544KB/clock
Found ('is to provide access to Osho's words, ideas and ') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3483KB/clock
Found ('provide access to Osho's words, ideas and vision') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3544KB/clock
Found ('access to Osho's words, ideas and vision, and to') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3544KB/clock
Found ('Osho's words, ideas and vision, and to make them') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3483KB/clock
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCT') 0 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3885KB/clock
Found ('TAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAA') 0 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3885KB/clock
Found ('the preceding chapters you should have a pretty good idea on how') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3544KB/clock
Found ('Books on CD-ROM. What use you will put it to is up to you. It is') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3608KB/clock
Found ('What use you will put it to is up to you. It is the largest ever') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3544KB/clock
Found ('repository of understanding and knowledge on meditation and its ') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3544KB/clock
Found ('of understanding and knowledge on meditation and its techniques.') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3608KB/clock
Found ('to provide access to Osho's words, ideas and vision, and to make') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3544KB/clock
Found ('to Osho's words, ideas and vision, and to make them available to') 1 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3608KB/clock
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTT') 0 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3961KB/clock
Found ('TTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTTTCTA') 0 time(s), Railgun_Quadruplet_7Tridentx64 performance: 3961KB/clock
Railgun_Quadruplet_7Tridentx64 49 i.e. average performance: 3241KB/clock
Railgun_Quadruplet_7Tridentx64 49 total Skip-Performance/Iterations: 2708288/6416464496
Found ('If you have read') 9 time(s), BNDM_64 performance: 1924KB/clock
Found ('you should have ') 181 time(s), BNDM_64 performance: 1980KB/clock
Found ('pretty good idea') 1 time(s), BNDM_64 performance: 2245KB/clock
Found ('Osho Books on CD') 4 time(s), BNDM_64 performance: 2149KB/clock
Found ('use you will put') 1 time(s), BNDM_64 performance: 1980KB/clock
Found ('to is up to you.') 1 time(s), BNDM_64 performance: 1924KB/clock
Found ('the largest ever') 1 time(s), BNDM_64 performance: 1924KB/clock
Found ('of understanding') 852 time(s), BNDM_64 performance: 2349KB/clock
Found ('and knowledge on') 1 time(s), BNDM_64 performance: 2020KB/clock
Found ('more, a complete') 1 time(s), BNDM_64 performance: 2126KB/clock
Found ('and a new way of') 5 time(s), BNDM_64 performance: 2000KB/clock
Found ('access to Osho's') 1 time(s), BNDM_64 performance: 2083KB/clock
Found ('words, ideas and') 1 time(s), BNDM_64 performance: 2104KB/clock
Found ('ideas and vision') 1 time(s), BNDM_64 performance: 2000KB/clock
Found ('and to make them') 6 time(s), BNDM_64 performance: 1804KB/clock
Found ('AGATTTTAAAGATTTT') 0 time(s), BNDM_64 performance: 4592KB/clock
Found ('TTGACATAGAATCTTA') 0 time(s), BNDM_64 performance: 4592KB/clock
Found ('TGGAGGCTGAGAAATA') 0 time(s), BNDM_64 performance: 4699KB/clock
Found ('fastest fox with biggest strides') 0 time(s), BNDM_64 performance: 3741KB/clock
Found ('you will put it to is up to you.') 1 time(s), BNDM_64 performance: 3108KB/clock
Found ('on meditation and its techniques') 1 time(s), BNDM_64 performance: 3424KB/clock
Found ('way of life. The purpose of this') 1 time(s), BNDM_64 performance: 3483KB/clock
Found ('ROM is to provide access to Osho') 1 time(s), BNDM_64 performance: 3424KB/clock
Found ('Osho's words, ideas and vision, ') 1 time(s), BNDM_64 performance: 3483KB/clock
Found ('and to make them available to as') 1 time(s), BNDM_64 performance: 3367KB/clock
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATA') 0 time(s), BNDM_64 performance: 5051KB/clock
Found ('GAATCTTATGGAGGCTGAGAAATAATTTTTTT') 0 time(s), BNDM_64 performance: 5051KB/clock
Found ('you have read through the preceding chapters you') 1 time(s), BNDM_64 performance: 3885KB/clock
Found ('through the preceding chapters you should have a') 1 time(s), BNDM_64 performance: 3885KB/clock
Found ('preceding chapters you should have a pretty good') 1 time(s), BNDM_64 performance: 4123KB/clock
Found ('CD-ROM. What use you will put it to is up to you') 1 time(s), BNDM_64 performance: 3885KB/clock
Found ('of understanding and knowledge on meditation and') 1 time(s), BNDM_64 performance: 4123KB/clock
Found ('much more, a complete, world view of the New Man') 1 time(s), BNDM_64 performance: 4041KB/clock
Found ('world view of the New Man and a new way of life.') 1 time(s), BNDM_64 performance: 3961KB/clock
Found ('is to provide access to Osho's words, ideas and ') 1 time(s), BNDM_64 performance: 4123KB/clock
Found ('provide access to Osho's words, ideas and vision') 1 time(s), BNDM_64 performance: 4041KB/clock
Found ('access to Osho's words, ideas and vision, and to') 1 time(s), BNDM_64 performance: 4123KB/clock
Found ('Osho's words, ideas and vision, and to make them') 1 time(s), BNDM_64 performance: 3961KB/clock
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCT') 0 time(s), BNDM_64 performance: 4699KB/clock
Found ('TAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAA') 0 time(s), BNDM_64 performance: 4699KB/clock
Found ('the preceding chapters you should have a pretty good idea on how') 1 time(s), BNDM_64 performance: 4209KB/clock
Found ('Books on CD-ROM. What use you will put it to is up to you. It is') 1 time(s), BNDM_64 performance: 4209KB/clock
Found ('What use you will put it to is up to you. It is the largest ever') 1 time(s), BNDM_64 performance: 3961KB/clock
Found ('repository of understanding and knowledge on meditation and its ') 1 time(s), BNDM_64 performance: 4299KB/clock
Found ('of understanding and knowledge on meditation and its techniques.') 1 time(s), BNDM_64 performance: 4299KB/clock
Found ('to provide access to Osho's words, ideas and vision, and to make') 1 time(s), BNDM_64 performance: 4299KB/clock
Found ('to Osho's words, ideas and vision, and to make them available to') 1 time(s), BNDM_64 performance: 4299KB/clock
Found ('AGATTTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTT') 0 time(s), BNDM_64 performance: 4810KB/clock
Found ('TTTAAAGATTTTCTTTTTTTTTGACATAGAATCTTATGGAGGCTGAGAAATAATTTTTTTTCTA') 0 time(s), BNDM_64 performance: 4810KB/clock
BNDM_64 49 i.e. average performance: 3141KB/clock
BNDM_64 49 total Skip-Performance/Iterations: 2779920/6213485968
Despite the weak segments in 'Tridentx64' I intend not to abandon it, it is still my favorite gun due to its relatively stable skip-performance - yet standing alone it is an easy prey i.e. it ought to be put in some mix.
Bottom-line:
BNDM_64: a piece-of-beauty. It really shines when the needle differs A LOT from haystack's straws.
Get down get down get down get it on show love and give it up
What are you waiting on?
|
|
|
|
 |
|
|
 |
|
 |
Last night (2012 Feb 25) achieved 13%-20% boost of my strstr-like (i.e. short strings/patterns cases) function compared to GNU's Berg's strstr function - both compiled as 64bit code using Microsoft 16 and Intel 12.1 compilers. For full benchmark see the commented lines further below. After some ups-and-downs experienced in Windows 7 64bit with Intel 12.1 64bit and Microsoft 16 64bit C compilers I revised Railgun in order to fit it better in the new environment which resulted in appearance of Railgun_Doublet. The function is tiny: with 00cc5-00c71+1+1 = 86 bytes main-loop.
GNU Berg's performance (compiled with Microsoft 2010 64bit compiler): 376KB/clock+400KB/clock+564KB/clock+346KB/clock+540KB/clock+395KB/clock+535KB/clock+401KB/clock+542KB/clock+455KB/clock+510KB/clock+468KB/clock+541KB/clock+469KB/clock+557KB/clock+482KB/clock=7581
GNU Berg's performance (compiled with Intel C++ 64 Compiler XE 12.1): 296KB/clock+320KB/clock+421KB/clock+276KB/clock+417KB/clock+323KB/clock+415KB/clock+326KB/clock+415KB/clock+367KB/clock+405KB/clock+378KB/clock+415KB/clock+378KB/clock+418KB/clock+388KB/clock=5958
Railgun_Doublet performance (compiled with Microsoft 2010 64bit compiler): 421KB/clock+476KB/clock+551KB/clock+393KB/clock+550KB/clock+534KB/clock+553KB/clock+550KB/clock+559KB/clock+557KB/clock+553KB/clock+562KB/clock+568KB/clock+573KB/clock+587KB/clock+594KB/clock=8581
Railgun_Doublet performance (compiled with Intel C++ 64 Compiler XE 12.1): 348KB/clock+397KB/clock+464KB/clock+328KB/clock+463KB/clock+452KB/clock+465KB/clock+463KB/clock+469KB/clock+468KB/clock+464KB/clock+470KB/clock+477KB/clock+479KB/clock+490KB/clock+494KB/clock=7191
BNDM_32 performance (compiled with Microsoft 2010 64bit compiler): 267KB/clock+290KB/clock+462KB/clock+255KB/clock+390KB/clock+379KB/clock+451KB/clock+395KB/clock+400KB/clock+433KB/clock+419KB/clock+420KB/clock+436KB/clock+447KB/clock+435KB/clock+441KB/clock=6320
BNDM_32 performance (compiled with Intel C++ 64 Compiler XE 12.1): 241KB/clock+262KB/clock+409KB/clock+234KB/clock+352KB/clock+343KB/clock+402KB/clock+359KB/clock+367KB/clock+392KB/clock+383KB/clock+384KB/clock+398KB/clock+407KB/clock+400KB/clock+405KB/clock=5738
Summary for all 16 patterns:
GNU Berg's performance: 7581 Microsoft / 5958 Intel
Railgun_Doublet performance: 8581 Microsoft / 7191 Intel
BNDM_32 performance: 6320 Microsoft / 5738 Intel
Using Microsoft:
Railgun_Doublet is (8581-7581)/7581*100% = 13% faster than GNU Berg's
Railgun_Doublet is (8581-6320)/6320*100% = 35% faster than BNDM_32
Using Intel:
Railgun_Doublet is (7191-5958)/5958*100% = 20% faster than GNU Berg's
Railgun_Doublet is (7191-5738)/5738*100% = 25% faster than BNDM_32
For full benchmark dumps: Railgun homepage.
// Notes on 80x86 and x64, 2012-Feb-25:
// Three compilers were used (first two on Windows 7 64bit, the third on Windows XP 32bit):
// Intel(R) C++ 64 Compiler XE for applications running on Intel(R) 64, Version 12.1.1.258 Build 20111011
// Microsoft (R) C/C++ Optimizing Compiler Version 16.00.30319.01 for x64
// Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
// I have been using x64 for more than 12 hours and quickly the picture has become clear: code written for 32bit must be replaced with dedicated 64bit counterpart, relying on former only is a gambling venture.
// For example Railgun_Doublet dominates when compiled as 64bit (both with Intel XE 2011 12.1 and Microsoft 2010 16.00.30319.01 for x64), but for 32bit it is inferior compared to Railgun_Quadruplet_8Triplet.
// Summary for strstr-like (i.e. memmem for short strings/patterns) usage:
// - for 32bit use Railgun_Quadruplet_8Triplet
// - for 64bit use Railgun_Doublet
// My interest has been shifted from strstr toward memmem, Railgun_Doublet will fill the gap (short strings/patterns cases) in Railgun_r8_Mimino_x64 whereas 'Trident2'+'Hasherezade' will deal with memmem part, 'Hasherezade' should be surely tuned for 64bit.
Get down get down get down get it on show love and give it up
What are you waiting on?
|
|
|
|
 |
|
 |
Just checking: "Railgun_Doublet" is the special case for cbPattern == 2? Or something else using a two-byte key?
"Dreams come true, not free" -- S.Sondheim
|
|
|
|
 |
|
 |
The second.
It is a 64bit (only) short patterns/strings micro-memmem, by micro (mini was not precise) I mean the lowest range possible. I am confused enough of all ranges and searchers, so I wanted to see A LOT of benchmarks on Sandy/Ivy bridge machines running Windows 7 64bit - I asked for help on two overclock forums but sadly the overclockers there are not interested.
Recently I have read that Ivy bridge runs on 3500MHz nominal reaching without problem 6-7GHz - I wanted to see how CPU clock and RAM latency along with RAM bandwidth affect current 64bit functions. My desire is to tune 'Mimino' for fastest machines on the PC market as step one, but misery holds me back these days.
Get down get down get down get it on show love and give it up
What are you waiting on?
|
|
|
|
 |
|
 |
As I mentioned elsewhere, I've modified the winstr routines based on railgun's approach to short-pattern scans: trust the hardware to do unaligned loads faster than software can shift-and-add bytes into words. The 2- and 4-byte pattern cases amount to 6-instruction loops; the 3-byte pattern case is a 9-instruction loop. That's a definite 30-40% win. Thanks.
I went through the thrash tests again, to see if I could triage algorithm choice based on (cbPattern, cbTarget), which have ranges (2..256) and (8..65536).
For "nice" input, where pbPattern[0] is rare in pbTarget, SSE2 has a ridiculous advantage for cbPattern = 2..16; likewise BNDM for cbPattern = 17..66. For cbPattern=67+, Elsiane is best for a larger and larger wedge between them (cbTarget=1K for cbPattern=67; cbTarget=2K..32K for cbPattern=130; ...).
However, what I'm looking for is consistent behaviour in the face of weighted nasty input
For cbPattern = 2, the SSE2 routine take 35% the time of SSE4.2 strstr ... and everything else (railgun, winstr, BNDM) is at least 250% the time of strstr. Looks like that's a dead horse for intelligent algorithms versus hardware, until you get to much larger cbTargets.
For cbPattern = 3..9, nothing beats strstr. For cbTarget=32K+, Gulliver is wildly variable (80%-275% the time of strstr). That suggest that it EVENTUALLY overtakes strstr, but that's beyond my current test range.
For cbPattern = 10..15, Gulliver is best for cbTarget=32K+.
For cbPattern = 16..32 bytes, wins is best for tiny targets (2..128), BNDM for midsize(256..16384) and Gulliver for 32K+
For cbPattern > 32, wins is consistently best for (2..512), Elsiane for (1K..16K) and Gulliver for 32K+.
Hasherezade is always > Gulliver*2.
To me, that suggests that you might consider (higher) thresholds for switching to 2byte Horspool and Hash. Just some thoughts.
"Dreams come true, not free" -- S.Sondheim
|
|
|
|
 |
|
 |
Thanks for the tests, I have some high hopes for 'Trident2'('Gulliver' reinforced by BNDM_32), by sacrificing some Speed-Performance in order to achieve stronger Skip-Performance 'Trident2' is my current favorite. I wonder whether the current 3 chars unrolling will suffice or it should be done for depth 4?! For me 'Gulliver' is a beaten card, the same goes for Horspool&Sunday. My quick DNA test (a post further below) prompts for mix of 'Trident2' and 'Hasherezade'. As for strstr-like (not memmem) I think Railgun_Quadruplet_8Triplet has to be left as it is.
For last some days an idea of compiling-all-into-one is popping on-and-on, I see it as Railgun_r8_Mimino (after one of my favorite movies), however I do no not intend to flood (until it gets thoroughly tested) the already present hitters with a new one.
>To me, that suggests that you might consider (higher) thresholds for switching to 2byte Horspool and Hash.
Yes, it should be 32+KB in my view.
Get down get down get down get it on show love and give it up
What are you waiting on?
|
|
|
|
 |
|
 |
For pattern = "ABCDE", match against a target string that repeats "ABCD" 10000 times, with a final "ABCDE" to prove that matching happens.
Now try the same thing with pattern = "ABCDEF", and target string is "ABCDE" repeated 8000 times, with a final "ABCDEEF".
Edge cases are interesting ...
"Dreams come true, not free" -- S.Sondheim
|
|
|
|
 |
|
 |
Mischa I couldn't see your point.
The first test:
D:\Downloads\_2012-Feb-18\_KAZE_strstr_SHORT-SHOWDOWN__7Trident2_7Hasherezade_7Gulliver2>dir OSHO.TXT
02/18/2012 06:55 PM 40,005 osho.txt
1 File(s) 40,005 bytes
0 Dir(s) 3,317,592,064 bytes free
D:\Downloads\_2012-Feb-18\_KAZE_strstr_SHORT-SHOWDOWN__7Trident2_7Hasherezade_7Gulliver2>type OSHO.TXT
ABCD...ABCDABCDE
D:\Downloads\_2012-Feb-18\_KAZE_strstr_SHORT-SHOWDOWN__7Trident2_7Hasherezade_7Gulliver2>strstr_SHORT-SHOWDOWN_Microsoft_v16_Ox.exe
strstr_SHORT-SHOWDOWN, revision 8Triplet_7Trident_7Hasherezade_vs_7Gulliver2_vs_7Elsiane_vs_7sun_vs_7_vs_7sunhorse_vs_7deuce_vs_BMF, written by Kaze.
Full credits to: R.S. Boyer, J.S. Moore, R.N. Horspool, D.M. Sunday.
Usage: strstr_SHORT-SHOWDOWN.exe [anystring] [anystring]
Example1(keyboard test): strstr_SHORT-SHOWDOWN.exe
Example2(DUMBO 8x2 test): strstr_SHORT-SHOWDOWN.exe go
Example3(6x2 and 52 tests): strstr_SHORT-SHOWDOWN.exe go go
Input Pattern(up to 19+2000 chars): ABCDE
Doing Search for Pattern(5bytes) into String(40005bytes) as-one-line ...
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Railgun_Quadruplet_7sun_hits/Railgun_Quadruplet_7sun_clocks: 1/1
Railgun_Quadruplet_7sun performance: 39KB/clock
Doing Search for Pattern(5bytes) into String(40005bytes) as-one-line ...
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Railgun_Quadruplet_7_hits/Railgun_Quadruplet_7_clocks: 1/6
Railgun_Quadruplet_7 performance: 6KB/clock
Doing Search for Pattern(5bytes) into String(40005bytes) as-one-line ...
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 1/4
Railgun_Quadruplet_7Trident performance: 9KB/clock
Doing Search for Pattern(5bytes) into String(40005bytes) as-one-line ...
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
BNDM_32_hits/BNDM_32_clocks: 1/5
BNDM_32 performance: 7KB/clock
Doing Search for Pattern(5bytes) into String(40005bytes) as-one-line ...
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Railgun_Quadruplet_7sunhorse_hits/Railgun_Quadruplet_7sunhorse_clocks: 1/3
Railgun_Quadruplet_7sunhorse performance: 13KB/clock
Doing Search for Pattern(5bytes) into String(40005bytes) as-one-line ...
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Railgun_Quadruplet_7deuce_hits/Railgun_Quadruplet_7deuce_clocks: 1/4
Railgun_Quadruplet_7deuce performance: 9KB/clock
Doing Search for Pattern(5bytes) into String(40005bytes) as-one-line ...
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Railgun_Quadruplet_7Elsiane_hits/Railgun_Quadruplet_7Elsiane_clocks: 1/5
Railgun_Quadruplet_7Elsiane performance: 7KB/clock
Doing Search for Pattern(5bytes) into String(40005bytes) as-one-line ...
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 1/5
Railgun_Quadruplet_7Gulliver performance: 7KB/clock
Doing Search for Pattern(5bytes) into String(40005bytes) as-one-line ...
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Railgun_Quadruplet_7Hasherezade_hits/Railgun_Quadruplet_7Hasherezade_clocks: 1/4
Railgun_Quadruplet_7Hasherezade performance: 9KB/clock
Doing Search for Pattern(5bytes) into String(40005bytes) as-one-line ...
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Skip-Performance(bigger-the-better): 400%, 10001 skips/iterations
Boyer_Moore_Flensburg_hits/Boyer_Moore_Flensburg_clocks: 1/5
Boyer_Moore_Flensburg performance: 7KB/clock
Doing Search for Pattern(5bytes) into String(40005bytes) as-one-line ...
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Two-Way_hits/Two-Way_clocks: 1/4
Two-Way performance: 9KB/clock
D:\Downloads\_2012-Feb-18\_KAZE_strstr_SHORT-SHOWDOWN__7Trident2_7Hasherezade_7Gulliver2>
The other test:
D:\Downloads\_2012-Feb-18\_KAZE_strstr_SHORT-SHOWDOWN__7Trident2_7Hasherezade_7Gulliver2>dir OSHO.TXT
02/18/2012 06:32 PM 40,006 OSHO.TXT
1 File(s) 40,006 bytes
0 Dir(s) 3,317,620,736 bytes free
D:\Downloads\_2012-Feb-18\_KAZE_strstr_SHORT-SHOWDOWN__7Trident2_7Hasherezade_7Gulliver2>type OSHO.TXT
ABCDE...ABCDEABCDEF
D:\Downloads\_2012-Feb-18\_KAZE_strstr_SHORT-SHOWDOWN__7Trident2_7Hasherezade_7Gulliver2>strstr_SHORT-SHOWDOWN_Microsoft_v16_Ox.exe
strstr_SHORT-SHOWDOWN, revision 8Triplet_7Trident_7Hasherezade_vs_7Gulliver2_vs_7Elsiane_vs_7sun_vs_7_vs_7sunhorse_vs_7deuce_vs_BMF, written by Kaze.
Full credits to: R.S. Boyer, J.S. Moore, R.N. Horspool, D.M. Sunday.
Usage: strstr_SHORT-SHOWDOWN.exe [anystring] [anystring]
Example1(keyboard test): strstr_SHORT-SHOWDOWN.exe
Example2(DUMBO 8x2 test): strstr_SHORT-SHOWDOWN.exe go
Example3(6x2 and 52 tests): strstr_SHORT-SHOWDOWN.exe go go
Input Pattern(up to 19+2000 chars): ABCDEF
Doing Search for Pattern(6bytes) into String(40006bytes) as-one-line ...
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Railgun_Quadruplet_7sun_hits/Railgun_Quadruplet_7sun_clocks: 1/2
Railgun_Quadruplet_7sun performance: 19KB/clock
Doing Search for Pattern(6bytes) into String(40006bytes) as-one-line ...
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Railgun_Quadruplet_7_hits/Railgun_Quadruplet_7_clocks: 1/4
Railgun_Quadruplet_7 performance: 9KB/clock
Doing Search for Pattern(6bytes) into String(40006bytes) as-one-line ...
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 1/5
Railgun_Quadruplet_7Trident performance: 7KB/clock
Doing Search for Pattern(6bytes) into String(40006bytes) as-one-line ...
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
BNDM_32_hits/BNDM_32_clocks: 1/4
BNDM_32 performance: 9KB/clock
Doing Search for Pattern(6bytes) into String(40006bytes) as-one-line ...
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Railgun_Quadruplet_7sunhorse_hits/Railgun_Quadruplet_7sunhorse_clocks: 1/6
Railgun_Quadruplet_7sunhorse performance: 6KB/clock
Doing Search for Pattern(6bytes) into String(40006bytes) as-one-line ...
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Railgun_Quadruplet_7deuce_hits/Railgun_Quadruplet_7deuce_clocks: 1/4
Railgun_Quadruplet_7deuce performance: 9KB/clock
Doing Search for Pattern(6bytes) into String(40006bytes) as-one-line ...
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Railgun_Quadruplet_7Elsiane_hits/Railgun_Quadruplet_7Elsiane_clocks: 1/3
Railgun_Quadruplet_7Elsiane performance: 13KB/clock
Doing Search for Pattern(6bytes) into String(40006bytes) as-one-line ...
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 1/4
Railgun_Quadruplet_7Gulliver performance: 9KB/clock
Doing Search for Pattern(6bytes) into String(40006bytes) as-one-line ...
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Railgun_Quadruplet_7Hasherezade_hits/Railgun_Quadruplet_7Hasherezade_clocks: 1/3
Railgun_Quadruplet_7Hasherezade performance: 13KB/clock
Doing Search for Pattern(6bytes) into String(40006bytes) as-one-line ...
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Skip-Performance(bigger-the-better): 500%, 8001 skips/iterations
Boyer_Moore_Flensburg_hits/Boyer_Moore_Flensburg_clocks: 1/5
Boyer_Moore_Flensburg performance: 7KB/clock
Doing Search for Pattern(6bytes) into String(40006bytes) as-one-line ...
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Skip-Performance(bigger-the-better): 100%, 40001 skips/iterations
Two-Way_hits/Two-Way_clocks: 1/4
Two-Way performance: 9KB/clock
D:\Downloads\_2012-Feb-18\_KAZE_strstr_SHORT-SHOWDOWN__7Trident2_7Hasherezade_7Gulliver2>
I fixed a time bug (I knew about it but didn't bother until now because of OSHO.TXT never being traversed for under 1 clock):
(long)(TotalRoughSearchTime)>>4
should be
1+((long)(TotalRoughSearchTime)>>4)
in order to avoid division by zero for small strings (under 1 clock).
Get down get down get down get it on show love and give it up
What are you waiting on?
|
|
|
|
 |
|
 |
(sigh) nevermind, the apparent sharp drop in performance was dute to a bug in my code that manufactured the target.
"Dreams come true, not free" -- S.Sondheim
|
|
|
|
 |
|
 |
It might be worth starting a new thread per version.
"Windows-Linux trading places" isn't exactly descriptive any more
For the realworld tests, 7H is always better than 7G, though not by a big fraction.
For the thrash tests, the setup overhead seems to just kill it.
My realword tests are strings of 2..140 bytes against each line of a log file
with lines of 150..1350 bytes.
Just a reminder that I do not run tests against osho.txt the same way you do:
I refactor the railgun function to return on match, not just count hits.
Finding all strings that match in one pass is an unusual use case;
the only thing that comes to mind is when tokenizing a string based on a multibyte
separator. "strstr" and "memmem" don't work that way; hence my testing protocol.
So it looks like you're taking railgun in the direction of a search function
that has a 'compile' and an 'execute' part, and moving away from competing with "strstr". "strstr" is hard to compete with, because the interface does not LET you amortize compile time.
In future tests, I'll separate compile and execute times.
I've added another algorithm to the test set: BNDM ("Backward Nondeterministic DAWG Matching") or, as I like to think of it, "suffix shift-and". It tends to be faster than Horspool (any flavour) for pattern up to the bitwidth of "int", which suggests putting in as an intermediate case between the "<961byte" and the horspool/hasherezade code, for such patterns. As usual, please pardon my condensed coding style.
char *bndm(char *target, int tgtlen, char *pattern, int patlen)
{
uint8_t *tgt = (uint8_t*)target, *pat = (uint8_t*)pattern;
int i, j;
uint32_t mask, maskv[256] = {0};
for (i = 0; i < patlen; ++i)
maskv[pat[i]] |= 1 << (patlen - 1 - i);
for (i = 0; i < tgtlen - patlen; i += j) {
mask = maskv[tgt[patlen - 1 + i]];
for (j = patlen; mask;) {
if (!--j) return target + i;
mask = (mask << 1) & maskv[tgt[i + j - 1]];
}
}
return NULL;
}
I'm just messing with the 128-bit version using XMM registers. The search is faster, but the setup time is (sigh) too high -- from which you can divine that MY objective is faster algorithms that plug into generic API's. Naively, it has to initialize a 256*16 byte table.
"Dreams come true, not free" -- S.Sondheim
|
|
|
|
 |
|
 |
Wups! After stopping and thinking about it, realized there are a quite a few applications for enumerating all occurrences in a very big string ("grep -c" for one . So nevermind on that.
"Dreams come true, not free" -- S.Sondheim
|
|
|
|
 |
|
 |
>So it looks like you're taking railgun in the direction of a search function
that has a 'compile' and an 'execute' part, and moving away from competing with "strstr". "strstr" is hard to compete with, because the interface does not LET you amortize compile time.
Yes, I targeted a pure light-weight strstr, but my greediness took over and I started to target some memmem variant. Yes 'compile' and an 'execute' part: this is it, I see a lot of potential in Hasherezade (especially if coded well in 64bit, with a single register, mem fetching for the whole main loop). AFAIK Windows lacks memmem thus I wanted to have some mutant that would do the dirty work of memmem whereas strstr has superior performance - sadly I realized that putting them under one hood is not a good idea after all.
>In future tests, I'll separate compile and execute times.
Very good idea, in my view it makes the benchmark more versatile which in any rate is a very informative and useful feature.
>The search is faster, but the setup time is (sigh) too high --
No matter how long the reload/compile time lasts it is worth the speed achieved, please continue to target on long strings i.e. to do "long shots" - they will be useful for someone like me who needs a long-range sniper. Funny, if you think of hitting range in meters/bytes guns shooting on 1500m are simply general purpose ones but Railgun shoots on 200km(yes beyond the horizon) which equals 200,000bytes but I am much greedier I want to shoot at meteoroids - not as in case of OSHO.TXT 200,000,000bytes but 27,000,000,000bytes (my current text corpus as one file). We are not far away from PCs having 32GB physical RAM, it is silly to say unprepared "where is that long-range hitter".
Glad I am that you select different guns for different ranges, but here I fall behind: automata are terra incognita for me, I should read some books first. Thanks for the code. I would be very glad if you come up with some strstr/memmem show-down benchmark table.
Get down get down get down get it on show love and give it up
What are you waiting on?
|
|
|
|
 |
|
 |
Bewitching!
Mischa many thanks for the superb BNDM etude, I have never seen more beautiful code. I think it is the very base of any future High-Performance strstr/memmem functions.
char * BNDM_32(char * pbTarget, char * pbPattern, unsigned long cbTarget, unsigned long cbPattern)
{
uint8_t *tgt = (uint8_t*)pbTarget, *pat = (uint8_t*)pbPattern;
int i, j;
uint32_t mask, maskv[256] = {0};
if (cbPattern > cbTarget)
return(NULL);
for (i = 0; i < cbPattern; ++i)
maskv[pat[i]] |= 1 << (cbPattern - 1 - i);
for (i = 0; i <= cbTarget - cbPattern; i += j) {
mask = maskv[tgt[cbPattern - 1 + i]];
for (j = cbPattern; mask;) {
if (!--j) return pbTarget + i;
mask = (mask << 1) & maskv[tgt[i + j - 1]];
}
}
return NULL;
}
The following function was used to print all Shift-Tables further below:
char * BNDM_32_count_hits(char * pbTarget, char * pbPattern, unsigned long cbTarget, unsigned long cbPattern)
{
uint8_t *tgt = (uint8_t*)pbTarget, *pat = (uint8_t*)pbPattern;
int i, j;
uint32_t mask, maskv[256] = {0};
unsigned long AdvanceHopperGrass = 0;
if (cbPattern > cbTarget)
return(NULL);
for (i = 0; i < cbPattern; ++i) {
maskv[pat[i]] |= 1 << (cbPattern - 1 - i);
}
for (i = 0; i <= cbTarget - cbPattern; i += j) {
mask = maskv[tgt[cbPattern - 1 + i]];
for (j = cbPattern; mask;) {
if (!--j) {Railgunhits++; j++; mask = 0;} else mask = (mask << 1) & maskv[tgt[i + j - 1]];
}
AdvanceHopperGrass++;
}
GlobalSP += (int)((double)cbTarget/AdvanceHopperGrass*100);
GlobalI += AdvanceHopperGrass;
printf("Skip-Performance(bigger-the-better): %d%%, %d skips/iterations\n",(int)((double)cbTarget/AdvanceHopperGrass*100), AdvanceHopperGrass);
return NULL;
}
Examples for BNDM_32's 32bit=8x4bit (Most-Significant-First) shift-table:
Pattern: alfalfa
Doing Search for Pattern(7bytes) into String(206908949bytes) as-one-line ...
alf,alfa
00 a 0000,0000,0000,0000,0000,0000,0100,0000
01 l 0000,0000,0000,0000,0000,0000,0010,0000
02 f 0000,0000,0000,0000,0000,0000,0001,0000
03 a 0000,0000,0000,0000,0000,0000,0100,1000
04 l 0000,0000,0000,0000,0000,0000,0010,0100
05 f 0000,0000,0000,0000,0000,0000,0001,0010
06 a 0000,0000,0000,0000,0000,0000,0100,1001
BNDM_32: 1870KB/clock / 0691%, 29,938392 iterations
Railgun_Quadruplet_7sun: 1642KB/clock / 0748%, 27,654192 iterations
Railgun_Quadruplet_7: 1642KB/clock / 0662%, 31,226521 iterations
Railgun_Quadruplet_7sunhorse: 1202KB/clock / 0786%, 26,295205 iterations
Railgun_Quadruplet_7Elsiane: 1063KB/clock / 0871%, 23,744531 iterations
Railgun_Quadruplet_7Gulliver: 1496KB/clock / 0598%, 34,583650 iterations
Railgun_Quadruplet_7Hasherezade: 1507KB/clock / 0598%, 34,583650 iterations
Pattern: underrated
Doing Search for Pattern(10bytes) into String(206908949bytes) as-one-line ...
un,derr,ated
00 u 0000,0000,0000,0000,0000,0010,0000,0000
01 n 0000,0000,0000,0000,0000,0001,0000,0000
02 d 0000,0000,0000,0000,0000,0000,1000,0000
03 e 0000,0000,0000,0000,0000,0000,0100,0000
04 r 0000,0000,0000,0000,0000,0000,0010,0000
05 r 0000,0000,0000,0000,0000,0000,0011,0000
06 a 0000,0000,0000,0000,0000,0000,0000,1000
07 t 0000,0000,0000,0000,0000,0000,0000,0100
08 e 0000,0000,0000,0000,0000,0000,0100,0010
09 d 0000,0000,0000,0000,0000,0000,1000,0001
BNDM_32: 1287KB/clock / 0965%, 21,438744 iterations
Railgun_Quadruplet_7sun: 1942KB/clock / 0894%, 23,127481 iterations
Railgun_Quadruplet_7: 1942KB/clock / 0804%, 25,703793 iterations
Railgun_Quadruplet_7sunhorse: 1141KB/clock / 1025%, 20,167543 iterations
Railgun_Quadruplet_7Elsiane: 0768KB/clock / 1072%, 19,285870 iterations
Railgun_Quadruplet_7Gulliver: 1906KB/clock / 0885%, 23,374120 iterations
Railgun_Quadruplet_7Hasherezade: 1870KB/clock / 0885%, 23,374120 iterations
Pattern: bye-bye-bye-bye-bye-
Doing Search for Pattern(20bytes) into String(206908949bytes) as-one-line ...
bye-,bye-,bye-,bye-,bye-
00 b 0000,0000,0000,1000,0000,0000,0000,0000
01 y 0000,0000,0000,0100,0000,0000,0000,0000
02 e 0000,0000,0000,0010,0000,0000,0000,0000
03 - 0000,0000,0000,0001,0000,0000,0000,0000
04 b 0000,0000,0000,1000,1000,0000,0000,0000
05 y 0000,0000,0000,0100,0100,0000,0000,0000
06 e 0000,0000,0000,0010,0010,0000,0000,0000
07 - 0000,0000,0000,0001,0001,0000,0000,0000
08 b 0000,0000,0000,1000,1000,1000,0000,0000
09 y 0000,0000,0000,0100,0100,0100,0000,0000
10 e 0000,0000,0000,0010,0010,0010,0000,0000
11 - 0000,0000,0000,0001,0001,0001,0000,0000
12 b 0000,0000,0000,1000,1000,1000,1000,0000
13 y 0000,0000,0000,0100,0100,0100,0100,0000
14 e 0000,0000,0000,0010,0010,0010,0010,0000
15 - 0000,0000,0000,0001,0001,0001,0001,0000
16 b 0000,0000,0000,1000,1000,1000,1000,1000
17 y 0000,0000,0000,0100,0100,0100,0100,0100
18 e 0000,0000,0000,0010,0010,0010,0010,0010
19 - 0000,0000,0000,0001,0001,0001,0001,0001
BNDM_32: 3483KB/clock / 1988%, 10,402957 iterations
Railgun_Quadruplet_7sun: 3207KB/clock / 1891%, 10,940613 iterations
Railgun_Quadruplet_7: 3259KB/clock / 1806%, 11,450773 iterations
Railgun_Quadruplet_7sunhorse: 2557KB/clock / 2069%, 09,995656 iterations
Railgun_Quadruplet_7Elsiane: 2104KB/clock / 2149%, 09,627265 iterations
Railgun_Quadruplet_7Gulliver: 3259KB/clock / 1898%, 10,898305 iterations
Railgun_Quadruplet_7Hasherezade: 3157KB/clock / 1899%, 10,892762 iterations
Pattern: fastest fox with biggest strides
Doing Search for Pattern(32bytes) into String(206908949bytes) as-one-line ...
fast,est ,fox ,with, big,gest, str,ides
00 f 1000,0000,0000,0000,0000,0000,0000,0000
01 a 0100,0000,0000,0000,0000,0000,0000,0000
02 s 0010,0000,0000,0000,0000,0000,0000,0000
03 t 0001,0000,0000,0000,0000,0000,0000,0000
04 e 0000,1000,0000,0000,0000,0000,0000,0000
05 s 0010,0100,0000,0000,0000,0000,0000,0000
06 t 0001,0010,0000,0000,0000,0000,0000,0000
07 0000,0001,0000,0000,0000,0000,0000,0000
08 f 1000,0000,1000,0000,0000,0000,0000,0000
09 o 0000,0000,0100,0000,0000,0000,0000,0000
10 x 0000,0000,0010,0000,0000,0000,0000,0000
11 0000,0001,0001,0000,0000,0000,0000,0000
12 w 0000,0000,0000,1000,0000,0000,0000,0000
13 i 0000,0000,0000,0100,0000,0000,0000,0000
14 t 0001,0010,0000,0010,0000,0000,0000,0000
15 h 0000,0000,0000,0001,0000,0000,0000,0000
16 0000,0001,0001,0000,1000,0000,0000,0000
17 b 0000,0000,0000,0000,0100,0000,0000,0000
18 i 0000,0000,0000,0100,0010,0000,0000,0000
19 g 0000,0000,0000,0000,0001,0000,0000,0000
20 g 0000,0000,0000,0000,0001,1000,0000,0000
21 e 0000,1000,0000,0000,0000,0100,0000,0000
22 s 0010,0100,0000,0000,0000,0010,0000,0000
23 t 0001,0010,0000,0010,0000,0001,0000,0000
24 0000,0001,0001,0000,1000,0000,1000,0000
25 s 0010,0100,0000,0000,0000,0010,0100,0000
26 t 0001,0010,0000,0010,0000,0001,0010,0000
27 r 0000,0000,0000,0000,0000,0000,0001,0000
28 i 0000,0000,0000,0100,0010,0000,0000,1000
29 d 0000,0000,0000,0000,0000,0000,0000,0100
30 e 0000,1000,0000,0000,0000,0100,0000,0010
31 s 0010,0100,0000,0000,0000,0010,0100,0001
BNDM_32: 2886KB/clock / 3113%, 06,644708 iterations
Railgun_Quadruplet_7sun: 2694KB/clock / 1584%, 13,060463 iterations
Railgun_Quadruplet_7: 2767KB/clock / 1511%, 13,689243 iterations
Railgun_Quadruplet_7sunhorse: 1820KB/clock / 2138%, 09,677267 iterations
Railgun_Quadruplet_7Elsiane: 1566KB/clock / 2143%, 09,652548 iterations
Railgun_Quadruplet_7Gulliver: 3108KB/clock / 2924%, 07,074287 iterations
Railgun_Quadruplet_7Hasherezade: 2971KB/clock / 3041%, 06,801754 iterations
Single tests for patterns 4..32 bytes long:
Pattern: fast
Doing Search for Pattern(4bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7sun: 1057KB/clock / 0456%, 45,330622 iterations
Railgun_Quadruplet_7: 0980KB/clock / 0377%, 54,788054 iterations
BNDM_32: 0821KB/clock / 0383%, 53,950527 iterations
Railgun_Quadruplet_7sunhorse: 0647KB/clock / 0480%, 43,103056 iterations Best Skip-Performance
Railgun_Quadruplet_7Gulliver: 0783KB/clock / 0300%, 68,943184 iterations
Railgun_Quadruplet_7Hasherezade: 0711KB/clock / 0300%, 68,943184 iterations
Boyer_Moore_Flensburg: 0534KB/clock / 0377%, 54,788139 iterations
Pattern: faster
Doing Search for Pattern(6bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7sun: 1347KB/clock / 0591%, 34,996936 iterations
Railgun_Quadruplet_7: 1312KB/clock / 0514%, 40,194194 iterations
BNDM_32: 0852KB/clock / 0570%, 36,278659 iterations
Railgun_Quadruplet_7sunhorse: 0751KB/clock / 0656%, 31,504148 iterations Best Skip-Performance
Railgun_Quadruplet_7Gulliver: 1195KB/clock / 0498%, 41,544613 iterations
Railgun_Quadruplet_7Hasherezade: 1086KB/clock / 0498%, 41,544613 iterations
Boyer_Moore_Flensburg: 0726KB/clock / 0514%, 40,194282 iterations
Pattern: alfalfa
Doing Search for Pattern(7bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7sun: 1656KB/clock / 0748%, 27,654192 iterations
Railgun_Quadruplet_7: 1629KB/clock / 0662%, 31,226521 iterations
BNDM_32: 1870KB/clock / 0691%, 29,938392 iterations
Railgun_Quadruplet_7sunhorse: 1195KB/clock / 0786%, 26,295205 iterations Best Skip-Performance
Railgun_Quadruplet_7Gulliver: 1507KB/clock / 0598%, 34,583650 iterations
Railgun_Quadruplet_7Hasherezade: 1393KB/clock / 0598%, 34,583650 iterations
Boyer_Moore_Flensburg: 0971KB/clock / 0676%, 30,596633 iterations
Pattern: fastest
Doing Search for Pattern(7bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7sun: 1530KB/clock / 0687%, 30,084306 iterations
Railgun_Quadruplet_7: 1507KB/clock / 0599%, 34,540430 iterations
BNDM_32: 1092KB/clock / 0674%, 30,671169 iterations
Railgun_Quadruplet_7sunhorse: 0902KB/clock / 0761%, 27,188853 iterations Best Skip-Performance
Railgun_Quadruplet_7Gulliver: 1443KB/clock / 0595%, 34,744153 iterations
Railgun_Quadruplet_7Hasherezade: 1320KB/clock / 0595%, 34,744153 iterations
Boyer_Moore_Flensburg: 0852KB/clock / 0621%, 33,278240 iterations
Pattern: beautiful
Doing Search for Pattern(9bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7sun: 1853KB/clock / 0862%, 23,986874 iterations
Railgun_Quadruplet_7: 1888KB/clock / 0790%, 26,174714 iterations
BNDM_32: 1209KB/clock / 0867%, 23,849695 iterations
Railgun_Quadruplet_7sunhorse: 1030KB/clock / 0950%, 21,765408 iterations Best Skip-Performance
Railgun_Quadruplet_7Gulliver: 1820KB/clock / 0794%, 26,045196 iterations
Railgun_Quadruplet_7Hasherezade: 1683KB/clock / 0794%, 26,045196 iterations
Boyer_Moore_Flensburg: 1161KB/clock / 0790%, 26,174767 iterations
Pattern: fastest fox
Doing Search for Pattern(11bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7sun: 1697KB/clock / 0775%, 26,672940 iterations
Railgun_Quadruplet_7: 1656KB/clock / 0669%, 30,925578 iterations
BNDM_32: 1154KB/clock / 1038%, 19,926393 iterations Best Skip-Performance
Railgun_Quadruplet_7sunhorse: 0948KB/clock / 0912%, 22,663583 iterations
Railgun_Quadruplet_7Gulliver: 2083KB/clock / 0977%, 21,166516 iterations
Railgun_Quadruplet_7Hasherezade: 1629KB/clock / 0980%, 21,112673 iterations
Boyer_Moore_Flensburg: 1069KB/clock / 0669%, 30,925649 iterations
Pattern: contradictions
Doing Search for Pattern(14bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7sun: 2296KB/clock / 1131%, 18,283442 iterations
Railgun_Quadruplet_7: 2434KB/clock / 1095%, 18,882463 iterations
BNDM_32: 1616KB/clock / 1360%, 15,213357 iterations Best Skip-Performance
Railgun_Quadruplet_7sunhorse: 1365KB/clock / 1348%, 15,339839 iterations
Railgun_Quadruplet_7Gulliver: 2557KB/clock / 1279%, 16,176485 iterations
Railgun_Quadruplet_7Hasherezade: 2126KB/clock / 1286%, 16,084430 iterations
Boyer_Moore_Flensburg: 1485KB/clock / 1095%, 18,882511 iterations
Pattern: beautiful dress
Doing Search for Pattern(15bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7sun: 1980KB/clock / 0967%, 21,375549 iterations
Railgun_Quadruplet_7: 2020KB/clock / 0869%, 23,787030 iterations
BNDM_32: 1642KB/clock / 1427%, 14,498109 iterations Best Skip-Performance
Railgun_Quadruplet_7sunhorse: 1161KB/clock / 1177%, 17,568817 iterations
Railgun_Quadruplet_7Gulliver: 2590KB/clock / 1366%, 15,141370 iterations
Railgun_Quadruplet_7Hasherezade: 2172KB/clock / 1378%, 15,005082 iterations
Boyer_Moore_Flensburg: 1239KB/clock / 0897%, 23,059214 iterations
Pattern: unpredictable as
Doing Search for Pattern(16bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7sun: 1772KB/clock / 0827%, 25,018727 iterations
Railgun_Quadruplet_7: 1853KB/clock / 0780%, 26,517463 iterations
BNDM_32: 1727KB/clock / 1518%, 13,624633 iterations Best Skip-Performance
Railgun_Quadruplet_7sunhorse: 1063KB/clock / 1090%, 18,971562 iterations
Railgun_Quadruplet_7Gulliver: 2557KB/clock / 1430%, 14,460245 iterations
Railgun_Quadruplet_7Hasherezade: 2149KB/clock / 1462%, 14,151474 iterations
Boyer_Moore_Flensburg: 1098KB/clock / 0780%, 26,517544 iterations
Pattern: over and over again
Doing Search for Pattern(19bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7sun: 2196KB/clock / 1099%, 18,824169 iterations
Railgun_Quadruplet_7: 2322KB/clock / 1074%, 19,257093 iterations
BNDM_32: 1727KB/clock / 1825%, 11,331736 iterations Best Skip-Performance
Railgun_Quadruplet_7sunhorse: 1329KB/clock / 1438%, 14,384495 iterations
Railgun_Quadruplet_7Gulliver: 2730KB/clock / 1719%, 12,033217 iterations
Railgun_Quadruplet_7Hasherezade: 2377KB/clock / 1751%, 11,810639 iterations
Boyer_Moore_Flensburg: 1338KB/clock / 1094%, 18,904355 iterations
Pattern: unpredictable as weather
Doing Search for Pattern(24bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7sun: 2322KB/clock / 1267%, 16,329565 iterations
Railgun_Quadruplet_7: 2494KB/clock / 1243%, 16,644478 iterations
BNDM_32: 2172KB/clock / 2303%, 08,980439 iterations Best Skip-Performance
Railgun_Quadruplet_7sunhorse: 1443KB/clock / 1655%, 12,494528 iterations
Railgun_Quadruplet_7Gulliver: 2590KB/clock / 2068%, 10,005196 iterations
Railgun_Quadruplet_7Hasherezade: 2464KB/clock / 2216%, 09,336262 iterations
Boyer_Moore_Flensburg: 1519KB/clock / 1252%, 16,518824 iterations
Pattern: unpredictable as weather itself
Doing Search for Pattern(31bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7sun: 2494KB/clock / 1447%, 14,296411 iterations
Railgun_Quadruplet_7: 2624KB/clock / 1384%, 14,945484 iterations
BNDM_32: 2525KB/clock / 2998%, 06,899522 iterations Best Skip-Performance
Railgun_Quadruplet_7sunhorse: 1656KB/clock / 1951%, 10,603919 iterations
Railgun_Quadruplet_7Gulliver: 2886KB/clock / 2685%, 07,704847 iterations
Railgun_Quadruplet_7Hasherezade: 2730KB/clock / 2892%, 07,152639 iterations
Boyer_Moore_Flensburg: 1836KB/clock / 1384%, 14,945535 iterations
Pattern: fastest fox with biggest strides
Doing Search for Pattern(32bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7sun: 2624KB/clock / 1584%, 13,060463 iterations
Railgun_Quadruplet_7: 2730KB/clock / 1511%, 13,689243 iterations
BNDM_32: 2806KB/clock / 3113%, 06,644708 iterations Best Skip-Performance
Railgun_Quadruplet_7sunhorse: 1804KB/clock / 2138%, 09,677267 iterations
Railgun_Quadruplet_7Gulliver: 3108KB/clock / 2924%, 07,074287 iterations
Railgun_Quadruplet_7Hasherezade: 2971KB/clock / 3041%, 06,801754 iterations
Boyer_Moore_Flensburg: 1820KB/clock / 1554%, 13,307181 iterations
Note: BNDM_32 is sub-fantastic, it [will] fill the abyss between orders smoothly! Its main loop consists of only 038ab-03880+1+1=45bytes!
; 6259 :
; 6260 : i=0;
; 6261 : while (i <= cbTarget-cbPattern) {
03867 8b 9c 24 1c 04
00 00 mov ebx, DWORD PTR _pbTarget$[esp+1044]
0386e 33 c9 xor ecx, ecx
03870 2b fe sub edi, esi
03872 89 7c 24 10 mov DWORD PTR $T9905[esp+1048], edi
03876 8d 6c 33 ff lea ebp, DWORD PTR [ebx+esi-1]
0387a 8d 9b 00 00 00
00 npad 6
$LL5@BNDM_32:
; 6262 : mask = maskv[tgt[cbPattern - 1 + i]];
03880 0f b6 14 29 movzx edx, BYTE PTR [ecx+ebp]
03884 8b 44 94 14 mov eax, DWORD PTR _maskv$[esp+edx*4+1048]
; 6263 : j = cbPattern;
03888 8b d6 mov edx, esi
; 6264 : while (mask) {
0388a 85 c0 test eax, eax
0388c 74 17 je SHORT $LN2@BNDM_32
0388e 8b ff npad 2
$LL3@BNDM_32:
; 6265 : if (!--j) return pbTarget + i;
03890 4a dec edx
03891 74 35 je SHORT $LN15@BNDM_32
; 6266 : mask = (mask << 1) & maskv[tgt[i + j - 1]];
03893 8d 3c 0a lea edi, DWORD PTR [edx+ecx]
03896 0f b6 7c 1f ff movzx edi, BYTE PTR [edi+ebx-1]
0389b 8b 7c bc 14 mov edi, DWORD PTR _maskv$[esp+edi*4+1048]
0389f 03 c0 add eax, eax
038a1 23 c7 and eax, edi
038a3 75 eb jne SHORT $LL3@BNDM_32
$LN2@BNDM_32:
; 6267 : }
; 6268 : i= i + j;
038a5 03 ca add ecx, edx
038a7 3b 4c 24 10 cmp ecx, DWORD PTR $T9905[esp+1048]
038ab 76 d3 jbe SHORT $LL5@BNDM_32
Test 6x2, average:
Railgun_Quadruplet_7sun: 2063KB/clock / Iterations: 5,572,202,064
Railgun_Quadruplet_7: 2000KB/clock / Iterations: 6,454,416,320
Railgun_Quadruplet_7Gulliver: 1819KB/clock / Iterations: 6,930,599,408
BNDM_32: 1543KB/clock / Iterations: 5,868,033,248
Railgun_Quadruplet_7sunhorse: 1244KB/clock / Iterations: 5,145,288,080
Boyer_Moore_Flensburg: 1208KB/clock / Iterations: 6,428,106,496
Okay the next log is from DUMBO 8x2 (returning the first hit offset) test (Dataset: 2,459,508 lines; File: OSHO.TXT 206,908,949 bytes; Shortest/Longest line: 0/161 chars):
Searching for Pattern('an',2bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 1212509/750
strstr_Microsoft performance: 180KB/clock
StrnglenTRAVERSED: 138478024 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 1212509/507
strstr_GNU_C_Library performance: 266KB/clock
StrnglenTRAVERSED: 138478024 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 1212509/452
Railgun_Quadruplet_8Short performance: 299KB/clock
StrnglenTRAVERSED: 138478024 bytes
BNDM_32_hits/BNDM_32_clocks: 1212509/636
BNDM_32 performance: 212KB/clock
StrnglenTRAVERSED: 138478024 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 1212509/543
Railgun_Quadruplet_7Gulliver performance: 249KB/clock
StrnglenTRAVERSED: 138478024 bytes
Searching for Pattern('to',2bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 780175/852
strstr_Microsoft performance: 188KB/clock
StrnglenTRAVERSED: 164505415 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 780175/564
strstr_GNU_C_Library performance: 284KB/clock
StrnglenTRAVERSED: 164505415 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 780175/485
Railgun_Quadruplet_8Short performance: 331KB/clock
StrnglenTRAVERSED: 164505415 bytes
BNDM_32_hits/BNDM_32_clocks: 780175/697
BNDM_32 performance: 230KB/clock
StrnglenTRAVERSED: 164505415 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 780175/579
Railgun_Quadruplet_7Gulliver performance: 277KB/clock
StrnglenTRAVERSED: 164505415 bytes
Searching for Pattern('TDK',3bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 0/864
strstr_Microsoft performance: 231KB/clock
StrnglenTRAVERSED: 204449441 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 0/514
strstr_GNU_C_Library performance: 388KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 0/520
Railgun_Quadruplet_8Short performance: 383KB/clock
StrnglenTRAVERSED: 204449441 bytes
BNDM_32_hits/BNDM_32_clocks: 0/543
BNDM_32 performance: 367KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 0/614
Railgun_Quadruplet_7Gulliver performance: 325KB/clock
StrnglenTRAVERSED: 204449441 bytes
Searching for Pattern('the',3bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 1192002/782
strstr_Microsoft performance: 169KB/clock
StrnglenTRAVERSED: 135882884 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 1192002/540
strstr_GNU_C_Library performance: 245KB/clock
StrnglenTRAVERSED: 135882884 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 1192002/507
Railgun_Quadruplet_8Short performance: 261KB/clock
StrnglenTRAVERSED: 135882884 bytes
BNDM_32_hits/BNDM_32_clocks: 1192002/648
BNDM_32 performance: 204KB/clock
StrnglenTRAVERSED: 135882884 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 1192002/604
Railgun_Quadruplet_7Gulliver performance: 219KB/clock
StrnglenTRAVERSED: 135882884 bytes
Searching for Pattern('fast',4bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 5384/882
strstr_Microsoft performance: 226KB/clock
StrnglenTRAVERSED: 204186782 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 5384/533
strstr_GNU_C_Library performance: 374KB/clock
StrnglenTRAVERSED: 204186782 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 5384/500
Railgun_Quadruplet_8Short performance: 398KB/clock
StrnglenTRAVERSED: 204186782 bytes
BNDM_32_hits/BNDM_32_clocks: 5384/641
BNDM_32 performance: 311KB/clock
StrnglenTRAVERSED: 204186782 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 5384/690
Railgun_Quadruplet_7Gulliver performance: 288KB/clock
StrnglenTRAVERSED: 204186782 bytes
Searching for Pattern('easy',4bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 4825/1066
strstr_Microsoft performance: 187KB/clock
StrnglenTRAVERSED: 204202166 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 4825/704
strstr_GNU_C_Library performance: 283KB/clock
StrnglenTRAVERSED: 204202166 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 4825/663
Railgun_Quadruplet_8Short performance: 300KB/clock
StrnglenTRAVERSED: 204202166 bytes
BNDM_32_hits/BNDM_32_clocks: 4825/661
BNDM_32 performance: 301KB/clock
StrnglenTRAVERSED: 204202166 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 4825/690
Railgun_Quadruplet_7Gulliver performance: 289KB/clock
StrnglenTRAVERSED: 204202166 bytes
Searching for Pattern('grmbl',5bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 0/888
strstr_Microsoft performance: 224KB/clock
StrnglenTRAVERSED: 204449441 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 0/538
strstr_GNU_C_Library performance: 371KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 0/502
Railgun_Quadruplet_8Short performance: 397KB/clock
StrnglenTRAVERSED: 204449441 bytes
BNDM_32_hits/BNDM_32_clocks: 0/560
BNDM_32 performance: 356KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 0/692
Railgun_Quadruplet_7Gulliver performance: 288KB/clock
StrnglenTRAVERSED: 204449441 bytes
Searching for Pattern('email',5bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 1/1058
strstr_Microsoft performance: 188KB/clock
StrnglenTRAVERSED: 204449414 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 1/693
strstr_GNU_C_Library performance: 288KB/clock
StrnglenTRAVERSED: 204449414 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 1/660
Railgun_Quadruplet_8Short performance: 302KB/clock
StrnglenTRAVERSED: 204449414 bytes
BNDM_32_hits/BNDM_32_clocks: 1/635
BNDM_32 performance: 314KB/clock
StrnglenTRAVERSED: 204449414 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 1/690
Railgun_Quadruplet_7Gulliver performance: 289KB/clock
StrnglenTRAVERSED: 204449414 bytes
Searching for Pattern('pasting',7bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 2/882
strstr_Microsoft performance: 226KB/clock
StrnglenTRAVERSED: 204449363 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 2/532
strstr_GNU_C_Library performance: 375KB/clock
StrnglenTRAVERSED: 204449363 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 2/495
Railgun_Quadruplet_8Short performance: 403KB/clock
StrnglenTRAVERSED: 204449363 bytes
BNDM_32_hits/BNDM_32_clocks: 2/623
BNDM_32 performance: 320KB/clock
StrnglenTRAVERSED: 204449363 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 2/692
Railgun_Quadruplet_7Gulliver performance: 288KB/clock
StrnglenTRAVERSED: 204449363 bytes
Searching for Pattern('amazing',7bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 319/982
strstr_Microsoft performance: 203KB/clock
StrnglenTRAVERSED: 204432134 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 319/620
strstr_GNU_C_Library performance: 322KB/clock
StrnglenTRAVERSED: 204432134 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 319/572
Railgun_Quadruplet_8Short performance: 349KB/clock
StrnglenTRAVERSED: 204432134 bytes
BNDM_32_hits/BNDM_32_clocks: 319/579
BNDM_32 performance: 344KB/clock
StrnglenTRAVERSED: 204432134 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 319/692
Railgun_Quadruplet_7Gulliver performance: 288KB/clock
StrnglenTRAVERSED: 204432134 bytes
Searching for Pattern('underdog',8bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 4/917
strstr_Microsoft performance: 217KB/clock
StrnglenTRAVERSED: 204449185 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 4/560
strstr_GNU_C_Library performance: 356KB/clock
StrnglenTRAVERSED: 204449185 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 4/513
Railgun_Quadruplet_8Short performance: 389KB/clock
StrnglenTRAVERSED: 204449185 bytes
BNDM_32_hits/BNDM_32_clocks: 4/595
BNDM_32 performance: 335KB/clock
StrnglenTRAVERSED: 204449185 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 4/691
Railgun_Quadruplet_7Gulliver performance: 288KB/clock
StrnglenTRAVERSED: 204449185 bytes
Searching for Pattern('superdog',8bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 0/961
strstr_Microsoft performance: 207KB/clock
StrnglenTRAVERSED: 204449441 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 0/604
strstr_GNU_C_Library performance: 330KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 0/558
Railgun_Quadruplet_8Short performance: 357KB/clock
StrnglenTRAVERSED: 204449441 bytes
BNDM_32_hits/BNDM_32_clocks: 0/594
BNDM_32 performance: 336KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 0/692
Railgun_Quadruplet_7Gulliver performance: 288KB/clock
StrnglenTRAVERSED: 204449441 bytes
Searching for Pattern('participants',12bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 141/883
strstr_Microsoft performance: 226KB/clock
StrnglenTRAVERSED: 204441500 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 141/533
strstr_GNU_C_Library performance: 374KB/clock
StrnglenTRAVERSED: 204441500 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 141/484
Railgun_Quadruplet_8Short performance: 412KB/clock
StrnglenTRAVERSED: 204441500 bytes
BNDM_32_hits/BNDM_32_clocks: 141/573
BNDM_32 performance: 348KB/clock
StrnglenTRAVERSED: 204441500 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 141/691
Railgun_Quadruplet_7Gulliver performance: 288KB/clock
StrnglenTRAVERSED: 204441500 bytes
Searching for Pattern('skillessness',12bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 0/961
strstr_Microsoft performance: 207KB/clock
StrnglenTRAVERSED: 204449441 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 0/604
strstr_GNU_C_Library performance: 330KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 0/546
Railgun_Quadruplet_8Short performance: 365KB/clock
StrnglenTRAVERSED: 204449441 bytes
BNDM_32_hits/BNDM_32_clocks: 0/557
BNDM_32 performance: 358KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 0/692
Railgun_Quadruplet_7Gulliver performance: 288KB/clock
StrnglenTRAVERSED: 204449441 bytes
Searching for Pattern('I should have known',19bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 1/871
strstr_Microsoft performance: 229KB/clock
StrnglenTRAVERSED: 204449346 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 1/519
strstr_GNU_C_Library performance: 384KB/clock
StrnglenTRAVERSED: 204449346 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 1/456
Railgun_Quadruplet_8Short performance: 437KB/clock
StrnglenTRAVERSED: 204449346 bytes
BNDM_32_hits/BNDM_32_clocks: 1/569
BNDM_32 performance: 350KB/clock
StrnglenTRAVERSED: 204449346 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 1/690
Railgun_Quadruplet_7Gulliver performance: 289KB/clock
StrnglenTRAVERSED: 204449346 bytes
Searching for Pattern('human consciousness',19bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 514/948
strstr_Microsoft performance: 210KB/clock
StrnglenTRAVERSED: 204422699 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 514/590
strstr_GNU_C_Library performance: 338KB/clock
StrnglenTRAVERSED: 204422699 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 514/510
Railgun_Quadruplet_8Short performance: 391KB/clock
StrnglenTRAVERSED: 204422699 bytes
BNDM_32_hits/BNDM_32_clocks: 514/560
BNDM_32 performance: 356KB/clock
StrnglenTRAVERSED: 204422699 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 514/691
Railgun_Quadruplet_7Gulliver performance: 288KB/clock
StrnglenTRAVERSED: 204422699 bytes
Note1: strstr_GNU_C_Library is Berg's function.
Note2: Railgun_Quadruplet_8Short lacks 'if (cbTarget<961)' condition i.e. overhead is gone i.e. Quadruplet works for all lengths.
Note3: Railgun_Quadruplet_7Gulliver is just like Railgun_Quadruplet_8Short plus the overhead.
Main conclusion: BNDM_32 performs very-very well even for short patterns/strings, here 2..19/0..161 chars.
Get down get down get down get it on show love and give it up
What are you waiting on?
modified 9 Feb '12.
|
|
|
|
 |
|
 |
Mischa, BNDM reinforced (regarding Skip-Performance) 'Gulliver', this tweak is called 'Trident' (for attempting to "stick" a triad (Order 3), all pairs (Order 2) already given by 'Gulliver').
The beautiful BNDM has one weakness (a matter of calibrating), numberly:
Here 'ast'/'st'/'t' respectively Order 3/2/1:
't' vs 't':
string: pasting
needle: fast +1 for BNDM; +4 for Horspool; +5 for Sunday; +5=MAX(4,5) for 'Trident'
Here 'ass'/'ss'/'s' respectively Order 3/2/1:
's' vs 't':
string: passing
needle: fast +3 for BNDM; +1 for Horspool; +5 for Sunday; +3=4-1 for 'Trident'
's' vs 't':
string: passing
needle: asst +1 for BNDM; +1 for Horspool; +5 for Sunday; +1=4-1-2 for 'Trident'
's' vs 't':
string: xpassing
needle: xasst +2 for BNDM; +1 for Horspool; +6 for Sunday; +1=5-2-2 for 'Trident'
's' vs 't':
string: xpassing
needle: assxt +2 for BNDM; +2 for Horspool; +6 for Sunday; +2=5-1-2 for 'Trident'
's' vs 't':
string: xpassing
needle: xssxt +3 for BNDM; +2 for Horspool; +6 for Sunday; +3=5-2 for 'Trident'
The main-loop of BNDM:
while (i <= cbTarget-cbPattern) {
mask = maskv[tgt[cbPattern - 1 + i]];
j = cbPattern;
while (mask) {
if (!--j) return pbTarget + i;
mask = (mask << 1) & maskv[tgt[i + j - 1]];
}
i= i + j;
}
The main-loop of 'Trident':
while (i <= cbTarget-cbPattern-1) { Gulliver = bm_Horspool_Order2[*(unsigned short *)&pbTarget[i+cbPattern-1-1]];
if ( Gulliver == cbPattern-2 ) { if ( *(unsigned long *)&pbTarget[i] == ulHashPattern) {
count = countSTATIC; while ( count !=0 && *(char *)(pbPattern+(countSTATIC-count)+4) == *(char *)(&pbTarget[i]+(countSTATIC-count)+4) )
count--;
if ( count == 0) Railgunhits++; }
if ( bm_bc[(unsigned char)pbTarget[i+cbPattern-1]] < bm_bc2nd[(unsigned char)pbTarget[i+(cbPattern)]] )
Gulliver = bm_bc2nd[(unsigned char)pbTarget[i+(cbPattern)]];
else
Gulliver = bm_bc[(unsigned char)pbTarget[i+cbPattern-1]];
} else if ( Gulliver != cbPattern-1 ) { Gulliver = cbPattern - Gulliver - 2; if ( cbPattern<=32 ) {
mask = maskv[tgt[i + (cbPattern-0) - 1]];
mask = (mask << 1) & maskv[tgt[i + (cbPattern-1) - 1]];
mask = (mask << 1) & maskv[tgt[i + (cbPattern-2) - 1]];
if (!mask)
Gulliver = cbPattern-2;
}
}
i = i + Gulliver;
}
We do not have to dig into left i.e. to go backward too deeply.
The cost of giving the longest matching suffix has NOT to be paid if we have already a guaranteed bigger skip: from either orders.
'Trident' is a failure compared to its predecessor 'Gulliver', but this matters not - an important Order 3[+] check technique comes in action.
As for Speed-Performance, the quick results show that 'Trident' jumps between BNDM and 'Gulliver':
Pattern: SR71
Railgun_Quadruplet_7sun: 1135KB/clock / 0499%, 41454732 iterations
Railgun_Quadruplet_7Trident: 0734KB/clock / 0300%, 68969573 iterations
BNDM_32: 1542KB/clock / 0399%, 51789374 iterations
Railgun_Quadruplet_7Elsiane: 1262KB/clock / 0598%, 34566579 iterations
Railgun_Quadruplet_7Gulliver: 0737KB/clock / 0300%, 68969573 iterations
Railgun_Quadruplet_7Hasherezade: 0801KB/clock / 0300%, 68969573 iterations
Pattern: SR71 blackbird
Railgun_Quadruplet_7sun: 2296KB/clock / 1144%, 18073759 iterations
Railgun_Quadruplet_7Trident: 2494KB/clock / 1298%, 15935673 iterations
BNDM_32: 1507KB/clock / 1349%, 15327681 iterations
Railgun_Quadruplet_7Elsiane: 0948KB/clock / 1358%, 15230837 iterations
Railgun_Quadruplet_7Gulliver: 2557KB/clock / 1291%, 16018393 iterations
Railgun_Quadruplet_7Hasherezade: 2377KB/clock / 1292%, 16002309 iterations
Pattern: fastest fox
Railgun_Quadruplet_7sun: 1683KB/clock / 0775%, 26672940 iterations
Railgun_Quadruplet_7Trident: 1888KB/clock / 0993%, 20834332 iterations
BNDM_32: 1135KB/clock / 1038%, 19926393 iterations
Railgun_Quadruplet_7Elsiane: 0711KB/clock / 0931%, 22213101 iterations
Railgun_Quadruplet_7Gulliver: 1942KB/clock / 0977%, 21166516 iterations
Railgun_Quadruplet_7Hasherezade: 1757KB/clock / 0980%, 21112673 iterations
Pattern: fastest fox with biggest strides
Railgun_Quadruplet_7sun: 2658KB/clock / 1584%, 13060463 iterations
Railgun_Quadruplet_7Trident: 3015KB/clock / 3058%, 06765272 iterations
BNDM_32: 2806KB/clock / 3113%, 06644708 iterations
Railgun_Quadruplet_7Elsiane: 1554KB/clock / 2143%, 09652548 iterations
Railgun_Quadruplet_7Gulliver: 3157KB/clock / 2924%, 07074287 iterations
Railgun_Quadruplet_7Hasherezade: 3061KB/clock / 3041%, 06801754 iterations
Pattern: contradiction
Railgun_Quadruplet_7sun: 2270KB/clock / 1095%, 18882463 iterations
Railgun_Quadruplet_7Trident: 2245KB/clock / 1196%, 17286428 iterations
BNDM_32: 1566KB/clock / 1264%, 16365866 iterations
Railgun_Quadruplet_7Elsiane: 0935KB/clock / 1330%, 15551247 iterations
Railgun_Quadruplet_7Gulliver: 2296KB/clock / 1188%, 17413012 iterations
Railgun_Quadruplet_7Hasherezade: 2126KB/clock / 1191%, 17367599 iterations
Pattern: unpredictable as
Railgun_Quadruplet_7sun: 1757KB/clock / 0827%, 25018727 iterations
Railgun_Quadruplet_7Trident: 2349KB/clock / 1487%, 13911319 iterations
BNDM_32: 1697KB/clock / 1518%, 13624633 iterations
Railgun_Quadruplet_7Elsiane: 0882KB/clock / 1106%, 18694843 iterations
Railgun_Quadruplet_7Gulliver: 2434KB/clock / 1430%, 14460245 iterations
Railgun_Quadruplet_7Hasherezade: 2270KB/clock / 1462%, 14151474 iterations
Pattern: I should have known
Railgun_Quadruplet_7sun: 2245KB/clock / 1140%, 18143840 iterations
Railgun_Quadruplet_7Trident: 2494KB/clock / 1775%, 11650409 iterations
BNDM_32: 1741KB/clock / 1819%, 11370422 iterations
Railgun_Quadruplet_7Elsiane: 1092KB/clock / 1444%, 14323653 iterations
Railgun_Quadruplet_7Gulliver: 2624KB/clock / 1711%, 12086791 iterations
Railgun_Quadruplet_7Hasherezade: 2464KB/clock / 1750%, 11822677 iterations
'Trident' gets better with making the pattern bigger.
BNDM is so nifty, however I still cannot see how to use it as a skeleton, I am not in a hurry (having such an awesome gun), though.
Get down get down get down get it on show love and give it up
What are you waiting on?
|
|
|
|
 |
|
 |
Okay, yesterday I had the opportunity to see how a mainstream desktop PC behaves:
CPU: Core2Duo E7600 2997MHz(333x9) Cache L1:64KB Cache L2:3072KB
RAM: DDR3-1333(667MHz) SDRAM; TCL/TRCD/TRP/TRAS: 9CLK/9CLK/9CLK/24CLK
Pattern: fastest fox with biggest strides
Railgun_Quadruplet_7sun performance: 3,885KB/clock
Railgun_Quadruplet_7 performance: 3,961KB/clock
Railgun_Quadruplet_7Trident performance: 4,699KB/clock
BNDM_32 performance: 4,123KB/clock
Railgun_Quadruplet_7Gulliver performance: 5,051KB/clock Fastest
Railgun_Quadruplet_7Hasherezade performance: 4,810KB/clock
Boyer_Moore_Flensburg performance: 2,658KB/clock
Two-Way performance: 0,259KB/clock
Pattern: and every day a continuous cleaning goes on
Railgun_Quadruplet_7sun performance: 3,673KB/clock
Railgun_Quadruplet_7 performance: 3,673KB/clock
Railgun_Quadruplet_7Trident performance: 4,810KB/clock
BNDM_32 performance: N/A
Railgun_Quadruplet_7Gulliver performance: 4,928KB/clock Fastest
Railgun_Quadruplet_7Hasherezade performance: 4,810KB/clock
Boyer_Moore_Flensburg performance: 2,464KB/clock
Two-Way performance: 0,253KB/clock
Pattern: And let this be your very fundamental insight... about everything. Just for one year, don't choose.
Railgun_Quadruplet_7sun performance: 4,490KB/clock
Railgun_Quadruplet_7 performance: 4,392KB/clock
Railgun_Quadruplet_7Trident performance: 4,928KB/clock
BNDM_32 performance: N/A
Railgun_Quadruplet_7Gulliver performance: 5,051KB/clock
Railgun_Quadruplet_7Hasherezade performance: 5,461KB/clock Fastest
Boyer_Moore_Flensburg performance: 3,544KB/clock
Two-Way performance: 0,263KB/clock
Quick bottom-line: not happy at all since Everest benchmarker says:
Memory Read: 8,069MB/s
Memory Copy: 7,367MB/s
And the short-lines (LinesEncountered: 2459508) strstr test:
Searching for Pattern('an',2bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 1212509/492
strstr_Microsoft performance: 274KB/clock
StrnglenTRAVERSED: 138478024 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 1212509/373
strstr_GNU_C_Library performance: 362KB/clock
StrnglenTRAVERSED: 138478024 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 1212509/339
Railgun_Quadruplet_8Short performance: 398KB/clock
StrnglenTRAVERSED: 138478024 bytes
BNDM_32_hits/BNDM_32_clocks: 1212509/454
BNDM_32 performance: 297KB/clock
StrnglenTRAVERSED: 138478024 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 1212509/402
Railgun_Quadruplet_7Gulliver performance: 336KB/clock
StrnglenTRAVERSED: 138478024 bytes
Searching for Pattern('to',2bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 780175/555
strstr_Microsoft performance: 289KB/clock
StrnglenTRAVERSED: 164505415 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 780175/402
strstr_GNU_C_Library performance: 399KB/clock
StrnglenTRAVERSED: 164505415 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 780175/368
Railgun_Quadruplet_8Short performance: 436KB/clock
StrnglenTRAVERSED: 164505415 bytes
BNDM_32_hits/BNDM_32_clocks: 780175/497
BNDM_32 performance: 323KB/clock
StrnglenTRAVERSED: 164505415 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 780175/432
Railgun_Quadruplet_7Gulliver performance: 371KB/clock
StrnglenTRAVERSED: 164505415 bytes
Searching for Pattern('TDK',3bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 0/537
strstr_Microsoft performance: 371KB/clock
StrnglenTRAVERSED: 204449441 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 0/347
strstr_GNU_C_Library performance: 575KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 0/369
Railgun_Quadruplet_8Short performance: 541KB/clock
StrnglenTRAVERSED: 204449441 bytes
BNDM_32_hits/BNDM_32_clocks: 0/384
BNDM_32 performance: 519KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 0/450
Railgun_Quadruplet_7Gulliver performance: 443KB/clock
StrnglenTRAVERSED: 204449441 bytes
Searching for Pattern('the',3bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 1192002/510
strstr_Microsoft performance: 260KB/clock
StrnglenTRAVERSED: 135882884 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 1192002/372
strstr_GNU_C_Library performance: 356KB/clock
StrnglenTRAVERSED: 135882884 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 1192002/362
Railgun_Quadruplet_8Short performance: 366KB/clock
StrnglenTRAVERSED: 135882884 bytes
BNDM_32_hits/BNDM_32_clocks: 1192002/463
BNDM_32 performance: 286KB/clock
StrnglenTRAVERSED: 135882884 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 1192002/435
Railgun_Quadruplet_7Gulliver performance: 305KB/clock
StrnglenTRAVERSED: 135882884 bytes
Searching for Pattern('fast',4bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 5384/552
strstr_Microsoft performance: 361KB/clock
StrnglenTRAVERSED: 204186782 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 5384/361
strstr_GNU_C_Library performance: 552KB/clock
StrnglenTRAVERSED: 204186782 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 5384/371
Railgun_Quadruplet_8Short performance: 537KB/clock
StrnglenTRAVERSED: 204186782 bytes
BNDM_32_hits/BNDM_32_clocks: 5384/464
BNDM_32 performance: 429KB/clock
StrnglenTRAVERSED: 204186782 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 5384/497
Railgun_Quadruplet_7Gulliver performance: 401KB/clock
StrnglenTRAVERSED: 204186782 bytes
Searching for Pattern('easy',4bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 4825/703
strstr_Microsoft performance: 283KB/clock
StrnglenTRAVERSED: 204202166 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 4825/478
strstr_GNU_C_Library performance: 417KB/clock
StrnglenTRAVERSED: 204202166 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 4825/497
Railgun_Quadruplet_8Short performance: 401KB/clock
StrnglenTRAVERSED: 204202166 bytes
BNDM_32_hits/BNDM_32_clocks: 4825/479
BNDM_32 performance: 416KB/clock
StrnglenTRAVERSED: 204202166 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 4825/498
Railgun_Quadruplet_7Gulliver performance: 400KB/clock
StrnglenTRAVERSED: 204202166 bytes
Searching for Pattern('grmbl',5bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 0/555
strstr_Microsoft performance: 359KB/clock
StrnglenTRAVERSED: 204449441 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 0/365
strstr_GNU_C_Library performance: 547KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 0/372
Railgun_Quadruplet_8Short performance: 536KB/clock
StrnglenTRAVERSED: 204449441 bytes
BNDM_32_hits/BNDM_32_clocks: 0/396
BNDM_32 performance: 504KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 0/497
Railgun_Quadruplet_7Gulliver performance: 401KB/clock
StrnglenTRAVERSED: 204449441 bytes
Searching for Pattern('email',5bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 1/696
strstr_Microsoft performance: 286KB/clock
StrnglenTRAVERSED: 204449414 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 1/471
strstr_GNU_C_Library performance: 423KB/clock
StrnglenTRAVERSED: 204449414 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 1/495
Railgun_Quadruplet_8Short performance: 403KB/clock
StrnglenTRAVERSED: 204449414 bytes
BNDM_32_hits/BNDM_32_clocks: 1/455
BNDM_32 performance: 438KB/clock
StrnglenTRAVERSED: 204449414 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 1/498
Railgun_Quadruplet_7Gulliver performance: 400KB/clock
StrnglenTRAVERSED: 204449414 bytes
Searching for Pattern('pasting',7bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 2/551
strstr_Microsoft performance: 362KB/clock
StrnglenTRAVERSED: 204449363 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 2/361
strstr_GNU_C_Library performance: 553KB/clock
StrnglenTRAVERSED: 204449363 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 2/366
Railgun_Quadruplet_8Short performance: 545KB/clock
StrnglenTRAVERSED: 204449363 bytes
BNDM_32_hits/BNDM_32_clocks: 2/448
BNDM_32 performance: 445KB/clock
StrnglenTRAVERSED: 204449363 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 2/498
Railgun_Quadruplet_7Gulliver performance: 400KB/clock
StrnglenTRAVERSED: 204449363 bytes
Searching for Pattern('amazing',7bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 319/633
strstr_Microsoft performance: 315KB/clock
StrnglenTRAVERSED: 204432134 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 319/420
strstr_GNU_C_Library performance: 475KB/clock
StrnglenTRAVERSED: 204432134 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 319/426
Railgun_Quadruplet_8Short performance: 468KB/clock
StrnglenTRAVERSED: 204432134 bytes
BNDM_32_hits/BNDM_32_clocks: 319/413
BNDM_32 performance: 483KB/clock
StrnglenTRAVERSED: 204432134 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 319/498
Railgun_Quadruplet_7Gulliver performance: 400KB/clock
StrnglenTRAVERSED: 204432134 bytes
Searching for Pattern('underdog',8bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 4/578
strstr_Microsoft performance: 345KB/clock
StrnglenTRAVERSED: 204449185 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 4/380
strstr_GNU_C_Library performance: 525KB/clock
StrnglenTRAVERSED: 204449185 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 4/380
Railgun_Quadruplet_8Short performance: 525KB/clock
StrnglenTRAVERSED: 204449185 bytes
BNDM_32_hits/BNDM_32_clocks: 4/426
BNDM_32 performance: 468KB/clock
StrnglenTRAVERSED: 204449185 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 4/498
Railgun_Quadruplet_7Gulliver performance: 400KB/clock
StrnglenTRAVERSED: 204449185 bytes
Searching for Pattern('superdog',8bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 0/616
strstr_Microsoft performance: 324KB/clock
StrnglenTRAVERSED: 204449441 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 0/411
strstr_GNU_C_Library performance: 485KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 0/416
Railgun_Quadruplet_8Short performance: 479KB/clock
StrnglenTRAVERSED: 204449441 bytes
BNDM_32_hits/BNDM_32_clocks: 0/425
BNDM_32 performance: 469KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 0/498
Railgun_Quadruplet_7Gulliver performance: 400KB/clock
StrnglenTRAVERSED: 204449441 bytes
Searching for Pattern('participants',12bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 141/551
strstr_Microsoft performance: 362KB/clock
StrnglenTRAVERSED: 204441500 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 141/361
strstr_GNU_C_Library performance: 553KB/clock
StrnglenTRAVERSED: 204441500 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 141/356
Railgun_Quadruplet_8Short performance: 560KB/clock
StrnglenTRAVERSED: 204441500 bytes
BNDM_32_hits/BNDM_32_clocks: 141/407
BNDM_32 performance: 490KB/clock
StrnglenTRAVERSED: 204441500 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 141/497
Railgun_Quadruplet_7Gulliver performance: 401KB/clock
StrnglenTRAVERSED: 204441500 bytes
Searching for Pattern('skillessness',12bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 0/614
strstr_Microsoft performance: 325KB/clock
StrnglenTRAVERSED: 204449441 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 0/410
strstr_GNU_C_Library performance: 486KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 0/406
Railgun_Quadruplet_8Short performance: 491KB/clock
StrnglenTRAVERSED: 204449441 bytes
BNDM_32_hits/BNDM_32_clocks: 0/397
BNDM_32 performance: 502KB/clock
StrnglenTRAVERSED: 204449441 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 0/497
Railgun_Quadruplet_7Gulliver performance: 401KB/clock
StrnglenTRAVERSED: 204449441 bytes
Searching for Pattern('I should have known',19bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 1/542
strstr_Microsoft performance: 368KB/clock
StrnglenTRAVERSED: 204449346 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 1/350
strstr_GNU_C_Library performance: 570KB/clock
StrnglenTRAVERSED: 204449346 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 1/335
Railgun_Quadruplet_8Short performance: 595KB/clock
StrnglenTRAVERSED: 204449346 bytes
BNDM_32_hits/BNDM_32_clocks: 1/403
BNDM_32 performance: 495KB/clock
StrnglenTRAVERSED: 204449346 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 1/497
Railgun_Quadruplet_7Gulliver performance: 401KB/clock
StrnglenTRAVERSED: 204449346 bytes
Searching for Pattern('human consciousness',19bytes) into String(206908949bytes) line-by-line ...
strstr_Microsoft_hits/strstr_Microsoft_clocks: 514/605
strstr_Microsoft performance: 329KB/clock
StrnglenTRAVERSED: 204422699 bytes
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 514/400
strstr_GNU_C_Library performance: 499KB/clock
StrnglenTRAVERSED: 204422699 bytes
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 514/379
Railgun_Quadruplet_8Short performance: 526KB/clock
StrnglenTRAVERSED: 204422699 bytes
BNDM_32_hits/BNDM_32_clocks: 514/397
BNDM_32 performance: 502KB/clock
StrnglenTRAVERSED: 204422699 bytes
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 514/497
Railgun_Quadruplet_7Gulliver performance: 401KB/clock
StrnglenTRAVERSED: 204422699 bytes
My stopwatch is broken, can't see what causes such inconsistent results for different Railgun revisions, r6pp is faster in many cases than r8short!?
On this computer Berg's strstr outspeeds Railgun_Quadruplet_8Short in 8 out of 16 cases, again, strange...
Get down get down get down get it on show love and give it up
What are you waiting on?
|
|
|
|
 |
|
 |
Don't get discouraged: across the test farm here, Railgun seems to be holding out pretty well --- even with startup cost included, and running against GLIBC's strstr. The processors here are pretty much all modern, high end machines; the lowest is an Athlon
3200.
"Dreams come true, not free" -- S.Sondheim
modified 17 Feb '12.
|
|
|
|
 |
|
 |
My laptop's Pentium Merom 2166Mhz 1MB L2 cache has been replaced by Core 2 Duo T7500 2200Mhz 4MB L2 cache.
Having seen how Dual Channel DDR3 machine favored the Berg's function I revised the case for needles 3bytes long:
if ( cbPattern==3) {
for ( ;; )
{
if ( ulHashPattern == ( (*(char *)(pbTarget-3))<<8 ) + *(pbTarget-1) ) {
if ( *(char *)(pbPattern+1) == *(char *)(pbTarget-2) ) return((pbTarget-3));
}
if ( (char)(ulHashPattern>>8) != *(pbTarget-2) ) {
pbTarget++;
if ( (char)(ulHashPattern>>8) != *(pbTarget-2) ) pbTarget++; }
pbTarget++;
if (pbTarget > pbTargetMax)
return(NULL);
}
The Triplet tweak is a natural lower case of Quadruplet, for some reason I overlooked it.
The tweak-line (1st char vs 3rd char) boosts search by 20+MB/s, all next stats done on my upgraded laptop:
8short:
Searching for Pattern('TDK',3bytes) into String(206908949bytes) line-by-line ...
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 0/496
strstr_GNU_C_Library performance: 402KB/clock
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 0/504
Railgun_Quadruplet_8Short performance: 396KB/clock
8Triplet:
Searching for Pattern('TDK',3bytes) into String(206908949bytes) line-by-line ...
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 0/504
strstr_GNU_C_Library performance: 396KB/clock
Railgun_Quadruplet_8Triplet_hits/Railgun_Quadruplet_8Triplet_clocks: 0/471
Railgun_Quadruplet_8Triplet performance: 423KB/clock
The same tweak-line was added to Railgun_Quadruplet_7Trident r.2:
r.1 i.e. without 8Triplet tweak:
Pattern: TDK
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 0/220
Railgun_Quadruplet_7Trident performance: 918KB/clock
Pattern: the
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 2114180/332
Railgun_Quadruplet_7Trident performance: 608KB/clock
Pattern: pun
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 3474/234
Railgun_Quadruplet_7Trident performance: 863KB/clock
Pattern: zoo
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 316/210
Railgun_Quadruplet_7Trident performance: 962KB/clock
Pattern: inn
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 35383/285
Railgun_Quadruplet_7Trident performance: 708KB/clock
Pattern: hey
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 226644/275
Railgun_Quadruplet_7Trident performance: 734KB/clock
Pattern: dot
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 1385/253
Railgun_Quadruplet_7Trident performance: 798KB/clock
Pattern: fum
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 697/226
Railgun_Quadruplet_7Trident performance: 894KB/clock
r.2 i.e. with 8Triplet tweak:
Pattern: TDK
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 0/210
Railgun_Quadruplet_7Trident performance: 962KB/clock
Pattern: the
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 2114180/316
Railgun_Quadruplet_7Trident performance: 639KB/clock
Pattern: pun
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 3474/224
Railgun_Quadruplet_7Trident performance: 902KB/clock
Pattern: zoo
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 316/202
Railgun_Quadruplet_7Trident performance: 1000KB/clock
Pattern: inn
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 35383/280
Railgun_Quadruplet_7Trident performance: 721KB/clock
Pattern: hey
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 226644/263
Railgun_Quadruplet_7Trident performance: 768KB/clock
Pattern: dot
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 1385/248
Railgun_Quadruplet_7Trident performance: 814KB/clock
Pattern: fum
Doing Search for Pattern(3bytes) into String(206908949bytes) as-one-line ...
Railgun_Quadruplet_7Trident_hits/Railgun_Quadruplet_7Trident_clocks: 697/220
Railgun_Quadruplet_7Trident performance: 918KB/clock
The full Dumbo 8x2 test below:
strstr_SHORT-SHOWDOWN_Microsoft_v16_Ox.exe:
strstr_SHORT-SHOWDOWN, revision 8Triplet_7Trident_7Hasherezade_vs_7Gulliver2_vs_7Elsiane_vs_7sun_vs_7_vs_7sunhorse_vs_7deuce_vs_BMF, written by Kaze.
Full credits to: R.S. Boyer, J.S. Moore, R.N. Horspool, D.M. Sunday.
Usage: strstr_SHORT-SHOWDOWN.exe [anystring] [anystring]
Example1(keyboard test): strstr_SHORT-SHOWDOWN.exe
Example2(DUMBO 8x2 test): strstr_SHORT-SHOWDOWN.exe go
Example3(6x2 and 52 tests): strstr_SHORT-SHOWDOWN.exe go go
DUMBO 8x2 ...
Searching for Pattern('an',2bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 1212509/712
strstr_Microsoft performance: 189KB/clock
StrnglenTRAVERSED: 138478024 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 1212509/483
strstr_GNU_C_Library performance: 279KB/clock
StrnglenTRAVERSED: 138478024 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 1212509/465
Railgun_Quadruplet_8Short performance: 290KB/clock
StrnglenTRAVERSED: 138478024 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 1212509/613
BNDM_32 performance: 220KB/clock
StrnglenTRAVERSED: 138478024 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 1212509/519
Railgun_Quadruplet_7Gulliver performance: 260KB/clock
StrnglenTRAVERSED: 138478024 bytes
Searching for Pattern('to',2bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 780175/810
strstr_Microsoft performance: 198KB/clock
StrnglenTRAVERSED: 164505415 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 780175/537
strstr_GNU_C_Library performance: 299KB/clock
StrnglenTRAVERSED: 164505415 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 780175/483
Railgun_Quadruplet_8Short performance: 332KB/clock
StrnglenTRAVERSED: 164505415 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 780175/669
BNDM_32 performance: 240KB/clock
StrnglenTRAVERSED: 164505415 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 780175/554
Railgun_Quadruplet_7Gulliver performance: 289KB/clock
StrnglenTRAVERSED: 164505415 bytes
Searching for Pattern('TDK',3bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 0/821
strstr_Microsoft performance: 243KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 0/488
strstr_GNU_C_Library performance: 409KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 0/446
Railgun_Quadruplet_8Short performance: 447KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 0/524
BNDM_32 performance: 381KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 0/576
Railgun_Quadruplet_7Gulliver performance: 346KB/clock
StrnglenTRAVERSED: 204449441 bytes
Searching for Pattern('the',3bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 1192002/745
strstr_Microsoft performance: 178KB/clock
StrnglenTRAVERSED: 135882884 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 1192002/512
strstr_GNU_C_Library performance: 259KB/clock
StrnglenTRAVERSED: 135882884 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 1192002/464
Railgun_Quadruplet_8Short performance: 285KB/clock
StrnglenTRAVERSED: 135882884 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 1192002/630
BNDM_32 performance: 210KB/clock
StrnglenTRAVERSED: 135882884 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 1192002/572
Railgun_Quadruplet_7Gulliver performance: 231KB/clock
StrnglenTRAVERSED: 135882884 bytes
Searching for Pattern('fast',4bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 5384/838
strstr_Microsoft performance: 237KB/clock
StrnglenTRAVERSED: 204186782 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 5384/504
strstr_GNU_C_Library performance: 395KB/clock
StrnglenTRAVERSED: 204186782 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 5384/489
Railgun_Quadruplet_8Short performance: 407KB/clock
StrnglenTRAVERSED: 204186782 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 5384/625
BNDM_32 performance: 319KB/clock
StrnglenTRAVERSED: 204186782 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 5384/656
Railgun_Quadruplet_7Gulliver performance: 303KB/clock
StrnglenTRAVERSED: 204186782 bytes
Searching for Pattern('easy',4bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 4825/1020
strstr_Microsoft performance: 195KB/clock
StrnglenTRAVERSED: 204202166 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 4825/670
strstr_GNU_C_Library performance: 297KB/clock
StrnglenTRAVERSED: 204202166 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 4825/652
Railgun_Quadruplet_8Short performance: 305KB/clock
StrnglenTRAVERSED: 204202166 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 4825/643
BNDM_32 performance: 310KB/clock
StrnglenTRAVERSED: 204202166 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 4825/655
Railgun_Quadruplet_7Gulliver performance: 304KB/clock
StrnglenTRAVERSED: 204202166 bytes
Searching for Pattern('grmbl',5bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 0/844
strstr_Microsoft performance: 236KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 0/509
strstr_GNU_C_Library performance: 392KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 0/491
Railgun_Quadruplet_8Short performance: 406KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 0/539
BNDM_32 performance: 370KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 0/656
Railgun_Quadruplet_7Gulliver performance: 304KB/clock
StrnglenTRAVERSED: 204449441 bytes
Searching for Pattern('email',5bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 1/1010
strstr_Microsoft performance: 197KB/clock
StrnglenTRAVERSED: 204449414 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 1/661
strstr_GNU_C_Library performance: 302KB/clock
StrnglenTRAVERSED: 204449414 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 1/649
Railgun_Quadruplet_8Short performance: 307KB/clock
StrnglenTRAVERSED: 204449414 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 1/617
BNDM_32 performance: 323KB/clock
StrnglenTRAVERSED: 204449414 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 1/656
Railgun_Quadruplet_7Gulliver performance: 304KB/clock
StrnglenTRAVERSED: 204449414 bytes
Searching for Pattern('pasting',7bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 2/839
strstr_Microsoft performance: 237KB/clock
StrnglenTRAVERSED: 204449363 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 2/503
strstr_GNU_C_Library performance: 396KB/clock
StrnglenTRAVERSED: 204449363 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 2/482
Railgun_Quadruplet_8Short performance: 414KB/clock
StrnglenTRAVERSED: 204449363 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 2/609
BNDM_32 performance: 327KB/clock
StrnglenTRAVERSED: 204449363 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 2/656
Railgun_Quadruplet_7Gulliver performance: 304KB/clock
StrnglenTRAVERSED: 204449363 bytes
Searching for Pattern('amazing',7bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 319/935
strstr_Microsoft performance: 213KB/clock
StrnglenTRAVERSED: 204432134 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 319/588
strstr_GNU_C_Library performance: 339KB/clock
StrnglenTRAVERSED: 204432134 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 319/563
Railgun_Quadruplet_8Short performance: 354KB/clock
StrnglenTRAVERSED: 204432134 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 319/562
BNDM_32 performance: 355KB/clock
StrnglenTRAVERSED: 204432134 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 319/655
Railgun_Quadruplet_7Gulliver performance: 304KB/clock
StrnglenTRAVERSED: 204432134 bytes
Searching for Pattern('underdog',8bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 4/872
strstr_Microsoft performance: 228KB/clock
StrnglenTRAVERSED: 204449185 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 4/531
strstr_GNU_C_Library performance: 376KB/clock
StrnglenTRAVERSED: 204449185 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 4/504
Railgun_Quadruplet_8Short performance: 396KB/clock
StrnglenTRAVERSED: 204449185 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 4/579
BNDM_32 performance: 344KB/clock
StrnglenTRAVERSED: 204449185 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 4/656
Railgun_Quadruplet_7Gulliver performance: 304KB/clock
StrnglenTRAVERSED: 204449185 bytes
Searching for Pattern('superdog',8bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 0/917
strstr_Microsoft performance: 217KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 0/575
strstr_GNU_C_Library performance: 347KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 0/550
Railgun_Quadruplet_8Short performance: 363KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 0/577
BNDM_32 performance: 346KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 0/656
Railgun_Quadruplet_7Gulliver performance: 304KB/clock
StrnglenTRAVERSED: 204449441 bytes
Searching for Pattern('participants',12bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 141/839
strstr_Microsoft performance: 237KB/clock
StrnglenTRAVERSED: 204441500 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 141/504
strstr_GNU_C_Library performance: 396KB/clock
StrnglenTRAVERSED: 204441500 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 141/471
Railgun_Quadruplet_8Short performance: 423KB/clock
StrnglenTRAVERSED: 204441500 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 141/553
BNDM_32 performance: 361KB/clock
StrnglenTRAVERSED: 204441500 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 141/656
Railgun_Quadruplet_7Gulliver performance: 304KB/clock
StrnglenTRAVERSED: 204441500 bytes
Searching for Pattern('skillessness',12bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 0/914
strstr_Microsoft performance: 218KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 0/573
strstr_GNU_C_Library performance: 348KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 0/539
Railgun_Quadruplet_8Short performance: 370KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 0/540
BNDM_32 performance: 369KB/clock
StrnglenTRAVERSED: 204449441 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 0/655
Railgun_Quadruplet_7Gulliver performance: 304KB/clock
StrnglenTRAVERSED: 204449441 bytes
Searching for Pattern('I should have known',19bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 1/827
strstr_Microsoft performance: 241KB/clock
StrnglenTRAVERSED: 204449346 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 1/492
strstr_GNU_C_Library performance: 405KB/clock
StrnglenTRAVERSED: 204449346 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 1/444
Railgun_Quadruplet_8Short performance: 449KB/clock
StrnglenTRAVERSED: 204449346 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 1/549
BNDM_32 performance: 363KB/clock
StrnglenTRAVERSED: 204449346 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 1/655
Railgun_Quadruplet_7Gulliver performance: 304KB/clock
StrnglenTRAVERSED: 204449346 bytes
Searching for Pattern('human consciousness',19bytes) into String(206908949bytes) line-by-line ...
LinesEncountered: 2459508
strstr_Microsoft_hits/strstr_Microsoft_clocks: 514/901
strstr_Microsoft performance: 221KB/clock
StrnglenTRAVERSED: 204422699 bytes
LinesEncountered: 2459508
strstr_GNU_C_Library_hits/strstr_GNU_C_Library_clocks: 514/560
strstr_GNU_C_Library performance: 356KB/clock
StrnglenTRAVERSED: 204422699 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_8Short_hits/Railgun_Quadruplet_8Short_clocks: 514/503
Railgun_Quadruplet_8Short performance: 396KB/clock
StrnglenTRAVERSED: 204422699 bytes
LinesEncountered: 2459508
BNDM_32_hits/BNDM_32_clocks: 514/542
BNDM_32 performance: 368KB/clock
StrnglenTRAVERSED: 204422699 bytes
LinesEncountered: 2459508
Railgun_Quadruplet_7Gulliver_hits/Railgun_Quadruplet_7Gulliver_clocks: 514/655
Railgun_Quadruplet_7Gulliver performance: 304KB/clock
StrnglenTRAVERSED: 204422699 bytes
On Dual Channel DDR2 laptop Railgun_Quadruplet_r8Triplet outspeeds Berg's in 16 out of 16 cases.
Get down get down get down get it on show love and give it up
What are you waiting on?
|
|
|
|
 |
|
 |
Is r8(Triplet?Mimino?) downloadable somewhere?
"Dreams come true, not free" -- S.Sondheim
|
|
|
|
 |
|
 |
No, I didn't write it yet.
Since today I have the opportunity to play with Microsoft C 2010 x64.
My intent is to explore the 64bit potential and to write 'Mimino' as 64bit (as primary) memmem while including the strstr r8Triplet part just for covering the short haystacks as well, I am new to 64bit environment.
My desire is 'Mimino' to be well-written and portable.
My knowledge of C is superficial, the ambiguousness of "standard" definitions makes me angry so I decided to use uint8_t/uint16_t/uint32_t/uint64_t in order to eliminate the nasty int/long/longlong definitions.
Get down get down get down get it on show love and give it up
What are you waiting on?
|
|
|
|
 |
|