The attached program compares five cases: a random #bytes (0...1250) is requested...
a) from a ring buffer, not zeroed
b) from a ring buffer, zeroed using two methods
c) via HeapAlloc, not zeroed
d) via HeapAlloc, zeroed
Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz
9899 µs for circular buffer, not zeroed
88 ms for circular buffer, zeroed with stosb
72 ms for circular buffer, zeroed with movups
267 ms for HeapAlloc, generate_exceptions
453 ms for HeapAlloc, ZERO_MEMORY
10 ms for circular buffer, not zeroed
80 ms for circular buffer, zeroed with stosb
61 ms for circular buffer, zeroed with movups
260 ms for HeapAlloc, generate_exceptions
455 ms for HeapAlloc, ZERO_MEMORY
9927 µs for circular buffer, not zeroed
81 ms for circular buffer, zeroed with stosb
62 ms for circular buffer, zeroed with movups
265 ms for HeapAlloc, generate_exceptions
521 ms for HeapAlloc, ZERO_MEMORY
9923 µs for circular buffer, not zeroed
81 ms for circular buffer, zeroed with stosb
70 ms for circular buffer, zeroed with movups
337 ms for HeapAlloc, generate_exceptions
539 ms for HeapAlloc, ZERO_MEMORY
10 ms for circular buffer, not zeroed
80 ms for circular buffer, zeroed with stosb
60 ms for circular buffer, zeroed with movups
342 ms for HeapAlloc, generate_exceptions
541 ms for HeapAlloc, ZERO_MEMORY
Source attached. On my machine, the ring buffer is over a factor 7 faster.
Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
9560 µs for circular buffer, not zeroed
172 ms for circular buffer, zeroed with stosb
128 ms for circular buffer, zeroed with movups
276 ms for HeapAlloc, generate_exceptions
511 ms for HeapAlloc, ZERO_MEMORY
9716 µs for circular buffer, not zeroed
170 ms for circular buffer, zeroed with stosb
128 ms for circular buffer, zeroed with movups
276 ms for HeapAlloc, generate_exceptions
511 ms for HeapAlloc, ZERO_MEMORY
9691 µs for circular buffer, not zeroed
170 ms for circular buffer, zeroed with stosb
128 ms for circular buffer, zeroed with movups
288 ms for HeapAlloc, generate_exceptions
739 ms for HeapAlloc, ZERO_MEMORY
9656 µs for circular buffer, not zeroed
171 ms for circular buffer, zeroed with stosb
128 ms for circular buffer, zeroed with movups
416 ms for HeapAlloc, generate_exceptions
750 ms for HeapAlloc, ZERO_MEMORY
9733 µs for circular buffer, not zeroed
171 ms for circular buffer, zeroed with stosb
128 ms for circular buffer, zeroed with movups
415 ms for HeapAlloc, generate_exceptions
753 ms for HeapAlloc, ZERO_MEMORY
-- hit any key --
For what its worth...
Thanks :thumbsup:
AMD Ryzen 5 3400G with Radeon Vega Graphics
5768 µs for circular buffer, not zeroed
47 ms for circular buffer, zeroed with stosb
30 ms for circular buffer, zeroed with movups
172 ms for HeapAlloc, generate_exceptions
270 ms for HeapAlloc, ZERO_MEMORY
5817 µs for circular buffer, not zeroed
47 ms for circular buffer, zeroed with stosb
30 ms for circular buffer, zeroed with movups
377 ms for HeapAlloc, generate_exceptions
612 ms for HeapAlloc, ZERO_MEMORY
5783 µs for circular buffer, not zeroed
47 ms for circular buffer, zeroed with stosb
30 ms for circular buffer, zeroed with movups
469 ms for HeapAlloc, generate_exceptions
597 ms for HeapAlloc, ZERO_MEMORY
5785 µs for circular buffer, not zeroed
47 ms for circular buffer, zeroed with stosb
30 ms for circular buffer, zeroed with movups
478 ms for HeapAlloc, generate_exceptions
598 ms for HeapAlloc, ZERO_MEMORY
5766 µs for circular buffer, not zeroed
47 ms for circular buffer, zeroed with stosb
30 ms for circular buffer, zeroed with movups
465 ms for HeapAlloc, generate_exceptions
597 ms for HeapAlloc, ZERO_MEMORY
-- hit any key --
Quote from: TimoVJL on February 25, 2022, 09:54:56 AM
AMD Ryzen 5 3400G with Radeon Vega Graphics
270 ms for HeapAlloc, ZERO_MEMORY
612 ms for HeapAlloc, ZERO_MEMORY
597 ms for HeapAlloc, ZERO_MEMORY
598 ms for HeapAlloc, ZERO_MEMORY
597 ms for HeapAlloc, ZERO_MEMORY
Interesting, that doubling after the first run :rolleyes:
Hi,
11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz
4916 µs for circular buffer, not zeroed
19 ms for circular buffer, zeroed with stosb
30 ms for circular buffer, zeroed with movups
131 ms for HeapAlloc, generate_exceptions
163 ms for HeapAlloc, ZERO_MEMORY
4152 µs for circular buffer, not zeroed
17 ms for circular buffer, zeroed with stosb
30 ms for circular buffer, zeroed with movups
327 ms for HeapAlloc, generate_exceptions
507 ms for HeapAlloc, ZERO_MEMORY
4360 µs for circular buffer, not zeroed
18 ms for circular buffer, zeroed with stosb
31 ms for circular buffer, zeroed with movups
391 ms for HeapAlloc, generate_exceptions
481 ms for HeapAlloc, ZERO_MEMORY
4187 µs for circular buffer, not zeroed
18 ms for circular buffer, zeroed with stosb
30 ms for circular buffer, zeroed with movups
388 ms for HeapAlloc, generate_exceptions
479 ms for HeapAlloc, ZERO_MEMORY
4171 µs for circular buffer, not zeroed
18 ms for circular buffer, zeroed with stosb
30 ms for circular buffer, zeroed with movups
393 ms for HeapAlloc, generate_exceptions
494 ms for HeapAlloc, ZERO_MEMORY
Wow, that's a fast machine, LiaoMi :thumbsup:
Interesting that your HeapAlloc times triple after the first run. On my Win7-64, there is only a slight increase by 20% :cool:
with fast SSD you should include this kinda buffer
buffer db 1024 dup ("0")
db 13,10,0
to compare speed vs diskspeed
fopen "zeros.txt"
fread
fclose
or maybe copy the compile time for including big buffer?
Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
10 ms for circular buffer, not zeroed
51 ms for circular buffer, zeroed with stosb
50 ms for circular buffer, zeroed with movups
225 ms for HeapAlloc, generate_exceptions
308 ms for HeapAlloc, ZERO_MEMORY
8564 µs for circular buffer, not zeroed
33 ms for circular buffer, zeroed with stosb
41 ms for circular buffer, zeroed with movups
378 ms for HeapAlloc, generate_exceptions
432 ms for HeapAlloc, ZERO_MEMORY
7319 µs for circular buffer, not zeroed
34 ms for circular buffer, zeroed with stosb
41 ms for circular buffer, zeroed with movups
291 ms for HeapAlloc, generate_exceptions
419 ms for HeapAlloc, ZERO_MEMORY
8376 µs for circular buffer, not zeroed
33 ms for circular buffer, zeroed with stosb
43 ms for circular buffer, zeroed with movups
293 ms for HeapAlloc, generate_exceptions
438 ms for HeapAlloc, ZERO_MEMORY
9726 µs for circular buffer, not zeroed
33 ms for circular buffer, zeroed with stosb
41 ms for circular buffer, zeroed with movups
290 ms for HeapAlloc, generate_exceptions
447 ms for HeapAlloc, ZERO_MEMORY
-- hit any key --
Hi,
Three systems. When first run on the i3-10110U, the "circular
buffer, not zeroed" showed a performance similar to the other
systems for two runs out of those run. After that, the performance
was about ~~300 times slower. I usually run your timing programs
once at the command line to see results, and then pipe results to a file.
Which means the fast "circular buffer, not zeroed" were not captured.
Intel(R) Pentium(R) M processor 1.70GHz
23 ms for circular buffer, not zeroed
719 ms for circular buffer, zeroed with stosb
213 ms for circular buffer, zeroed with movups
321 ms for HeapAlloc, generate_exceptions
1041 ms for HeapAlloc, ZERO_MEMORY
22 ms for circular buffer, not zeroed
724 ms for circular buffer, zeroed with stosb
211 ms for circular buffer, zeroed with movups
319 ms for HeapAlloc, generate_exceptions
1041 ms for HeapAlloc, ZERO_MEMORY
22 ms for circular buffer, not zeroed
723 ms for circular buffer, zeroed with stosb
215 ms for circular buffer, zeroed with movups
320 ms for HeapAlloc, generate_exceptions
1041 ms for HeapAlloc, ZERO_MEMORY
22 ms for circular buffer, not zeroed
722 ms for circular buffer, zeroed with stosb
210 ms for circular buffer, zeroed with movups
321 ms for HeapAlloc, generate_exceptions
1047 ms for HeapAlloc, ZERO_MEMORY
22 ms for circular buffer, not zeroed
731 ms for circular buffer, zeroed with stosb
215 ms for circular buffer, zeroed with movups
322 ms for HeapAlloc, generate_exceptions
1044 ms for HeapAlloc, ZERO_MEMORY
-- hit any key --
Intel(R) Core(TM) i3-4005U CPU @ 1.70GHz
16 ms for circular buffer, not zeroed
77 ms for circular buffer, zeroed with stosb
82 ms for circular buffer, zeroed with movups
381 ms for HeapAlloc, generate_exceptions
612 ms for HeapAlloc, ZERO_MEMORY
14 ms for circular buffer, not zeroed
77 ms for circular buffer, zeroed with stosb
80 ms for circular buffer, zeroed with movups
601 ms for HeapAlloc, generate_exceptions
762 ms for HeapAlloc, ZERO_MEMORY
15 ms for circular buffer, not zeroed
77 ms for circular buffer, zeroed with stosb
77 ms for circular buffer, zeroed with movups
389 ms for HeapAlloc, generate_exceptions
720 ms for HeapAlloc, ZERO_MEMORY
15 ms for circular buffer, not zeroed
78 ms for circular buffer, zeroed with stosb
82 ms for circular buffer, zeroed with movups
375 ms for HeapAlloc, generate_exceptions
711 ms for HeapAlloc, ZERO_MEMORY
15 ms for circular buffer, not zeroed
77 ms for circular buffer, zeroed with stosb
78 ms for circular buffer, zeroed with movups
375 ms for HeapAlloc, generate_exceptions
710 ms for HeapAlloc, ZERO_MEMORY
-- hit any key --
Intel(R) Core(TM) i3-10110U CPU @ 2.10GHz
8332 µs for circular buffer, not zeroed
26 ms for circular buffer, zeroed with stosb
35 ms for circular buffer, zeroed with movups
176 ms for HeapAlloc, generate_exceptions
223 ms for HeapAlloc, ZERO_MEMORY
6377 µs for circular buffer, not zeroed
25 ms for circular buffer, zeroed with stosb
32 ms for circular buffer, zeroed with movups
268 ms for HeapAlloc, generate_exceptions
340 ms for HeapAlloc, ZERO_MEMORY
6304 µs for circular buffer, not zeroed
25 ms for circular buffer, zeroed with stosb
31 ms for circular buffer, zeroed with movups
211 ms for HeapAlloc, generate_exceptions
321 ms for HeapAlloc, ZERO_MEMORY
6937 µs for circular buffer, not zeroed
25 ms for circular buffer, zeroed with stosb
34 ms for circular buffer, zeroed with movups
212 ms for HeapAlloc, generate_exceptions
315 ms for HeapAlloc, ZERO_MEMORY
6456 µs for circular buffer, not zeroed
25 ms for circular buffer, zeroed with stosb
35 ms for circular buffer, zeroed with movups
208 ms for HeapAlloc, generate_exceptions
319 ms for HeapAlloc, ZERO_MEMORY
-- hit any key --
Weird,
Steve
Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz
6777 µs for circular buffer, not zeroed
37 ms for circular buffer, zeroed with stosb
36 ms for circular buffer, zeroed with movups
198 ms for HeapAlloc, generate_exceptions
285 ms for HeapAlloc, ZERO_MEMORY
6051 µs for circular buffer, not zeroed
37 ms for circular buffer, zeroed with stosb
35 ms for circular buffer, zeroed with movups
290 ms for HeapAlloc, generate_exceptions
364 ms for HeapAlloc, ZERO_MEMORY
6631 µs for circular buffer, not zeroed
37 ms for circular buffer, zeroed with stosb
34 ms for circular buffer, zeroed with movups
192 ms for HeapAlloc, generate_exceptions
360 ms for HeapAlloc, ZERO_MEMORY
5904 µs for circular buffer, not zeroed
37 ms for circular buffer, zeroed with stosb
36 ms for circular buffer, zeroed with movups
194 ms for HeapAlloc, generate_exceptions
359 ms for HeapAlloc, ZERO_MEMORY
6573 µs for circular buffer, not zeroed
37 ms for circular buffer, zeroed with stosb
34 ms for circular buffer, zeroed with movups
197 ms for HeapAlloc, generate_exceptions
359 ms for HeapAlloc, ZERO_MEMORY
-- hit any key --
What is a circular buffer?
12th Gen Intel(R) Core(TM) i7-12700K
2966 µs for circular buffer, not zeroed
17 ms for circular buffer, zeroed with stosb
21 ms for circular buffer, zeroed with movups
118 ms for HeapAlloc, generate_exceptions
165 ms for HeapAlloc, ZERO_MEMORY
3863 µs for circular buffer, not zeroed
15 ms for circular buffer, zeroed with stosb
21 ms for circular buffer, zeroed with movups
233 ms for HeapAlloc, generate_exceptions
324 ms for HeapAlloc, ZERO_MEMORY
2861 µs for circular buffer, not zeroed
15 ms for circular buffer, zeroed with stosb
21 ms for circular buffer, zeroed with movups
231 ms for HeapAlloc, generate_exceptions
321 ms for HeapAlloc, ZERO_MEMORY
2886 µs for circular buffer, not zeroed
16 ms for circular buffer, zeroed with stosb
21 ms for circular buffer, zeroed with movups
232 ms for HeapAlloc, generate_exceptions
318 ms for HeapAlloc, ZERO_MEMORY
3967 µs for circular buffer, not zeroed
16 ms for circular buffer, zeroed with stosb
20 ms for circular buffer, zeroed with movups
233 ms for HeapAlloc, generate_exceptions
319 ms for HeapAlloc, ZERO_MEMORY
Quote from: InfiniteLoop on March 06, 2022, 06:38:11 PM
What is a circular buffer?
https://www.techopedia.com/definition/18301/ring-buffer
Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz win 10 64 bit
9939 µs for circular buffer, not zeroed
175 ms for circular buffer, zeroed with stosb
130 ms for circular buffer, zeroed with movups
333 ms for HeapAlloc, generate_exceptions
583 ms for HeapAlloc, ZERO_MEMORY
9763 µs for circular buffer, not zeroed
176 ms for circular buffer, zeroed with stosb
131 ms for circular buffer, zeroed with movups
539 ms for HeapAlloc, generate_exceptions
899 ms for HeapAlloc, ZERO_MEMORY
11 ms for circular buffer, not zeroed
193 ms for circular buffer, zeroed with stosb
169 ms for circular buffer, zeroed with movups
366 ms for HeapAlloc, generate_exceptions
725 ms for HeapAlloc, ZERO_MEMORY
9601 µs for circular buffer, not zeroed
173 ms for circular buffer, zeroed with stosb
129 ms for circular buffer, zeroed with movups
346 ms for HeapAlloc, generate_exceptions
749 ms for HeapAlloc, ZERO_MEMORY
9965 µs for circular buffer, not zeroed
173 ms for circular buffer, zeroed with stosb
129 ms for circular buffer, zeroed with movups
342 ms for HeapAlloc, generate_exceptions
717 ms for HeapAlloc, ZERO_MEMORY
-- hit any key --
AMD Ryzen 9 5950X 16-Core Processor
4382 µs for circular buffer, not zeroed
29 ms for circular buffer, zeroed with stosb
23 ms for circular buffer, zeroed with movups
137 ms for HeapAlloc, generate_exceptions
199 ms for HeapAlloc, ZERO_MEMORY
4398 µs for circular buffer, not zeroed
29 ms for circular buffer, zeroed with stosb
23 ms for circular buffer, zeroed with movups
201 ms for HeapAlloc, generate_exceptions
191 ms for HeapAlloc, ZERO_MEMORY
4414 µs for circular buffer, not zeroed
29 ms for circular buffer, zeroed with stosb
23 ms for circular buffer, zeroed with movups
105 ms for HeapAlloc, generate_exceptions
177 ms for HeapAlloc, ZERO_MEMORY
4576 µs for circular buffer, not zeroed
29 ms for circular buffer, zeroed with stosb
23 ms for circular buffer, zeroed with movups
104 ms for HeapAlloc, generate_exceptions
174 ms for HeapAlloc, ZERO_MEMORY
4460 µs for circular buffer, not zeroed
29 ms for circular buffer, zeroed with stosb
23 ms for circular buffer, zeroed with movups
107 ms for HeapAlloc, generate_exceptions
178 ms for HeapAlloc, ZERO_MEMORY
-- hit any key --
interesting .. sort of JJ .. but i presume youve hard coded the buffer into the data area ??
if this is the case then its fixed so for instance if youre generating up 8 to 10 million records in memory as i do on some
32 bit programs its no going to be an option
its obviously going to be more rapid as the op system does all the work with heap alloc
incidentally the creation of 10 million records [ linked list with index/ page indexes... paged 4096 records per page .. (because the list boxes are very limited 64k)
only takes about 50 seconds including the creation of the records ... which is a fast loop division type algo of about 120 lines
and has the advantage the on the next request you can simply destroy the heaps and start again
regards mikeb
Quote from: mikeburr on March 21, 2022, 09:50:07 PM
interesting .. sort of JJ .. but i presume youve hard coded the buffer into the data area ??
Yes.
include \masm32\MasmBasic\MasmBasic.inc
Init
Recall "\Masm32\include\Windows.inc", L$()
Dim out$(eax)
NanoTimer()
For_ ecx=0 To L$(?)-1
; uses the ringbuffer 3x26906 = 80706 times:
Let out$(ecx)=Str$("String #%i\t", ecx)+Left$(L$(ecx), 20)+" ... "+Right$(L$(ecx), 8)
Next
Inkey NanoTimer$(), Str$(" for creating %i strings", ecx)
Store "outstrings.txt", out$()
ShEx "outstrings.txt"
EndOfCode15 ms for creating 26902 strings
Show me how to do it faster with HeapAlloc.
:biggrin:
As the MAC user would say, mammory is mammory, wotz the big deal.
If you have a start address and know the length boundary of the memory, the MAC user with a slight spelling change is correct.
jj...... theres no way heap alloc is going to be as quick ...
regards mike b