I have put all of the viable utoa style algos into this benchmark, Ray original that returns a pointer to the start of the characters, Paul Dixons version, Brethren's modified vrsion, Lingo's mod on Pauls algo and a modified version of Rays algo just to make sure I had done justice to it timing wise. The MSVCRT version is there for comparison. I modified Lingo's version using his suggestion to balance the CALL RET pairing which slightly slowed it down but it is still a fast algo.
With the shorter algo, brethren's has the legs, with the two long versions I get identical times between Pauls original and Lingo's mod.
These are the results I am getting on my dev Core2 quad.
Intel(R) Core(TM)2 Quad CPU Q9650 @ 3.00GHz
Results 8 pass average
timing Ray original utoa 234 ms
timing Paul Dixon utoa_ex 78 ms
timing brethren utoa2 172 ms
timing Lingo utoa_ex 78 ms
timing msvc ustr$ 390 ms
timing Ray modified utoa3 234 ms
I would be interested in seeing timing differences on different hardware.
These are the timings on my old timers.
Genuine Intel(R) CPU 3.80GHz
Results 8 pass average
timing Ray original utoa 360 ms
timing Paul Dixon utoa_ex 125 ms
timing brethren utoa2 265 ms
timing Lingo utoa_ex 125 ms
timing msvc ustr$ 1418 ms
timing Ray modified utoa3 360 ms
Intel(R) Pentium(R) 4 CPU 2.80GHz
Results 8 pass average
timing Ray original utoa 1123 ms
timing Paul Dixon utoa_ex 316 ms
timing brethren utoa2 593 ms
timing Lingo utoa_ex 328 ms
timing msvc ustr$ 2017 ms
timing Ray modified utoa3 734 ms
Intel(R) Celeron(TM) CPU 1200MHz
Results 8 pass average
timing Ray original utoa 920 ms
timing Paul Dixon utoa_ex 380 ms
timing brethren utoa2 613 ms
timing Lingo utoa_ex 368 ms
timing msvc ustr$ 2686 ms
timing Ray modified utoa3 831 ms
prescott w/htt
Intel(R) Pentium(R) 4 CPU 3.00GHz
Results 8 pass average
timing Ray original utoa 482 ms
timing Paul Dixon utoa_ex 177 ms
timing brethren utoa2 367 ms
timing Lingo utoa_ex 173 ms
timing msvc ustr$ 1761 ms
timing Ray modified utoa3 470 ms
naw - when you get this one thoroughly tested, we will pop a new algo on you :P
Might get to a few systems, here's the older Netbook
Intel(R) Atom(TM) CPU N270 @ 1.60GHz
Results 8 pass average
timing Ray original utoa 1275 ms
timing Paul Dixon utoa_ex 536 ms
timing brethren utoa2 920 ms
timing Lingo utoa_ex 542 ms
timing msvc ustr$ 3095 ms
timing Ray modified utoa3 1429 ms
Old dual Celeron/Mendocino
Results 8 pass average
timing Ray original utoa 2800 ms
timing Paul Dixon utoa_ex 1240 ms
timing brethren utoa2 1875 ms
timing Lingo utoa_ex 1113 ms
timing msvc ustr$ 14712 ms
timing Ray modified utoa3 2533 ms
Intel(R) Core(TM)2 Duo CPU E8500 @ 3.16GHz
Results 8 pass average
timing Ray original utoa 234 ms
timing Paul Dixon utoa_ex 78 ms
timing brethren utoa2 156 ms
timing Lingo utoa_ex 62 ms
timing msvc ustr$ 374 ms
timing Ray modified utoa3 234 ms
AMD Sempron(tm) Processor 3100+
Results 8 pass average
timing Ray original utoa 556 ms
timing Paul Dixon utoa_ex 160 ms
timing brethren utoa2 332 ms
timing Lingo utoa_ex 170 ms
timing msvc ustr$ 1851 ms
timing Ray modified utoa3 550 ms
Oh and I found out why the version info was showing.... I used your created object file.... Looks like I'll have to work out how to write my own with 6.15 ::)
Intel(R) Core(TM)2 CPU 6600 @ 2.40GHz
Results 8 pass average
timing Ray original utoa 306 ms
timing Paul Dixon utoa_ex 171 ms
timing brethren utoa2 220 ms
timing Lingo utoa_ex 165 ms
timing msvc ustr$ 711 ms
timing Ray modified utoa3 296 ms
I wonder, why MS did not use lingo algo than using their existing one? That was slow, but nevermind, I can use it as a weapon for my software company against HLL :green
AMD Turion(tm) 64 X2 Mobile Technology TL-52
Results 8 pass average
timing Ray original utoa 613 ms
timing Paul Dixon utoa_ex 187 ms
timing brethren utoa2 375 ms
timing Lingo utoa_ex 185 ms
timing msvc ustr$ 2052 ms
timing Ray modified utoa3 617 ms
Hi,
P-MMX Win98.
Results 8 pass average
timing Ray original utoa 13785 ms
timing Paul Dixon utoa_ex 9154 ms
timing brethren utoa2 9237 ms
timing Lingo utoa_ex 8940 ms
timing msvc ustr$ 42941 ms
timing Ray modified utoa3 13943 ms
P-III Win2k
Results 8 pass average
timing Ray original utoa 1523 ms
timing Paul Dixon utoa_ex 678 ms
timing brethren utoa2 1021 ms
timing Lingo utoa_ex 598 ms
timing msvc ustr$ 4445 ms
timing Ray modified utoa3 1381 ms
Cheers,
Steve N.
Results for a 500MHz P3 (the blocks were the ASCII characters 1, 1, 2, and 3):
Results 8 pass average
timing Ray original utoa 2556 ms
timing Paul Dixon utoa_ex 1142 ms
timing brethren utoa2 1711 ms
timing Lingo utoa_ex 1017 ms
timing msvc ustr$ 7445 ms
timing Ray modified utoa3 2313 ms
Intel(R) Pentium(R) Dual CPU E2160 @ 1.80GHz
Results 8 pass average
timing Ray original utoa 377 ms
timing Paul Dixon utoa_ex 125 ms
timing brethren utoa2 265 ms
timing Lingo utoa_ex 127 ms
timing msvc ustr$ 921 ms
timing Ray modified utoa3 375 ms
AMD Phenom II X4 970 @ 3.5 GHz (stock speed).
Results 8 pass average
timing Ray original utoa 263 ms
timing Paul Dixon utoa_ex 83 ms
timing brethren utoa2 144 ms
timing Lingo utoa_ex 80 ms
timing msvc ustr$ 633 ms
timing Ray modified utoa3 257 ms
I think that is correct; the GUI ran and I just copied the figures. I'm assuming they are ms.
Win 7 chokes and sometimes says "Not Responding" though it is still running. I ran the test multiple times; I found it was sometimes slower on the first run after loading, even though it was not the first time it was loaded.
Best regards,
Robin.
Intel(R) Core(TM) i3 CPU 540 @ 3.07GHz
Results 8 pass average
timing Ray original utoa 250 ms
timing Paul Dixon utoa_ex 78 ms
timing brethren utoa2 158 ms
timing Lingo utoa_ex 62 ms
timing msvc ustr$ 419 ms
timing Ray modified utoa3 230 ms
Here it is :U
Intel(R) Celeron(R) M CPU 420 @ 1.60GHz
Results 8 pass average
timing Ray original utoa 607 ms
timing Paul Dixon utoa_ex 285 ms
timing brethren utoa2 437 ms
timing Lingo utoa_ex 281 ms
timing msvc ustr$ 1205 ms
timing Ray modified utoa3 578 ms