The MASM Forum

General => The Laboratory => Topic started by: jj2007 on September 22, 2015, 10:42:12 AM

Title: Instr() timings
Post by: jj2007 on September 22, 2015, 10:42:12 AM
Just for fun... :P

Work in progress, don't use for anything serious! And note how competitive the CRT strstr() algo is, at least for one byte patterns :biggrin:

It needs a 4MB text file, which gets automatically downloaded if it's not in the exe's folder.

33979 lines found
Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz (MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX)
680 ms  for finding 996156 lines containing J using CRT strstr()
1126 ms for finding 996156 lines containing J using MB Instr_()
1084 ms for finding 996156 lines containing J using faster Instr_()

1226 ms for finding 209040 lines containing Jes using CRT strstr()
1028 ms for finding 209040 lines containing Jes using MB Instr_()
372 ms  for finding 209040 lines containing Jes using faster Instr_()

1221 ms for finding 188940 lines containing Jesus using CRT strstr()
1025 ms for finding 188940 lines containing Jesus using MB Instr_()
378 ms  for finding 188940 lines containing Jesus using faster Instr_()

1255 ms for finding 38592 lines containing Jesus C using CRT strstr()
1040 ms for finding 38592 lines containing Jesus C using MB Instr_()
377 ms  for finding 38592 lines containing Jesus C using faster Instr_()

1238 ms for finding 38592 lines containing Jesus Chr using CRT strstr()
1036 ms for finding 38592 lines containing Jesus Chr using MB Instr_()
389 ms  for finding 38592 lines containing Jesus Chr using faster Instr_()

1251 ms for finding 38592 lines containing Jesus Chris using CRT strstr()
1032 ms for finding 38592 lines containing Jesus Chris using MB Instr_()
377 ms  for finding 38592 lines containing Jesus Chris using faster Instr_()

1248 ms for finding 38592 lines containing Jesus Christ using CRT strstr()
1047 ms for finding 38592 lines containing Jesus Christ using MB Instr_()
385 ms  for finding 38592 lines containing Jesus Christ using faster Instr_()


One more:
Intel(R) Celeron(R) CPU  N2840  @ 2.16GHz (MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2)
1042 ms for finding 996156 lines containing J using CRT strstr()
1615 ms for finding 996156 lines containing J using MB Instr_()
1552 ms for finding 996156 lines containing J using faster Instr_()

1451 ms for finding 209040 lines containing Jes using CRT strstr()
1810 ms for finding 209040 lines containing Jes using MB Instr_()
633 ms  for finding 209040 lines containing Jes using faster Instr_()

1436 ms for finding 188940 lines containing Jesus using CRT strstr()
1809 ms for finding 188940 lines containing Jesus using MB Instr_()
634 ms  for finding 188940 lines containing Jesus using faster Instr_()

1454 ms for finding 38592 lines containing Jesus C using CRT strstr()
1835 ms for finding 38592 lines containing Jesus C using MB Instr_()
629 ms  for finding 38592 lines containing Jesus C using faster Instr_()

1469 ms for finding 38592 lines containing Jesus Chr using CRT strstr()
1837 ms for finding 38592 lines containing Jesus Chr using MB Instr_()
630 ms  for finding 38592 lines containing Jesus Chr using faster Instr_()

1451 ms for finding 38592 lines containing Jesus Chris using CRT strstr()
1836 ms for finding 38592 lines containing Jesus Chris using MB Instr_()
632 ms  for finding 38592 lines containing Jesus Chris using faster Instr_()

1456 ms for finding 38592 lines containing Jesus Christ using CRT strstr()
1838 ms for finding 38592 lines containing Jesus Christ using MB Instr_()
660 ms  for finding 38592 lines containing Jesus Christ using faster Instr_()
Title: Re: Instr() timings
Post by: dedndave on September 22, 2015, 12:50:22 PM
holy shit !!!  :lol:

Bible.txt downloaded
33979 lines found
Intel(R) Pentium(R) 4 CPU 3.00GHz (MMX, SSE, SSE2, SSE3)
1159 ms for finding 996156 lines containing J using CRT strstr()
2046 ms for finding 996156 lines containing J using MB Instr_()
1997 ms for finding 996156 lines containing J using faster Instr_()

1621 ms for finding 209040 lines containing Jes using CRT strstr()
1819 ms for finding 209040 lines containing Jes using MB Instr_()
962 ms  for finding 209040 lines containing Jes using faster Instr_()

1613 ms for finding 188940 lines containing Jesus using CRT strstr()
1816 ms for finding 188940 lines containing Jesus using MB Instr_()
1263 ms for finding 188940 lines containing Jesus using faster Instr_()

1629 ms for finding 38592 lines containing Jesus C using CRT strstr()
1846 ms for finding 38592 lines containing Jesus C using MB Instr_()
984 ms  for finding 38592 lines containing Jesus C using faster Instr_()

1648 ms for finding 38592 lines containing Jesus Chr using CRT strstr()
1849 ms for finding 38592 lines containing Jesus Chr using MB Instr_()
985 ms  for finding 38592 lines containing Jesus Chr using faster Instr_()

1646 ms for finding 38592 lines containing Jesus Chris using CRT strstr()
1850 ms for finding 38592 lines containing Jesus Chris using MB Instr_()
985 ms  for finding 38592 lines containing Jesus Chris using faster Instr_()

1667 ms for finding 38592 lines containing Jesus Christ using CRT strstr()
1855 ms for finding 38592 lines containing Jesus Christ using MB Instr_()
984 ms  for finding 38592 lines containing Jesus Christ using faster Instr_()
Title: Re: Instr() timings
Post by: zedd151 on September 22, 2015, 01:09:20 PM
5204 ms - InString
4807 ms - InString
4877 ms - InString

3898 ms - zStr
3788 ms - zStr
3692 ms - zStr
done!

oops, wrong test  8)
Title: Re: Instr() timings
Post by: sinsi on September 22, 2015, 01:41:02 PM

Bible.txt downloaded
33979 lines found
Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz (MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX)
382 ms  for finding 996156 lines containing J using CRT strstr()
685 ms  for finding 996156 lines containing J using MB Instr_()
679 ms  for finding 996156 lines containing J using faster Instr_()

541 ms  for finding 209040 lines containing Jes using CRT strstr()
501 ms  for finding 209040 lines containing Jes using MB Instr_()
208 ms  for finding 209040 lines containing Jes using faster Instr_()

539 ms  for finding 188940 lines containing Jesus using CRT strstr()
509 ms  for finding 188940 lines containing Jesus using MB Instr_()
214 ms  for finding 188940 lines containing Jesus using faster Instr_()

553 ms  for finding 38592 lines containing Jesus C using CRT strstr()
516 ms  for finding 38592 lines containing Jesus C using MB Instr_()
219 ms  for finding 38592 lines containing Jesus C using faster Instr_()

550 ms  for finding 38592 lines containing Jesus Chr using CRT strstr()
507 ms  for finding 38592 lines containing Jesus Chr using MB Instr_()
214 ms  for finding 38592 lines containing Jesus Chr using faster Instr_()

552 ms  for finding 38592 lines containing Jesus Chris using CRT strstr()
519 ms  for finding 38592 lines containing Jesus Chris using MB Instr_()
217 ms  for finding 38592 lines containing Jesus Chris using faster Instr_()

546 ms  for finding 38592 lines containing Jesus Christ using CRT strstr()
508 ms  for finding 38592 lines containing Jesus Christ using MB Instr_()
219 ms  for finding 38592 lines containing Jesus Christ using faster Instr_()

Title: Re: Instr() timings
Post by: rrr314159 on September 22, 2015, 01:48:50 PM
33979 lines found
AMD A6-6310 APU with AMD Radeon R4 Graphics     (MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4
.2, AVX)
1156 ms for finding 996156 lines containing J using CRT strstr()
1673 ms for finding 996156 lines containing J using MB Instr_()
1596 ms for finding 996156 lines containing J using faster Instr_()

1779 ms for finding 209040 lines containing Jes using CRT strstr()
1931 ms for finding 209040 lines containing Jes using MB Instr_()
660 ms  for finding 209040 lines containing Jes using faster Instr_()

1799 ms for finding 188940 lines containing Jesus using CRT strstr()
1931 ms for finding 188940 lines containing Jesus using MB Instr_()
677 ms  for finding 188940 lines containing Jesus using faster Instr_()

1822 ms for finding 38592 lines containing Jesus C using CRT strstr()
1974 ms for finding 38592 lines containing Jesus C using MB Instr_()
700 ms  for finding 38592 lines containing Jesus C using faster Instr_()

1772 ms for finding 38592 lines containing Jesus Chr using CRT strstr()
1970 ms for finding 38592 lines containing Jesus Chr using MB Instr_()
678 ms  for finding 38592 lines containing Jesus Chr using faster Instr_()

1822 ms for finding 38592 lines containing Jesus Chris using CRT strstr()
2008 ms for finding 38592 lines containing Jesus Chris using MB Instr_()
704 ms  for finding 38592 lines containing Jesus Chris using faster Instr_()

1807 ms for finding 38592 lines containing Jesus Christ using CRT strstr()
1962 ms for finding 38592 lines containing Jesus Christ using MB Instr_()
722 ms  for finding 38592 lines containing Jesus Christ using faster Instr_()

-- hit any key --
Title: Re: Instr() timings
Post by: mabdelouahab on September 22, 2015, 03:19:57 PM
Bible.txt downloaded
33979 lines found
Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz (MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, S
SE4.2, AVX)
919 ms  for finding 996156 lines containing J using CRT strstr()
1613 ms for finding 996156 lines containing J using MB Instr_()
1512 ms for finding 996156 lines containing J using faster Instr_()

1028 ms for finding 209040 lines containing Jes using CRT strstr()
1136 ms for finding 209040 lines containing Jes using MB Instr_()
476 ms  for finding 209040 lines containing Jes using faster Instr_()

1031 ms for finding 188940 lines containing Jesus using CRT strstr()
1164 ms for finding 188940 lines containing Jesus using MB Instr_()
495 ms  for finding 188940 lines containing Jesus using faster Instr_()

1025 ms for finding 38592 lines containing Jesus C using CRT strstr()
1606 ms for finding 38592 lines containing Jesus C using MB Instr_()
1646 ms for finding 38592 lines containing Jesus C using faster Instr_()

3167 ms for finding 38592 lines containing Jesus Chr using CRT strstr()
3728 ms for finding 38592 lines containing Jesus Chr using MB Instr_()
1555 ms for finding 38592 lines containing Jesus Chr using faster Instr_()

3260 ms for finding 38592 lines containing Jesus Chris using CRT strstr()
3822 ms for finding 38592 lines containing Jesus Chris using MB Instr_()
1614 ms for finding 38592 lines containing Jesus Chris using faster Instr_()

3393 ms for finding 38592 lines containing Jesus Christ using CRT strstr()
4073 ms for finding 38592 lines containing Jesus Christ using MB Instr_()
1608 ms for finding 38592 lines containing Jesus Christ using faster Instr_()

-- hit any key --
Title: Re: Instr() timings
Post by: jj2007 on September 22, 2015, 04:21:33 PM
Quote from: mabdelouahab on September 22, 2015, 03:19:57 PM
Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz (MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, S
SE4.2, AVX)
3393 ms for finding 38592 lines containing Jesus Christ using CRT strstr()
4073 ms for finding 38592 lines containing Jesus Christ using MB Instr_()
1608 ms for finding 38592 lines containing Jesus Christ using faster Instr_()


Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz (MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX)
1248 ms for finding 38592 lines containing Jesus Christ using CRT strstr()
1047 ms for finding 38592 lines containing Jesus Christ using MB Instr_()
385 ms  for finding 38592 lines containing Jesus Christ using faster Instr_()


Really fat differences between two i5 CPUs again ::)

Thanks to everybody :icon14:

P.S.: Dave... :eusa_naughty:

I use that 4 MB text file for rather pragmatic reasons: It is difficult to find a text corpus for such tests that is large enough to go well beyond the data cache. Sometimes I concatenate it to do the tests with 400 or 800 MB, which is close to the allocation limit of Windows.
Title: Re: Instr() timings
Post by: Siekmanski on September 22, 2015, 05:29:44 PM
33979 lines found
Intel(R) Core(TM) i7-4930K CPU @ 3.40GHz (MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, S
SE4.2, AVX)
467 ms  for finding 996156 lines containing J using CRT strstr()
795 ms  for finding 996156 lines containing J using MB Instr_()
784 ms  for finding 996156 lines containing J using faster Instr_()

667 ms  for finding 209040 lines containing Jes using CRT strstr()
730 ms  for finding 209040 lines containing Jes using MB Instr_()
267 ms  for finding 209040 lines containing Jes using faster Instr_()

670 ms  for finding 188940 lines containing Jesus using CRT strstr()
739 ms  for finding 188940 lines containing Jesus using MB Instr_()
278 ms  for finding 188940 lines containing Jesus using faster Instr_()

673 ms  for finding 38592 lines containing Jesus C using CRT strstr()
744 ms  for finding 38592 lines containing Jesus C using MB Instr_()
279 ms  for finding 38592 lines containing Jesus C using faster Instr_()

676 ms  for finding 38592 lines containing Jesus Chr using CRT strstr()
742 ms  for finding 38592 lines containing Jesus Chr using MB Instr_()
274 ms  for finding 38592 lines containing Jesus Chr using faster Instr_()

675 ms  for finding 38592 lines containing Jesus Chris using CRT strstr()
750 ms  for finding 38592 lines containing Jesus Chris using MB Instr_()
276 ms  for finding 38592 lines containing Jesus Chris using faster Instr_()

673 ms  for finding 38592 lines containing Jesus Christ using CRT strstr()
742 ms  for finding 38592 lines containing Jesus Christ using MB Instr_()
276 ms  for finding 38592 lines containing Jesus Christ using faster Instr_()

-- hit any key --
Title: Re: Instr() timings
Post by: TWell on September 22, 2015, 06:32:06 PM
Bible.txt downloaded
33979 lines found
AMD E-450 APU with Radeon(tm) HD Graphics (MMX, SSE, SSE2, SSE3, SSSE3) 1,6 GHz
1898 ms for finding 996156 lines containing J using CRT strstr()
2593 ms for finding 996156 lines containing J using MB Instr_()
2541 ms for finding 996156 lines containing J using faster Instr_()

2449 ms for finding 209040 lines containing Jes using CRT strstr()
2851 ms for finding 209040 lines containing Jes using MB Instr_()
1124 ms for finding 209040 lines containing Jes using faster Instr_()

2473 ms for finding 188940 lines containing Jesus using CRT strstr()
2868 ms for finding 188940 lines containing Jesus using MB Instr_()
1168 ms for finding 188940 lines containing Jesus using faster Instr_()

2494 ms for finding 38592 lines containing Jesus C using CRT strstr()
2841 ms for finding 38592 lines containing Jesus C using MB Instr_()
1210 ms for finding 38592 lines containing Jesus C using faster Instr_()

2641 ms for finding 38592 lines containing Jesus Chr using CRT strstr()
2879 ms for finding 38592 lines containing Jesus Chr using MB Instr_()
1171 ms for finding 38592 lines containing Jesus Chr using faster Instr_()

2510 ms for finding 38592 lines containing Jesus Chris using CRT strstr()
2939 ms for finding 38592 lines containing Jesus Chris using MB Instr_()
1194 ms for finding 38592 lines containing Jesus Chris using faster Instr_()

2490 ms for finding 38592 lines containing Jesus Christ using CRT strstr()
2848 ms for finding 38592 lines containing Jesus Christ using MB Instr_()
1172 ms for finding 38592 lines containing Jesus Christ using faster Instr_()

-- hit any key --
Title: Re: Instr() timings
Post by: jj2007 on September 22, 2015, 10:45:16 PM
Thanks :icon14:

New version, includes Masm32 find$() aka InString (note that find$() returns always zero if an empty pattern is passed; it also chokes with an exception if empty pattern meets end of array...):

Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz
32 ms   for finding 2004761 lines containing [] using CRT strstr()
399 ms  for finding 0 lines containing [] using Masm32 find$()
348 ms  for finding 2004761 lines containing [] using MB Instr_()
33 ms   for finding 2004761 lines containing [] using faster Instr_()

199 ms  for finding 292404 lines containing [J] using CRT strstr()
367 ms  for finding 292404 lines containing [J] using Masm32 find$()
326 ms  for finding 292404 lines containing [J] using MB Instr_()
320 ms  for finding 292404 lines containing [J] using faster Instr_()

347 ms  for finding 165908 lines containing [Je] using CRT strstr()
379 ms  for finding 165908 lines containing [Je] using Masm32 find$()
287 ms  for finding 165908 lines containing [Je] using MB Instr_()
107 ms  for finding 165908 lines containing [Je] using faster Instr_()

365 ms  for finding 61360 lines containing [Jes] using CRT strstr()
391 ms  for finding 61360 lines containing [Jes] using Masm32 find$()
299 ms  for finding 61360 lines containing [Jes] using MB Instr_()
112 ms  for finding 61360 lines containing [Jes] using faster Instr_()

363 ms  for finding 55578 lines containing [Jesu] using CRT strstr()
389 ms  for finding 55578 lines containing [Jesu] using Masm32 find$()
300 ms  for finding 55578 lines containing [Jesu] using MB Instr_()
110 ms  for finding 55578 lines containing [Jesu] using faster Instr_()

364 ms  for finding 55460 lines containing [Jesus] using CRT strstr()
390 ms  for finding 55460 lines containing [Jesus] using Masm32 find$()
299 ms  for finding 55460 lines containing [Jesus] using MB Instr_()
113 ms  for finding 55460 lines containing [Jesus] using faster Instr_()

363 ms  for finding 44604 lines containing [Jesus ] using CRT strstr()
393 ms  for finding 44604 lines containing [Jesus ] using Masm32 find$()
301 ms  for finding 44604 lines containing [Jesus ] using MB Instr_()
111 ms  for finding 44604 lines containing [Jesus ] using faster Instr_()

368 ms  for finding 11328 lines containing [Jesus C] using CRT strstr()
390 ms  for finding 11328 lines containing [Jesus C] using Masm32 find$()
304 ms  for finding 11328 lines containing [Jesus C] using MB Instr_()
112 ms  for finding 11328 lines containing [Jesus C] using faster Instr_()

1018 ms total for faster Instr_(), 2401 ms for CRT, crt:mb=2.36
318     bytes for InstrJJw
Title: Re: Instr() timings
Post by: dedndave on September 22, 2015, 10:48:25 PM
prescott w/htt
Intel(R) Pentium(R) 4 CPU 3.00GHz
57 ms   for finding 2004761 lines containing [] using CRT strstr()
574 ms  for finding 0 lines containing [] using Masm32 find$()
624 ms  for finding 2004761 lines containing [] using MB Instr_()
66 ms   for finding 2004761 lines containing [] using faster Instr_()

308 ms  for finding 292404 lines containing [J] using CRT strstr()
554 ms  for finding 292404 lines containing [J] using Masm32 find$()
587 ms  for finding 292404 lines containing [J] using MB Instr_()
559 ms  for finding 292404 lines containing [J] using faster Instr_()

465 ms  for finding 165908 lines containing [Je] using CRT strstr()
564 ms  for finding 165908 lines containing [Je] using Masm32 find$()
520 ms  for finding 165908 lines containing [Je] using MB Instr_()
268 ms  for finding 165908 lines containing [Je] using faster Instr_()

478 ms  for finding 61360 lines containing [Jes] using CRT strstr()
578 ms  for finding 61360 lines containing [Jes] using Masm32 find$()
542 ms  for finding 61360 lines containing [Jes] using MB Instr_()
282 ms  for finding 61360 lines containing [Jes] using faster Instr_()

479 ms  for finding 55578 lines containing [Jesu] using CRT strstr()
580 ms  for finding 55578 lines containing [Jesu] using Masm32 find$()
538 ms  for finding 55578 lines containing [Jesu] using MB Instr_()
280 ms  for finding 55578 lines containing [Jesu] using faster Instr_()

482 ms  for finding 55460 lines containing [Jesus] using CRT strstr()
580 ms  for finding 55460 lines containing [Jesus] using Masm32 find$()
542 ms  for finding 55460 lines containing [Jesus] using MB Instr_()
285 ms  for finding 55460 lines containing [Jesus] using faster Instr_()

482 ms  for finding 44604 lines containing [Jesus ] using CRT strstr()
567 ms  for finding 44604 lines containing [Jesus ] using Masm32 find$()
544 ms  for finding 44604 lines containing [Jesus ] using MB Instr_()
278 ms  for finding 44604 lines containing [Jesus ] using faster Instr_()

488 ms  for finding 11328 lines containing [Jesus C] using CRT strstr()
567 ms  for finding 11328 lines containing [Jesus C] using Masm32 find$()
547 ms  for finding 11328 lines containing [Jesus C] using MB Instr_()
287 ms  for finding 11328 lines containing [Jesus C] using faster Instr_()

2305 ms total for faster Instr_(), 3239 ms for CRT, crt:mb=1.41
Title: Re: Instr() timings
Post by: Siekmanski on September 23, 2015, 05:02:36 AM
Bible.txt downloaded
33979 lines found
Intel(R) Core(TM) i7-4930K CPU @ 3.40GHz
40 ms   for finding 2004761 lines containing [] using CRT strstr()
304 ms  for finding 0 lines containing [] using Masm32 find$()
249 ms  for finding 2004761 lines containing [] using MB Instr_()
23 ms   for finding 2004761 lines containing [] using faster Instr_()

140 ms  for finding 292404 lines containing [J] using CRT strstr()
264 ms  for finding 292404 lines containing [J] using Masm32 find$()
233 ms  for finding 292404 lines containing [J] using MB Instr_()
229 ms  for finding 292404 lines containing [J] using faster Instr_()

189 ms  for finding 165908 lines containing [Je] using CRT strstr()
274 ms  for finding 165908 lines containing [Je] using Masm32 find$()
207 ms  for finding 165908 lines containing [Je] using MB Instr_()
75 ms   for finding 165908 lines containing [Je] using faster Instr_()

198 ms  for finding 61360 lines containing [Jes] using CRT strstr()
281 ms  for finding 61360 lines containing [Jes] using Masm32 find$()
214 ms  for finding 61360 lines containing [Jes] using MB Instr_()
79 ms   for finding 61360 lines containing [Jes] using faster Instr_()

197 ms  for finding 55578 lines containing [Jesu] using CRT strstr()
280 ms  for finding 55578 lines containing [Jesu] using Masm32 find$()
215 ms  for finding 55578 lines containing [Jesu] using MB Instr_()
78 ms   for finding 55578 lines containing [Jesu] using faster Instr_()

198 ms  for finding 55460 lines containing [Jesus] using CRT strstr()
280 ms  for finding 55460 lines containing [Jesus] using Masm32 find$()
215 ms  for finding 55460 lines containing [Jesus] using MB Instr_()
78 ms   for finding 55460 lines containing [Jesus] using faster Instr_()

197 ms  for finding 44604 lines containing [Jesus ] using CRT strstr()
280 ms  for finding 44604 lines containing [Jesus ] using Masm32 find$()
216 ms  for finding 44604 lines containing [Jesus ] using MB Instr_()
77 ms   for finding 44604 lines containing [Jesus ] using faster Instr_()

200 ms  for finding 11328 lines containing [Jesus C] using CRT strstr()
280 ms  for finding 11328 lines containing [Jesus C] using Masm32 find$()
219 ms  for finding 11328 lines containing [Jesus C] using MB Instr_()
78 ms   for finding 11328 lines containing [Jesus C] using faster Instr_()

717 ms total for faster Instr_(), 1359 ms for CRT, crt:mb=1.90
318     bytes for InstrJJw
Title: Re: Instr() timings
Post by: TWell on September 23, 2015, 08:43:27 PM
@jj2007
Can test that with strstr from pocrt.dll too?
Title: Re: Instr() timings
Post by: sinsi on September 23, 2015, 09:09:14 PM
Bible.txt downloaded
33979 lines found
Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
18 ms   for finding 2004761 lines containing [] using CRT strstr()
186 ms  for finding 0 lines containing [] using Masm32 find$()
217 ms  for finding 2004761 lines containing [] using MB Instr_()
18 ms   for finding 2004761 lines containing [] using faster Instr_()

115 ms  for finding 292404 lines containing [J] using CRT strstr()
174 ms  for finding 292404 lines containing [J] using Masm32 find$()
201 ms  for finding 292404 lines containing [J] using MB Instr_()
197 ms  for finding 292404 lines containing [J] using faster Instr_()

152 ms  for finding 165908 lines containing [Je] using CRT strstr()
181 ms  for finding 165908 lines containing [Je] using Masm32 find$()
143 ms  for finding 165908 lines containing [Je] using MB Instr_()
60 ms   for finding 165908 lines containing [Je] using faster Instr_()

160 ms  for finding 61360 lines containing [Jes] using CRT strstr()
188 ms  for finding 61360 lines containing [Jes] using Masm32 find$()
146 ms  for finding 61360 lines containing [Jes] using MB Instr_()
63 ms   for finding 61360 lines containing [Jes] using faster Instr_()

159 ms  for finding 55578 lines containing [Jesu] using CRT strstr()
185 ms  for finding 55578 lines containing [Jesu] using Masm32 find$()
146 ms  for finding 55578 lines containing [Jesu] using MB Instr_()
60 ms   for finding 55578 lines containing [Jesu] using faster Instr_()

159 ms  for finding 55460 lines containing [Jesus] using CRT strstr()
189 ms  for finding 55460 lines containing [Jesus] using Masm32 find$()
147 ms  for finding 55460 lines containing [Jesus] using MB Instr_()
61 ms   for finding 55460 lines containing [Jesus] using faster Instr_()

160 ms  for finding 44604 lines containing [Jesus ] using CRT strstr()
187 ms  for finding 44604 lines containing [Jesus ] using Masm32 find$()
149 ms  for finding 44604 lines containing [Jesus ] using MB Instr_()
60 ms   for finding 44604 lines containing [Jesus ] using faster Instr_()

164 ms  for finding 11328 lines containing [Jesus C] using CRT strstr()
186 ms  for finding 11328 lines containing [Jesus C] using Masm32 find$()
150 ms  for finding 11328 lines containing [Jesus C] using MB Instr_()
62 ms   for finding 11328 lines containing [Jesus C] using faster Instr_()

581 ms total for faster Instr_(), 1087 ms for CRT, crt:mb=1.87
318     bytes for InstrJJw
Title: Re: Instr() timings
Post by: jj2007 on September 23, 2015, 09:25:34 PM
Quote from: TWell on September 23, 2015, 08:43:27 PM
@jj2007
Can test that with strstr from pocrt.dll too?

Here it is - note that in order to see Pelles C results, pocrt.dll must be in the path:
33979 lines found
Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz
206 ms  for finding 1465185 lines containing [the] using CRT strstr()
285 ms  for finding 1465185 lines containing [the] using Masm32 find$()
252 ms  for finding 1465185 lines containing [the] using PellesC strstr
157 ms  for finding 1489830 lines containing [the] using MB Instr_()
111 ms  for finding 1489830 lines containing [the] using faster Instr_()

467 ms  for finding 418276 lines containing [ther] using CRT strstr()
491 ms  for finding 418276 lines containing [ther] using Masm32 find$()
648 ms  for finding 418276 lines containing [ther] using PellesC strstr
359 ms  for finding 442232 lines containing [ther] using MB Instr_()
176 ms  for finding 442232 lines containing [ther] using faster Instr_()

510 ms  for finding 205004 lines containing [there] using CRT strstr()
523 ms  for finding 205004 lines containing [there] using Masm32 find$()
710 ms  for finding 205004 lines containing [there] using PellesC strstr
392 ms  for finding 233995 lines containing [there] using MB Instr_()
176 ms  for finding 233995 lines containing [there] using faster Instr_()

545 ms  for finding 42771 lines containing [theref] using CRT strstr()
523 ms  for finding 42771 lines containing [theref] using Masm32 find$()
761 ms  for finding 42771 lines containing [theref] using PellesC strstr
419 ms  for finding 65402 lines containing [theref] using MB Instr_()
181 ms  for finding 65402 lines containing [theref] using faster Instr_()

542 ms  for finding 42665 lines containing [therefo] using CRT strstr()
525 ms  for finding 42665 lines containing [therefo] using Masm32 find$()
760 ms  for finding 42665 lines containing [therefo] using PellesC strstr
420 ms  for finding 65296 lines containing [therefo] using MB Instr_()
180 ms  for finding 65296 lines containing [therefo] using faster Instr_()

542 ms  for finding 42665 lines containing [therefor] using CRT strstr()
535 ms  for finding 42665 lines containing [therefor] using Masm32 find$()
761 ms  for finding 42665 lines containing [therefor] using PellesC strstr
420 ms  for finding 65296 lines containing [therefor] using MB Instr_()
181 ms  for finding 65296 lines containing [therefor] using faster Instr_()

548 ms  for finding 42665 lines containing [therefore] using CRT strstr()
536 ms  for finding 42665 lines containing [therefore] using Masm32 find$()
762 ms  for finding 42665 lines containing [therefore] using PellesC strstr
423 ms  for finding 65296 lines containing [therefore] using MB Instr_()
183 ms  for finding 65296 lines containing [therefore] using faster Instr_()

578 ms  for finding 42665 lines containing [therefore] using CRT strstr()
539 ms  for finding 42665 lines containing [therefore] using Masm32 find$()
762 ms  for finding 42665 lines containing [therefore] using PellesC strstr
423 ms  for finding 65296 lines containing [therefore] using MB Instr_()
183 ms  for finding 65296 lines containing [therefore] using faster Instr_()

1371 ms total for faster Instr_(), 3938 ms for CRT, crt:mb=2.87
364     bytes for InstrJJw


Line counts differ in this version:
578 ms  for finding 42665 lines containing [therefore] using CRT strstr()
183 ms  for finding 65296 lines containing [therefore] using faster Instr_()


The reason is that the new algo has the IntelliSense option, as in MasmBasic Instr_() (http://www.webalice.it/jj2006/MasmBasicQuickReference.htm#Mb1153). It allows to search for e.g. "therefore" as in the test run above, and to catch Therefore and therefore (but not tHereFore etc). This is evidently an important option for text searches.
Title: Re: Instr() timings
Post by: zedd151 on September 23, 2015, 11:02:32 PM

33979 lines found
Genuine Intel(R) CPU           T2060  @ 1.60GHz
351 ms  for finding 1465185 lines containing [the] using CRT strstr()
529 ms  for finding 1465185 lines containing [the] using Masm32 find$()
437 ms  for finding 1465185 lines containing [the] using PellesC strstr
324 ms  for finding 1489830 lines containing [the] using MB Instr_()
226 ms  for finding 1489830 lines containing [the] using faster Instr_()

757 ms  for finding 418276 lines containing [ther] using CRT strstr()
829 ms  for finding 418276 lines containing [ther] using Masm32 find$()
1104 ms for finding 418276 lines containing [ther] using PellesC strstr
796 ms  for finding 442232 lines containing [ther] using MB Instr_()
373 ms  for finding 442232 lines containing [ther] using faster Instr_()

813 ms  for finding 205004 lines containing [there] using CRT strstr()
888 ms  for finding 205004 lines containing [there] using Masm32 find$()
1197 ms for finding 205004 lines containing [there] using PellesC strstr
866 ms  for finding 233995 lines containing [there] using MB Instr_()
393 ms  for finding 233995 lines containing [there] using faster Instr_()

868 ms  for finding 42771 lines containing [theref] using CRT strstr()
894 ms  for finding 42771 lines containing [theref] using Masm32 find$()
1283 ms for finding 42771 lines containing [theref] using PellesC strstr
925 ms  for finding 65402 lines containing [theref] using MB Instr_()
407 ms  for finding 65402 lines containing [theref] using faster Instr_()

859 ms  for finding 42665 lines containing [therefo] using CRT strstr()
899 ms  for finding 42665 lines containing [therefo] using Masm32 find$()
1280 ms for finding 42665 lines containing [therefo] using PellesC strstr
916 ms  for finding 65296 lines containing [therefo] using MB Instr_()
407 ms  for finding 65296 lines containing [therefo] using faster Instr_()

867 ms  for finding 42665 lines containing [therefor] using CRT strstr()
901 ms  for finding 42665 lines containing [therefor] using Masm32 find$()
1285 ms for finding 42665 lines containing [therefor] using PellesC strstr
921 ms  for finding 65296 lines containing [therefor] using MB Instr_()
411 ms  for finding 65296 lines containing [therefor] using faster Instr_()

872 ms  for finding 42665 lines containing [therefore] using CRT strstr()
917 ms  for finding 42665 lines containing [therefore] using Masm32 find$()
1289 ms for finding 42665 lines containing [therefore] using PellesC strstr
930 ms  for finding 65296 lines containing [therefore] using MB Instr_()
407 ms  for finding 65296 lines containing [therefore] using faster Instr_()

867 ms  for finding 42665 lines containing [therefore] using CRT strstr()
911 ms  for finding 42665 lines containing [therefore] using Masm32 find$()
1290 ms for finding 42665 lines containing [therefore] using PellesC strstr
930 ms  for finding 65296 lines containing [therefore] using MB Instr_()
407 ms  for finding 65296 lines containing [therefore] using faster Instr_()

3031 ms total for faster Instr_(), 6254 ms for CRT, crt:mb=2.06
364     bytes for InstrJJw
Title: Re: Instr() timings
Post by: dedndave on September 24, 2015, 04:35:49 AM
prescott w/htt
Intel(R) Pentium(R) 4 CPU 3.00GHz
303 ms  for finding 1465185 lines containing [the] using CRT strstr()
469 ms  for finding 1465185 lines containing [the] using Masm32 find$()
259 ms  for finding 1489830 lines containing [the] using MB Instr_()
232 ms  for finding 1489830 lines containing [the] using faster Instr_()

737 ms  for finding 418276 lines containing [ther] using CRT strstr()
792 ms  for finding 418276 lines containing [ther] using Masm32 find$()
617 ms  for finding 442232 lines containing [ther] using MB Instr_()
451 ms  for finding 442232 lines containing [ther] using faster Instr_()

810 ms  for finding 205004 lines containing [there] using CRT strstr()
862 ms  for finding 205004 lines containing [there] using Masm32 find$()
669 ms  for finding 233995 lines containing [there] using MB Instr_()
471 ms  for finding 233995 lines containing [there] using faster Instr_()

857 ms  for finding 42771 lines containing [theref] using CRT strstr()
856 ms  for finding 42771 lines containing [theref] using Masm32 find$()
715 ms  for finding 65402 lines containing [theref] using MB Instr_()
490 ms  for finding 65402 lines containing [theref] using faster Instr_()

859 ms  for finding 42665 lines containing [therefo] using CRT strstr()
869 ms  for finding 42665 lines containing [therefo] using Masm32 find$()
717 ms  for finding 65296 lines containing [therefo] using MB Instr_()
513 ms  for finding 65296 lines containing [therefo] using faster Instr_()

858 ms  for finding 42665 lines containing [therefor] using CRT strstr()
863 ms  for finding 42665 lines containing [therefor] using Masm32 find$()
717 ms  for finding 65296 lines containing [therefor] using MB Instr_()
491 ms  for finding 65296 lines containing [therefor] using faster Instr_()

860 ms  for finding 42665 lines containing [therefore] using CRT strstr()
877 ms  for finding 42665 lines containing [therefore] using Masm32 find$()
716 ms  for finding 65296 lines containing [therefore] using MB Instr_()
492 ms  for finding 65296 lines containing [therefore] using faster Instr_()

855 ms  for finding 42665 lines containing [therefore] using CRT strstr()
880 ms  for finding 42665 lines containing [therefore] using Masm32 find$()
715 ms  for finding 65296 lines containing [therefore] using MB Instr_()
494 ms  for finding 65296 lines containing [therefore] using faster Instr_()

3634 ms total for faster Instr_(), 6139 ms for CRT, crt:mb=1.69
Title: Re: Instr() timings
Post by: Siekmanski on September 24, 2015, 05:03:57 AM

Intel(R) Core(TM) i7-4930K CPU @ 3.40GHz
123 ms  for finding 1465185 lines containing [the] using CRT strstr()
196 ms  for finding 1465185 lines containing [the] using Masm32 find$()
105 ms  for finding 1489830 lines containing [the] using MB Instr_()
78 ms   for finding 1489830 lines containing [the] using faster Instr_()

306 ms  for finding 418276 lines containing [ther] using CRT strstr()
329 ms  for finding 418276 lines containing [ther] using Masm32 find$()
282 ms  for finding 442232 lines containing [ther] using MB Instr_()
135 ms  for finding 442232 lines containing [ther] using faster Instr_()

333 ms  for finding 205004 lines containing [there] using CRT strstr()
352 ms  for finding 205004 lines containing [there] using Masm32 find$()
309 ms  for finding 233995 lines containing [there] using MB Instr_()
140 ms  for finding 233995 lines containing [there] using faster Instr_()

356 ms  for finding 42771 lines containing [theref] using CRT strstr()
360 ms  for finding 42771 lines containing [theref] using Masm32 find$()
330 ms  for finding 65402 lines containing [theref] using MB Instr_()
149 ms  for finding 65402 lines containing [theref] using faster Instr_()

355 ms  for finding 42665 lines containing [therefo] using CRT strstr()
362 ms  for finding 42665 lines containing [therefo] using Masm32 find$()
302 ms  for finding 65296 lines containing [therefo] using MB Instr_()
145 ms  for finding 65296 lines containing [therefo] using faster Instr_()

367 ms  for finding 42665 lines containing [therefor] using CRT strstr()
357 ms  for finding 42665 lines containing [therefor] using Masm32 find$()
306 ms  for finding 65296 lines containing [therefor] using MB Instr_()
133 ms  for finding 65296 lines containing [therefor] using faster Instr_()

358 ms  for finding 42665 lines containing [therefore] using CRT strstr()
382 ms  for finding 42665 lines containing [therefore] using Masm32 find$()
325 ms  for finding 65296 lines containing [therefore] using MB Instr_()
131 ms  for finding 65296 lines containing [therefore] using faster Instr_()

356 ms  for finding 42665 lines containing [therefore] using CRT strstr()
362 ms  for finding 42665 lines containing [therefore] using Masm32 find$()
302 ms  for finding 65296 lines containing [therefore] using MB Instr_()
132 ms  for finding 65296 lines containing [therefore] using faster Instr_()

1043 ms total for faster Instr_(), 2554 ms for CRT, crt:mb=2.45
364     bytes for InstrJJw
Title: Re: Instr() timings
Post by: TWell on September 24, 2015, 07:24:03 PM
Test program with PellesC that use Bible.txt.
200 times 'Jesus Christ'
Result:load time: 11 ms
pocrt strstr
1284 ms 40200
msvcrt strstr
2003 ms 40200
MbInstr
2581 ms 40200
Press ENTER
What goes wrong?
Title: Re: Instr() timings
Post by: jj2007 on September 24, 2015, 10:20:25 PM
Quote from: TWell on September 24, 2015, 07:24:03 PMWhat goes wrong?

The timings look OK, but I'm surprised that you get 40200 lines where I get 49820 ::)
What is the size (in bytes) of your bible.txt?

The current MasmBasic Instr() is not particularly fast, roughly on par with CRT and Masm32 InString. Its strengths are the case-insensitive and full word options. The new one I am testing now will be about twice as fast but the two options will not be available.

331 ms  for finding 49820 lines containing [Jesus] using CRT strstr()
93 ms   for finding 49820 lines containing [Jesus] using InstrB
207 ms  for finding 49820 lines containing [Jesus] using PellesC strstr
274 ms  for finding 49820 lines containing [Jesus] using MB Instr_()
106 ms  for finding 49820 lines containing [Jesus] using faster Instr_()

331 ms  for finding 49820 lines containing [Jesus] using CRT strstr()
94 ms   for finding 49820 lines containing [Jesus] using InstrB
205 ms  for finding 49820 lines containing [Jesus] using PellesC strstr
271 ms  for finding 49820 lines containing [Jesus] using MB Instr_()
100 ms  for finding 49820 lines containing [Jesus] using faster Instr_()

332 ms  for finding 49820 lines containing [Jesus] using CRT strstr()
96 ms   for finding 49820 lines containing [Jesus] using InstrB
210 ms  for finding 49820 lines containing [Jesus] using PellesC strstr
272 ms  for finding 49820 lines containing [Jesus] using MB Instr_()
103 ms  for finding 49820 lines containing [Jesus] using faster Instr_()
Title: Re: Instr() timings
Post by: TWell on September 24, 2015, 11:40:33 PM
Bible.txt 4 397 206 bytes.
There is 201 'Jesus Christ'  and 2 'JESUS CHRIST'
I use
WindowsGrep 2.3 (http://www.wingrep.com/)
grepwin (http://sourceforge.net/projects/grepwin/)
too.
Bible.txt load time: 10 ms
counter: 200, search string: 'Jesus'
pocrt strstr    1389 ms 196200
msvcrt strstr   1846 ms 196200
MB MbInstr      2027 ms 196200

Bible.txt load time: 10 ms
counter: 200, search string: 'therefore'
pocrt strstr    5576 ms 163800
msvcrt strstr   3715 ms 163800
MB MbInstr      3196 ms 163800
Title: Re: Instr() timings
Post by: jj2007 on September 25, 2015, 02:04:03 AM
Quote from: TWell on September 24, 2015, 11:40:33 PM
Bible.txt 4 397 206 bytes.
There is 201 'Jesus Christ'  and 2 'JESUS CHRIST'

grepWin finds indeed 981 * Jesus. The MasmBasic equivalent is...
Print Str$("Jesus found %i times", Count(Cat$(FileRead$("Bible.txt")), "Jesus", 1))
... and it finds 981 matches, or 990 with option 1, i.e. case-insensitive.
Option 0 takes 8 ms, the case-insensitive search takes 11 ms, of which most is FileRead$().
Title: Re: Instr() timings
Post by: jj2007 on September 25, 2015, 09:40:58 PM
So now Instr_(Fast, main$, sub$, mode) has become part of the new MasmBasic version. (http://fast%20memset%20and%20instr()%20algos) Timings are competitive with the CRT:

Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz
326 ms  for finding 49820 lines containing [Jesus] using CRT strstr()
95 ms   for finding 49820 lines containing [Jesus] using Instr_(fast, ...)
290 ms  for finding 49820 lines containing [Jesus] using MB Instr_()
101 ms  for finding 49820 lines containing [Jesus] using InstrW()

556     ms for Instr_(Fast, pHaystack, pNeedle, mode), fast : normal=0.705
1804    ms for CRT strstr, crt : fast=3.24


In the end, I had to decide between a byte scanner (using pcmpeqb) and a word scanner (using pcmpeqw). The byte scanner won, although it is marginally slower, for the simple reason that it can handle single byte "needles". In case-sensitive mode, the new algo is 2...3 times faster than CRT strstr, depending mainly on the first byte of the substring.

Thanks for all the testing :icon14:
Title: Re: Instr() timings
Post by: TWell on September 26, 2015, 11:36:10 AM
load time: 8 ms
pocrt strstr    1117 ms 40200
msvcrt strstr   1833 ms 40200
MB InsJB         380 ms 40200
Title: Re: Instr() timings
Post by: jj2007 on September 30, 2015, 04:59:44 PM
Once more - a new version with slightly improved performance:
33979 lines found
Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz
24 ms   for finding 1834866 lines containing [] using CRT strstr()
27 ms   for finding 1834866 lines containing [] using Instr_(fast, ...)
23 ms   for finding 1834866 lines containing [] using PellesC strstr
0 ms    for finding 0 lines containing [] using Masm32 InString
266 ms  for finding 1834866 lines containing [] using MB Instr_()
30 ms   for finding 1834866 lines containing [] using InstrW()

149 ms  for finding 267624 lines containing [J] using CRT strstr()
60 ms   for finding 267624 lines containing [J] using Instr_(fast, ...)
150 ms  for finding 267624 lines containing [J] using PellesC strstr
276 ms  for finding 267624 lines containing [J] using Masm32 InString
245 ms  for finding 267624 lines containing [J] using MB Instr_()
241 ms  for finding 267624 lines containing [J] using InstrW()

258 ms  for finding 151848 lines containing [Je] using CRT strstr()
64 ms   for finding 151848 lines containing [Je] using Instr_(fast, ...)
159 ms  for finding 151848 lines containing [Je] using PellesC strstr
285 ms  for finding 151848 lines containing [Je] using Masm32 InString
218 ms  for finding 151848 lines containing [Je] using MB Instr_()
82 ms   for finding 151848 lines containing [Je] using InstrW()

267 ms  for finding 59886 lines containing [Jer] using CRT strstr()
66 ms   for finding 59886 lines containing [Jer] using Instr_(fast, ...)
164 ms  for finding 59886 lines containing [Jer] using PellesC strstr
289 ms  for finding 59886 lines containing [Jer] using Masm32 InString
221 ms  for finding 59886 lines containing [Jer] using MB Instr_()
84 ms   for finding 59886 lines containing [Jer] using InstrW()

274 ms  for finding 3942 lines containing [Jeri] using CRT strstr()
67 ms   for finding 3942 lines containing [Jeri] using Instr_(fast, ...)
170 ms  for finding 3942 lines containing [Jeri] using PellesC strstr
295 ms  for finding 3942 lines containing [Jeri] using Masm32 InString
229 ms  for finding 3942 lines containing [Jeri] using MB Instr_()
84 ms   for finding 3942 lines containing [Jeri] using InstrW()

272 ms  for finding 3186 lines containing [Jeric] using CRT strstr()
72 ms   for finding 3186 lines containing [Jeric] using Instr_(fast, ...)
172 ms  for finding 3186 lines containing [Jeric] using PellesC strstr
292 ms  for finding 3186 lines containing [Jeric] using Masm32 InString
227 ms  for finding 3186 lines containing [Jeric] using MB Instr_()
85 ms   for finding 3186 lines containing [Jeric] using InstrW()

356     ms for Instr_(Fast, ...), fast : normal=0.587
606     ms total for InsW
1244    ms for CRT strstr, crt : fast=3.49


IMHO it can't get much faster, but of course, the Boyer-Moore brigade has not yet shown up ;)

P.S.: If you extract it to the folder where the bible.txt sits, it won't download it again.
Title: Re: Instr() timings
Post by: dedndave on September 30, 2015, 07:10:43 PM
prescott w/htt
33979 lines found
Intel(R) Pentium(R) 4 CPU 3.00GHz
58 ms   for finding 1834866 lines containing [] using CRT strstr()
60 ms   for finding 1834866 lines containing [] using Instr_(fast, ...)
0 ms    for finding 0 lines containing [] using Masm32 InString
583 ms  for finding 1834866 lines containing [] using MB Instr_()
92 ms   for finding 1834866 lines containing [] using InstrW()

282 ms  for finding 267624 lines containing [J] using CRT strstr()
170 ms  for finding 267624 lines containing [J] using Instr_(fast, ...)
503 ms  for finding 267624 lines containing [J] using Masm32 InString
549 ms  for finding 267624 lines containing [J] using MB Instr_()
519 ms  for finding 267624 lines containing [J] using InstrW()

426 ms  for finding 151848 lines containing [Je] using CRT strstr()
175 ms  for finding 151848 lines containing [Je] using Instr_(fast, ...)
516 ms  for finding 151848 lines containing [Je] using Masm32 InString
477 ms  for finding 151848 lines containing [Je] using MB Instr_()
246 ms  for finding 151848 lines containing [Je] using InstrW()

436 ms  for finding 59886 lines containing [Jer] using CRT strstr()
182 ms  for finding 59886 lines containing [Jer] using Instr_(fast, ...)
524 ms  for finding 59886 lines containing [Jer] using Masm32 InString
497 ms  for finding 59886 lines containing [Jer] using MB Instr_()
259 ms  for finding 59886 lines containing [Jer] using InstrW()

443 ms  for finding 3942 lines containing [Jeri] using CRT strstr()
184 ms  for finding 3942 lines containing [Jeri] using Instr_(fast, ...)
552 ms  for finding 3942 lines containing [Jeri] using Masm32 InString
507 ms  for finding 3942 lines containing [Jeri] using MB Instr_()
258 ms  for finding 3942 lines containing [Jeri] using InstrW()

444 ms  for finding 3186 lines containing [Jeric] using CRT strstr()
184 ms  for finding 3186 lines containing [Jeric] using Instr_(fast, ...)
528 ms  for finding 3186 lines containing [Jeric] using Masm32 InString
512 ms  for finding 3186 lines containing [Jeric] using MB Instr_()
262 ms  for finding 3186 lines containing [Jeric] using InstrW()

955     ms for Instr_(Fast, ...), fast : normal=0.584
1636    ms total for InsW
2089    ms for CRT strstr, crt : fast=2.19
Title: Re: Instr() timings
Post by: Siekmanski on September 30, 2015, 09:13:23 PM

33979 lines found
Intel(R) Core(TM) i7-4930K CPU @ 3.40GHz
37 ms   for finding 1834866 lines containing [] using CRT strstr()
25 ms   for finding 1834866 lines containing [] using Instr_(fast, ...)
0 ms    for finding 0 lines containing [] using Masm32 InString
228 ms  for finding 1834866 lines containing [] using MB Instr_()
26 ms   for finding 1834866 lines containing [] using InstrW()

128 ms  for finding 267624 lines containing [J] using CRT strstr()
56 ms   for finding 267624 lines containing [J] using Instr_(fast, ...)
241 ms  for finding 267624 lines containing [J] using Masm32 InString
214 ms  for finding 267624 lines containing [J] using MB Instr_()
211 ms  for finding 267624 lines containing [J] using InstrW()

173 ms  for finding 151848 lines containing [Je] using CRT strstr()
60 ms   for finding 151848 lines containing [Je] using Instr_(fast, ...)
249 ms  for finding 151848 lines containing [Je] using Masm32 InString
188 ms  for finding 151848 lines containing [Je] using MB Instr_()
70 ms   for finding 151848 lines containing [Je] using InstrW()

178 ms  for finding 59886 lines containing [Jer] using CRT strstr()
62 ms   for finding 59886 lines containing [Jer] using Instr_(fast, ...)
254 ms  for finding 59886 lines containing [Jer] using Masm32 InString
195 ms  for finding 59886 lines containing [Jer] using MB Instr_()
73 ms   for finding 59886 lines containing [Jer] using InstrW()

183 ms  for finding 3942 lines containing [Jeri] using CRT strstr()
62 ms   for finding 3942 lines containing [Jeri] using Instr_(fast, ...)
257 ms  for finding 3942 lines containing [Jeri] using Masm32 InString
200 ms  for finding 3942 lines containing [Jeri] using MB Instr_()
74 ms   for finding 3942 lines containing [Jeri] using InstrW()

183 ms  for finding 3186 lines containing [Jeric] using CRT strstr()
62 ms   for finding 3186 lines containing [Jeric] using Instr_(fast, ...)
257 ms  for finding 3186 lines containing [Jeric] using Masm32 InString
201 ms  for finding 3186 lines containing [Jeric] using MB Instr_()
74 ms   for finding 3186 lines containing [Jeric] using InstrW()

327     ms for Instr_(Fast, ...), fast : normal=0.619
528     ms total for InsW
882     ms for CRT strstr, crt : fast=2.70

391     bytes for InstrJJb
384     bytes for InsJb16
Title: Re: Instr() timings
Post by: TWell on September 30, 2015, 09:26:26 PM
pocrt.dll version 8 for testing and reference for system msvcrt.dll.
How msvcrt.dll differs between OS versions?
Title: Re: Instr() timings
Post by: dedndave on September 30, 2015, 09:28:59 PM
recent OS versions have added a lot of extra code, trying to overcome security issues (buffer overflow)
from what i understand, they are much slower, too
Title: Re: Instr() timings
Post by: TWell on September 30, 2015, 09:31:33 PM
Can you run jj2007 test with pocrt.dll too?
Title: Re: Instr() timings
Post by: jj2007 on September 30, 2015, 11:26:36 PM
Quote from: TWell on September 30, 2015, 09:31:33 PM
Can you run jj2007 test with pocrt.dll too?

Here it is. The dll must be in the same folder.

Core i5:
384     ms for Instr_(Fast, ...), fast : normal=0.625
614     ms total for InstrWord
1265    ms for CRT strstr, crt : fast=3.29
853     ms total for Pelles C
1434    ms total for Masm32


Quote from: TWell on September 30, 2015, 07:42:11 PM
For strings here (http://www.dmi.unict.it/~faro/smart/references.php).
Lots of test files too.

Nice site indeed. But it seems there has been little progress over the years. BM/Horspool is not so fast for short needles, hashing involves a lot of overhead, ...
Title: Re: Instr() timings
Post by: TWell on October 01, 2015, 05:09:08 AM
In old XP it dont show pocrt.dll results even that dll is in same folder?
33979 lines found
Intel(R) Celeron(R) CPU          550  @ 2.00GHz
44 ms   for finding 1834866 lines containing [] using CRT strstr()
49 ms   for finding 1834866 lines containing [] using Instr_(fast, ...)
0 ms    for finding 0 lines containing [] using Masm32 InString
937 ms  for finding 1834866 lines containing [] using MB Instr_()
47 ms   for finding 1834866 lines containing [] using InstrW()

272 ms  for finding 267624 lines containing [J] using CRT strstr()
122 ms  for finding 267624 lines containing [J] using Instr_(fast, ...)
493 ms  for finding 267624 lines containing [J] using Masm32 InString
857 ms  for finding 267624 lines containing [J] using MB Instr_()
829 ms  for finding 267624 lines containing [J] using InstrW()

331 ms  for finding 151848 lines containing [Je] using CRT strstr()
121 ms  for finding 151848 lines containing [Je] using Instr_(fast, ...)
500 ms  for finding 151848 lines containing [Je] using Masm32 InString
357 ms  for finding 151848 lines containing [Je] using MB Instr_()
183 ms  for finding 151848 lines containing [Je] using InstrW()

336 ms  for finding 59886 lines containing [Jer] using CRT strstr()
132 ms  for finding 59886 lines containing [Jer] using Instr_(fast, ...)
509 ms  for finding 59886 lines containing [Jer] using Masm32 InString
375 ms  for finding 59886 lines containing [Jer] using MB Instr_()
183 ms  for finding 59886 lines containing [Jer] using InstrW()

335 ms  for finding 3942 lines containing [Jeri] using CRT strstr()
136 ms  for finding 3942 lines containing [Jeri] using Instr_(fast, ...)
532 ms  for finding 3942 lines containing [Jeri] using Masm32 InString
383 ms  for finding 3942 lines containing [Jeri] using MB Instr_()
185 ms  for finding 3942 lines containing [Jeri] using InstrW()

348 ms  for finding 3186 lines containing [Jeric] using CRT strstr()
128 ms  for finding 3186 lines containing [Jeric] using Instr_(fast, ...)
512 ms  for finding 3186 lines containing [Jeric] using Masm32 InString
385 ms  for finding 3186 lines containing [Jeric] using MB Instr_()
183 ms  for finding 3186 lines containing [Jeric] using InstrW()

688     ms for Instr_(Fast, ...), fast : normal=0.427
1610    ms total for InstrWord
1666    ms for CRT strstr, crt : fast=2.42
0       ms total for Pelles C
2546    ms total for Masm32

391     bytes for InstrJJb
382     bytes for InsJb16
-- hit any key --
Title: Re: Instr() timings
Post by: jj2007 on October 01, 2015, 06:21:30 AM
Quote from: TWell on October 01, 2015, 05:09:08 AM
In old XP it dont show pocrt.dll results even that dll is in same folder?

This is the relevant code:

  .if Exist("pocrt.dll")
      inc hasPellesC
      Dll "pocrt"
      Declare strstrP, C:2 Alias "strstr"
  .endif


Try starting the exe from the commandline. Sometimes the current folder is not the exe's folder.
Title: Re: Instr() timings
Post by: TWell on October 01, 2015, 02:54:03 PM
According FileMon.exe and Depends.exe those don't even try to open that dll in XP.
Any another XP user to try those InstrFastArray.exe's?
Dll is in Replay #27 here (http://masm32.com/board/index.php?topic=4631.msg50060#msg50060)
Title: Re: Instr() timings
Post by: dedndave on October 01, 2015, 04:04:44 PM
maybe it has to do with the file being "blocked" (execution policy)
right-click on the DLL, Properties, then Unblock, then Apply

prescott w/htt
Intel(R) Pentium(R) 4 CPU 3.00GHz
55 ms   for finding 1834866 lines containing [] using CRT strstr()
60 ms   for finding 1834866 lines containing [] using Instr_(fast, ...)
54 ms   for finding 1834866 lines containing [] using PellesC strstr
0 ms    for finding 0 lines containing [] using Masm32 InString
575 ms  for finding 1834866 lines containing [] using MB Instr_()
87 ms   for finding 1834866 lines containing [] using InstrW()

276 ms  for finding 267624 lines containing [J] using CRT strstr()
163 ms  for finding 267624 lines containing [J] using Instr_(fast, ...)
285 ms  for finding 267624 lines containing [J] using PellesC strstr
491 ms  for finding 267624 lines containing [J] using Masm32 InString
542 ms  for finding 267624 lines containing [J] using MB Instr_()
509 ms  for finding 267624 lines containing [J] using InstrW()

427 ms  for finding 151848 lines containing [Je] using CRT strstr()
175 ms  for finding 151848 lines containing [Je] using Instr_(fast, ...)
293 ms  for finding 151848 lines containing [Je] using PellesC strstr
511 ms  for finding 151848 lines containing [Je] using Masm32 InString
470 ms  for finding 151848 lines containing [Je] using MB Instr_()
243 ms  for finding 151848 lines containing [Je] using InstrW()

432 ms  for finding 59886 lines containing [Jer] using CRT strstr()
178 ms  for finding 59886 lines containing [Jer] using Instr_(fast, ...)
304 ms  for finding 59886 lines containing [Jer] using PellesC strstr
520 ms  for finding 59886 lines containing [Jer] using Masm32 InString
484 ms  for finding 59886 lines containing [Jer] using MB Instr_()
254 ms  for finding 59886 lines containing [Jer] using InstrW()

454 ms  for finding 3942 lines containing [Jeri] using CRT strstr()
179 ms  for finding 3942 lines containing [Jeri] using Instr_(fast, ...)
324 ms  for finding 3942 lines containing [Jeri] using PellesC strstr
532 ms  for finding 3942 lines containing [Jeri] using Masm32 InString
499 ms  for finding 3942 lines containing [Jeri] using MB Instr_()
256 ms  for finding 3942 lines containing [Jeri] using InstrW()

439 ms  for finding 3186 lines containing [Jeric] using CRT strstr()
183 ms  for finding 3186 lines containing [Jeric] using Instr_(fast, ...)
315 ms  for finding 3186 lines containing [Jeric] using PellesC strstr
518 ms  for finding 3186 lines containing [Jeric] using Masm32 InString
504 ms  for finding 3186 lines containing [Jeric] using MB Instr_()
255 ms  for finding 3186 lines containing [Jeric] using InstrW()

938     ms for Instr_(Fast, ...), fast : normal=0.585
1604    ms total for InstrWord
2083    ms for CRT strstr, crt : fast=2.22
1575    ms total for Pelles C
2572    ms total for Masm32
Title: Re: Instr() timings
Post by: dedndave on October 01, 2015, 04:09:07 PM
there's a little trick to that....

unblock the zip file before unzipping it
then, all the unzipped files are unblocked   :P