mailing list of musl libc
 help / color / mirror / code / Atom feed
* [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
@ 2015-02-13 16:39 Denys Vlasenko
  2015-02-14 19:35 ` Rich Felker
  0 siblings, 1 reply; 18+ messages in thread
From: Denys Vlasenko @ 2015-02-13 16:39 UTC (permalink / raw)
  To: musl, Rich Felker; +Cc: Denys Vlasenko

Before this change, we were using it only for 15-byte blocks and smaller.
Measurements on Sandy Bridge CPU show that "rep stosq" setup time
is high enough to dominate speed of fills well above that size:

31 byte block: 3.279282 bytes/ns
30 byte block: 3.173499 bytes/ns
..
20 byte block: 2.116552 bytes/ns
..
16 byte block: 1.799337 bytes/ns
15 byte block: 5.074332 bytes/ns
14 byte block: 4.736135 bytes/ns
13 byte block: 4.398852 bytes/ns
12 byte block: 4.060479 bytes/ns
11 byte block: 3.723065 bytes/ns
10 byte block: 3.384556 bytes/ns
 9 byte block: 2.867677 bytes/ns
 8 byte block: 2.257382 bytes/ns
 7 byte block: 1.975605 bytes/ns
 6 byte block: 1.693388 bytes/ns
 5 byte block: 1.411434 bytes/ns
 4 byte block: 1.129147 bytes/ns
 3 byte block: 0.847030 bytes/ns
 2 byte block: 0.616008 bytes/ns
 1 byte block: 0.308069 bytes/ns

The patch does not increase the number of branches, but is able to handle
blocks up to 30 bytes. After the patch, timings are:

32 byte block: 3.384681 bytes/ns
31 byte block: 3.279118 bytes/ns
30 byte block: 10.128968 bytes/ns
29 byte block: 9.793798 bytes/ns
28 byte block: 9.456081 bytes/ns
27 byte block: 9.120555 bytes/ns
26 byte block: 8.782757 bytes/ns
25 byte block: 8.446654 bytes/ns
24 byte block: 8.109310 bytes/ns
23 byte block: 7.773063 bytes/ns
22 byte block: 7.434663 bytes/ns
21 byte block: 7.098760 bytes/ns
20 byte block: 6.760724 bytes/ns
19 byte block: 6.424286 bytes/ns
18 byte block: 6.086166 bytes/ns
17 byte block: 5.749441 bytes/ns
16 byte block: 5.411120 bytes/ns
15 byte block: 5.074234 bytes/ns
14 byte block: 3.947913 bytes/ns
13 byte block: 3.666643 bytes/ns
12 byte block: 3.384641 bytes/ns
11 byte block: 3.103178 bytes/ns
10 byte block: 2.821105 bytes/ns
 9 byte block: 2.539481 bytes/ns
 8 byte block: 2.257338 bytes/ns
 7 byte block: 1.975530 bytes/ns
 6 byte block: 1.693337 bytes/ns
 5 byte block: 1.411388 bytes/ns
 4 byte block: 1.129111 bytes/ns
 3 byte block: 0.846994 bytes/ns
 2 byte block: 0.615982 bytes/ns
 1 byte block: 0.308056 bytes/ns

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
---
 src/string/x86_64/memset.s | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/src/string/x86_64/memset.s b/src/string/x86_64/memset.s
index ea61687..81adbb2 100644
--- a/src/string/x86_64/memset.s
+++ b/src/string/x86_64/memset.s
@@ -2,13 +2,13 @@
 .type memset,@function
 memset:
 	movzbq %sil,%rax
-	cmp $16,%rdx
-	jb .Less_than_16
-
 	test %esi,%esi
 	jnz .L_widen_rax  # unlikely
 .L_widened:
 
+	cmp $31,%rdx
+	jb .Less_than_31
+
 	mov %rdi,%r8
 
 	test $7,%dil
@@ -43,7 +43,7 @@ memset:
 	jmp .L_aligned
 
 
-.Less_than_16:
+.Less_than_31:
 	test %edx,%edx
 	jz .L_ret
 
@@ -52,20 +52,18 @@ memset:
 	cmp $2,%edx
 	jbe .L_ret
 
-	mov %al,1(%rdi)
-	mov %al,-2(%rdi,%rdx)
-	# 32-bit imul has 3-4 cycles latency
-	imul $0x1010101,%eax
-	cmp $4,%edx
+	mov %ax,1(%rdi)
+	mov %ax,(-1-2)(%rdi,%rdx)
+	cmp $6,%edx
 	jbe .L_ret
 
-	mov %eax,(%rdi)
-	mov %eax,-4(%rdi,%rdx)
-	cmp $8,%edx
+	mov %eax,(1+2)(%rdi)
+	mov %eax,(-1-2-4)(%rdi,%rdx)
+	cmp $14,%edx
 	jbe .L_ret
 
-	mov %eax,4(%rdi)
-	mov %eax,-8(%rdi,%rdx)
+	mov %rax,(1+2+4)(%rdi)
+	mov %rax,(-1-2-4-8)(%rdi,%rdx)
 .L_ret:
 	mov %rdi,%rax
 	ret
-- 
1.8.1.4



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-13 16:39 [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long Denys Vlasenko
@ 2015-02-14 19:35 ` Rich Felker
  2015-02-15  4:06   ` Rich Felker
  0 siblings, 1 reply; 18+ messages in thread
From: Rich Felker @ 2015-02-14 19:35 UTC (permalink / raw)
  To: musl

On Fri, Feb 13, 2015 at 05:39:49PM +0100, Denys Vlasenko wrote:
> Before this change, we were using it only for 15-byte blocks and smaller.
> Measurements on Sandy Bridge CPU show that "rep stosq" setup time
> is high enough to dominate speed of fills well above that size:

I just ran some tests with the latest three patches, including this
one, and aside from the significant improvement for sizes 16-30 in
this last patch, each patch makes various sizes 2-15 mildly slower. A
few of them go from 9 cycles to 11 cycles average; most just increase
by 1 cycle. And all sizes 8 and under are still slower than the C
code.

I don't think these small sizes are a typical deliberate usage case
for memset, but even just a couple cycles is a large relative
difference at such sizes, and they could arise in generic code (think
something like qsort which uses memcpy possibly with small sizes, but
something using memset instead) and make a significant performance
difference.

The main change whose value I really question is the conditional
widen_rax. If the value isn't used until a few cycles after the imul
instruction, doing it unconditionally is probably cheaper than testing
and branching even when the branch is predictable.

Rich


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-14 19:35 ` Rich Felker
@ 2015-02-15  4:06   ` Rich Felker
  2015-02-15 14:07     ` Denys Vlasenko
  0 siblings, 1 reply; 18+ messages in thread
From: Rich Felker @ 2015-02-15  4:06 UTC (permalink / raw)
  To: musl

[-- Attachment #1: Type: text/plain, Size: 1772 bytes --]

On Sat, Feb 14, 2015 at 02:35:33PM -0500, Rich Felker wrote:
> On Fri, Feb 13, 2015 at 05:39:49PM +0100, Denys Vlasenko wrote:
> > Before this change, we were using it only for 15-byte blocks and smaller.
> > Measurements on Sandy Bridge CPU show that "rep stosq" setup time
> > is high enough to dominate speed of fills well above that size:
> 
> I just ran some tests with the latest three patches, including this
> one, and aside from the significant improvement for sizes 16-30 in
> this last patch, each patch makes various sizes 2-15 mildly slower. A
> few of them go from 9 cycles to 11 cycles average; most just increase
> by 1 cycle. And all sizes 8 and under are still slower than the C
> code.
> 
> I don't think these small sizes are a typical deliberate usage case
> for memset, but even just a couple cycles is a large relative
> difference at such sizes, and they could arise in generic code (think
> something like qsort which uses memcpy possibly with small sizes, but
> something using memset instead) and make a significant performance
> difference.
> 
> The main change whose value I really question is the conditional
> widen_rax. If the value isn't used until a few cycles after the imul
> instruction, doing it unconditionally is probably cheaper than testing
> and branching even when the branch is predictable.

To elaborate, simply replacing the unconditional imul with an
unconditional xor %eax,%eax in my best variant so far, I was only able
to save one cycle. So I don't see any way a test, branch, and
conditional imul could be less expensive than the unconditional imul.

I'm attaching my current draft based on the ideas so far in this
thread. See how it compares to your version(s) in the timing tests
you're using/on your hardware.

Rich

[-- Attachment #2: my2.s --]
[-- Type: text/plain, Size: 1070 bytes --]

.global memset
.type memset,@function
memset:
	movzbq %sil,%rax
	mov $0x101010101010101,%r8
	imul %r8,%rax

	lea -1(%rdx),%rcx
	cmp $126,%rcx
	jae 2f

	mov %sil,(%rdi)
	mov %sil,-1(%rdi,%rdx)
	cmp $2,%edx
	jbe 1f

	mov %ax,1(%rdi)
	mov %ax,(-1-2)(%rdi,%rdx)
	cmp $6,%edx
	jbe 1f

	mov %eax,(1+2)(%rdi)
	mov %eax,(-1-2-4)(%rdi,%rdx)
	cmp $14,%edx
	jbe 1f

	mov %rax,(1+2+4)(%rdi)
	mov %rax,(-1-2-4-8)(%rdi,%rdx)
	cmp $30,%edx
	jbe 1f

	mov %rax,(1+2+4+8)(%rdi)
	mov %rax,(1+2+4+8+8)(%rdi)
	mov %rax,(-1-2-4-8-16)(%rdi,%rdx)
	mov %rax,(-1-2-4-8-8)(%rdi,%rdx)
	cmp $62,%edx
	jbe 1f

	mov %rax,(1+2+4+8+16)(%rdi)
	mov %rax,(1+2+4+8+16+8)(%rdi)
	mov %rax,(1+2+4+8+16+16)(%rdi)
	mov %rax,(1+2+4+8+16+24)(%rdi)
	mov %rax,(-1-2-4-8-16-32)(%rdi,%rdx)
	mov %rax,(-1-2-4-8-16-24)(%rdi,%rdx)
	mov %rax,(-1-2-4-8-16-16)(%rdi,%rdx)
	mov %rax,(-1-2-4-8-16-8)(%rdi,%rdx)
	
1:	mov %rdi,%rax
	ret

2:	test %rdx,%rdx
	jz 1b

	mov %rdi,%r8
	mov %rax,(%rdi)
	mov %rax,-16(%rdi,%rdx)
	mov %rax,-8(%rdi,%rdx)
	add $8,%rdi
	sub $8,%rcx
	and $-8,%rdi
	shr $3,%rcx
	rep
	stosq
	mov %r8,%rax
	ret

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-15  4:06   ` Rich Felker
@ 2015-02-15 14:07     ` Denys Vlasenko
  2015-02-15 15:03       ` Rich Felker
  0 siblings, 1 reply; 18+ messages in thread
From: Denys Vlasenko @ 2015-02-15 14:07 UTC (permalink / raw)
  To: musl

On Sun, Feb 15, 2015 at 5:06 AM, Rich Felker <dalias@libc.org> wrote:
>> The main change whose value I really question is the conditional
>> widen_rax. If the value isn't used until a few cycles after the imul
>> instruction, doing it unconditionally is probably cheaper than testing
>> and branching even when the branch is predictable.
>
> To elaborate, simply replacing the unconditional imul with an
> unconditional xor %eax,%eax in my best variant so far, I was only able
> to save one cycle. So I don't see any way a test, branch, and
> conditional imul could be less expensive than the unconditional imul.

So imul elimination is a (tiny) win even on our CPUs, which happen
to be the _fastest_ CPUs in regards to 64x64 imul (3 cycles).

Just because we don't personally see a hit from 6-cycle imul of AMD CPUs,
it does not mean people who do use those CPUs don't exist. Have heart...


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-15 14:07     ` Denys Vlasenko
@ 2015-02-15 15:03       ` Rich Felker
  2015-02-15 21:44         ` Denys Vlasenko
  0 siblings, 1 reply; 18+ messages in thread
From: Rich Felker @ 2015-02-15 15:03 UTC (permalink / raw)
  To: Denys Vlasenko; +Cc: musl

On Sun, Feb 15, 2015 at 03:07:06PM +0100, Denys Vlasenko wrote:
> On Sun, Feb 15, 2015 at 5:06 AM, Rich Felker <dalias@libc.org> wrote:
> >> The main change whose value I really question is the conditional
> >> widen_rax. If the value isn't used until a few cycles after the imul
> >> instruction, doing it unconditionally is probably cheaper than testing
> >> and branching even when the branch is predictable.
> >
> > To elaborate, simply replacing the unconditional imul with an
> > unconditional xor %eax,%eax in my best variant so far, I was only able
> > to save one cycle. So I don't see any way a test, branch, and
> > conditional imul could be less expensive than the unconditional imul.
> 
> So imul elimination is a (tiny) win even on our CPUs, which happen
> to be the _fastest_ CPUs in regards to 64x64 imul (3 cycles).

No, it's a small (maybe you'd call it tiny) loss on them. That was my
point. It's only a tiny win when you rip out the conditional entirely
and just hard-code memset to always write zeros. (BTW, IIRC one OS had
a bug like that which went unnoticed for years... :)

> Just because we don't personally see a hit from 6-cycle imul of AMD CPUs,
> it does not mean people who do use those CPUs don't exist. Have heart...

Did you test the version I attached? I think there should be at least
4-5 cycles between when the imul is launched and when the result is
used, so I'm failing to see how the latency is a big deal.

Rich


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-15 15:03       ` Rich Felker
@ 2015-02-15 21:44         ` Denys Vlasenko
  2015-02-15 22:55           ` Rich Felker
  2015-02-16 17:36           ` Rich Felker
  0 siblings, 2 replies; 18+ messages in thread
From: Denys Vlasenko @ 2015-02-15 21:44 UTC (permalink / raw)
  To: Rich Felker; +Cc: musl

[-- Attachment #1: Type: text/plain, Size: 1466 bytes --]

On Sun, Feb 15, 2015 at 4:03 PM, Rich Felker <dalias@libc.org> wrote:
>> Just because we don't personally see a hit from 6-cycle imul of AMD CPUs,
>> it does not mean people who do use those CPUs don't exist. Have heart...
>
> Did you test the version I attached? I think there should be at least
> 4-5 cycles between when the imul is launched and when the result is
> used, so I'm failing to see how the latency is a big deal.

Okay, I won't insist.
Your version works good. The "rep stosq" setup time is still noticeable
even when we switch to it after 126:

129 byte block: 10.37 bytes/ns
128 byte block: 10.65 bytes/ns
127 byte block: 10.58 bytes/ns
126 byte block: 18.44 bytes/ns
125 byte block: 18.30 bytes/ns
124 byte block: 18.15 bytes/ns

but I don't think we should do anything about this.


Here

        lea -1(%rdx),%rcx
        cmp $126,%rcx
        jae 2f

you'd have a stall, since cmp needs the result of lea. why not this?

        lea -1(%rdx),%rcx
        cmp $127,%rdx
        jae 2f

then you can even move lea to "big buf" code part
(no point doing it in "small buf" code where it is not used).


Possible bug: this check seems misplaced:

2:      test %rdx,%rdx
        jz 1b

it should be before byte stores:
        mov %sil,(%rdi)
        mov %sil,-1(%rdi,%rdx)
        cmp $2,%edx
        jbe 1f
otherwise memset of zero length will fill two bytes, at buf[0] and buf[-1]


"sub $8,%rcx" can be folded into lea.

Please see attached file.

[-- Attachment #2: vda1.s --]
[-- Type: application/octet-stream, Size: 1056 bytes --]

.global memset
.type memset,@function
memset:
	movzbq %sil,%rax
	mov $0x101010101010101,%r8
	imul %r8,%rax

	cmp $127,%rdx
	jae 2f

	test %rdx,%rdx
	jz 1f

	mov %sil,(%rdi)
	mov %sil,-1(%rdi,%rdx)
	cmp $2,%edx
	jbe 1f

	mov %ax,1(%rdi)
	mov %ax,(-1-2)(%rdi,%rdx)
	cmp $6,%edx
	jbe 1f

	mov %eax,(1+2)(%rdi)
	mov %eax,(-1-2-4)(%rdi,%rdx)
	cmp $14,%edx
	jbe 1f

	mov %rax,(1+2+4)(%rdi)
	mov %rax,(-1-2-4-8)(%rdi,%rdx)
	cmp $30,%edx
	jbe 1f

	mov %rax,(1+2+4+8)(%rdi)
	mov %rax,(1+2+4+8+8)(%rdi)
	mov %rax,(-1-2-4-8-16)(%rdi,%rdx)
	mov %rax,(-1-2-4-8-8)(%rdi,%rdx)
	cmp $62,%edx
	jbe 1f

	mov %rax,(1+2+4+8+16)(%rdi)
	mov %rax,(1+2+4+8+16+8)(%rdi)
	mov %rax,(1+2+4+8+16+16)(%rdi)
	mov %rax,(1+2+4+8+16+24)(%rdi)
	mov %rax,(-1-2-4-8-16-32)(%rdi,%rdx)
	mov %rax,(-1-2-4-8-16-24)(%rdi,%rdx)
	mov %rax,(-1-2-4-8-16-16)(%rdi,%rdx)
	mov %rax,(-1-2-4-8-16-8)(%rdi,%rdx)

1:	mov %rdi,%rax
	ret

2:	lea -9(%rdx),%rcx
	mov %rdi,%r8
	shr $3,%rcx
	mov %rax,(%rdi)
	mov %rax,-16(%rdi,%rdx)
	mov %rax,-8(%rdi,%rdx)
	add $8,%rdi
	and $-8,%rdi
	rep
	stosq
	mov %r8,%rax
	ret

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-15 21:44         ` Denys Vlasenko
@ 2015-02-15 22:55           ` Rich Felker
  2015-02-16 10:09             ` Denys Vlasenko
  2015-02-16 17:36           ` Rich Felker
  1 sibling, 1 reply; 18+ messages in thread
From: Rich Felker @ 2015-02-15 22:55 UTC (permalink / raw)
  To: Denys Vlasenko; +Cc: musl

On Sun, Feb 15, 2015 at 10:44:59PM +0100, Denys Vlasenko wrote:
> On Sun, Feb 15, 2015 at 4:03 PM, Rich Felker <dalias@libc.org> wrote:
> >> Just because we don't personally see a hit from 6-cycle imul of AMD CPUs,
> >> it does not mean people who do use those CPUs don't exist. Have heart...
> >
> > Did you test the version I attached? I think there should be at least
> > 4-5 cycles between when the imul is launched and when the result is
> > used, so I'm failing to see how the latency is a big deal.
> 
> Okay, I won't insist.
> Your version works good. The "rep stosq" setup time is still noticeable
> even when we switch to it after 126:
> 
> 129 byte block: 10.37 bytes/ns
> 128 byte block: 10.65 bytes/ns
> 127 byte block: 10.58 bytes/ns
> 126 byte block: 18.44 bytes/ns
> 125 byte block: 18.30 bytes/ns
> 124 byte block: 18.15 bytes/ns
> 
> but I don't think we should do anything about this.
> 
> 
> Here
> 
>         lea -1(%rdx),%rcx
>         cmp $126,%rcx
>         jae 2f
> 
> you'd have a stall, since cmp needs the result of lea. why not this?
> 
>         lea -1(%rdx),%rcx
>         cmp $127,%rdx
>         jae 2f
> 
> then you can even move lea to "big buf" code part
> (no point doing it in "small buf" code where it is not used).

Because the point was to eliminate the extra conditional for n==0
(hopefully uncommon) in the fast case. By comparing the decremented
value as unsigned, we have 0UL-1 > 126.

> Possible bug: this check seems misplaced:
> 
> 2:      test %rdx,%rdx
>         jz 1b
> 
> it should be before byte stores:
>         mov %sil,(%rdi)
>         mov %sil,-1(%rdi,%rdx)
>         cmp $2,%edx
>         jbe 1f
> otherwise memset of zero length will fill two bytes, at buf[0] and buf[-1]

No it's intentional; see above.

> "sub $8,%rcx" can be folded into lea.

No, it can't, for the above reason.

> Please see attached file.

I'll compare how it performs.

Rich


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-15 22:55           ` Rich Felker
@ 2015-02-16 10:09             ` Denys Vlasenko
  2015-02-16 15:12               ` Rich Felker
  0 siblings, 1 reply; 18+ messages in thread
From: Denys Vlasenko @ 2015-02-16 10:09 UTC (permalink / raw)
  To: Rich Felker; +Cc: musl

On Sun, Feb 15, 2015 at 11:55 PM, Rich Felker <dalias@libc.org> wrote:
>> "sub $8,%rcx" can be folded into lea.
>
> No, it can't, for the above reason.

Why can't?

lea -9(%rdx), %rcx

will also underflow for %rdx == 0, just like "lea -1".


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-16 10:09             ` Denys Vlasenko
@ 2015-02-16 15:12               ` Rich Felker
  0 siblings, 0 replies; 18+ messages in thread
From: Rich Felker @ 2015-02-16 15:12 UTC (permalink / raw)
  To: Denys Vlasenko; +Cc: musl

On Mon, Feb 16, 2015 at 11:09:25AM +0100, Denys Vlasenko wrote:
> On Sun, Feb 15, 2015 at 11:55 PM, Rich Felker <dalias@libc.org> wrote:
> >> "sub $8,%rcx" can be folded into lea.
> >
> > No, it can't, for the above reason.
> 
> Why can't?
> 
> lea -9(%rdx), %rcx
> 
> will also underflow for %rdx == 0, just like "lea -1".

Then n==1..8 would also fall into the rep stosq path and either fail
horribly or need to use slow fixup code there.

Rich


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-15 21:44         ` Denys Vlasenko
  2015-02-15 22:55           ` Rich Felker
@ 2015-02-16 17:36           ` Rich Felker
  2015-02-17 13:08             ` Denys Vlasenko
  1 sibling, 1 reply; 18+ messages in thread
From: Rich Felker @ 2015-02-16 17:36 UTC (permalink / raw)
  To: Denys Vlasenko; +Cc: musl

On Sun, Feb 15, 2015 at 10:44:59PM +0100, Denys Vlasenko wrote:
> On Sun, Feb 15, 2015 at 4:03 PM, Rich Felker <dalias@libc.org> wrote:
> >> Just because we don't personally see a hit from 6-cycle imul of AMD CPUs,
> >> it does not mean people who do use those CPUs don't exist. Have heart...
> >
> > Did you test the version I attached? I think there should be at least
> > 4-5 cycles between when the imul is launched and when the result is
> > used, so I'm failing to see how the latency is a big deal.
> 
> Okay, I won't insist.
> Your version works good. The "rep stosq" setup time is still noticeable
> even when we switch to it after 126:
> 
> 129 byte block: 10.37 bytes/ns
> 128 byte block: 10.65 bytes/ns
> 127 byte block: 10.58 bytes/ns
> 126 byte block: 18.44 bytes/ns
> 125 byte block: 18.30 bytes/ns
> 124 byte block: 18.15 bytes/ns
> 
> but I don't think we should do anything about this.

Agreed. The size of code is really going to blow up at the next step,
and hopefully future cpus will get less bad about pessimizing rep
stosq startup.

> "sub $8,%rcx" can be folded into lea.
> 
> Please see attached file.

I tried it and it's ~1 cycle slower for at least sizes 16-30;
presumably we're seeing the cost of the extra compare/branch at these
sizes but not at others. What does your timing test show?

Rich


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-16 17:36           ` Rich Felker
@ 2015-02-17 13:08             ` Denys Vlasenko
  2015-02-17 16:12               ` Rich Felker
  0 siblings, 1 reply; 18+ messages in thread
From: Denys Vlasenko @ 2015-02-17 13:08 UTC (permalink / raw)
  To: Rich Felker; +Cc: musl

>> Please see attached file.
>
> I tried it and it's ~1 cycle slower for at least sizes 16-30;
> presumably we're seeing the cost of the extra compare/branch at these
> sizes but not at others. What does your timing test show?

See below.
First column - result of my2.s
Second column - result of vda1.s

Basically, the "rep stosq" code path got a bit faster, while
small memsets stayed the same.

2048 byte block: 24.49 bytes/ns  24.60 bytes/ns
2047 byte block: 24.48 bytes/ns  24.60 bytes/ns
2046 byte block: 24.47 bytes/ns  24.58 bytes/ns
2045 byte block: 24.46 bytes/ns  24.57 bytes/ns
2044 byte block: 24.45 bytes/ns  24.56 bytes/ns
2043 byte block: 24.44 bytes/ns  24.55 bytes/ns
2042 byte block: 24.43 bytes/ns  24.54 bytes/ns
2041 byte block: 24.41 bytes/ns  24.52 bytes/ns
2040 byte block: 24.49 bytes/ns  24.60 bytes/ns
2039 byte block: 24.47 bytes/ns  24.58 bytes/ns
2038 byte block: 24.46 bytes/ns  24.57 bytes/ns
2037 byte block: 24.45 bytes/ns  24.56 bytes/ns
2036 byte block: 24.44 bytes/ns  24.55 bytes/ns
2035 byte block: 24.43 bytes/ns  24.54 bytes/ns
2034 byte block: 24.42 bytes/ns  24.53 bytes/ns
2033 byte block: 24.40 bytes/ns  24.52 bytes/ns
2032 byte block: 24.48 bytes/ns  24.59 bytes/ns
2031 byte block: 24.47 bytes/ns  24.58 bytes/ns
2030 byte block: 24.45 bytes/ns  24.57 bytes/ns
2029 byte block: 24.44 bytes/ns  24.55 bytes/ns
2028 byte block: 24.43 bytes/ns  24.54 bytes/ns
2027 byte block: 24.42 bytes/ns  24.53 bytes/ns
2026 byte block: 24.41 bytes/ns  24.52 bytes/ns
2025 byte block: 24.39 bytes/ns  24.51 bytes/ns
2024 byte block: 24.47 bytes/ns  24.58 bytes/ns
2023 byte block: 24.46 bytes/ns  24.57 bytes/ns
2022 byte block: 24.44 bytes/ns  24.55 bytes/ns
2021 byte block: 24.43 bytes/ns  24.54 bytes/ns
2020 byte block: 24.42 bytes/ns  24.53 bytes/ns
2019 byte block: 24.41 bytes/ns  24.52 bytes/ns
2018 byte block: 24.40 bytes/ns  24.51 bytes/ns
2017 byte block: 24.39 bytes/ns  24.49 bytes/ns
2016 byte block: 24.46 bytes/ns  24.53 bytes/ns
2015 byte block: 24.45 bytes/ns  24.56 bytes/ns
2014 byte block: 24.44 bytes/ns  24.55 bytes/ns
2013 byte block: 24.43 bytes/ns  24.50 bytes/ns
2012 byte block: 24.41 bytes/ns  24.49 bytes/ns
2011 byte block: 24.40 bytes/ns  24.51 bytes/ns
2010 byte block: 24.39 bytes/ns  24.50 bytes/ns
2009 byte block: 24.38 bytes/ns  24.46 bytes/ns
2008 byte block: 24.45 bytes/ns  24.52 bytes/ns
2007 byte block: 24.44 bytes/ns  24.55 bytes/ns
2006 byte block: 24.43 bytes/ns  24.54 bytes/ns
2005 byte block: 24.42 bytes/ns  24.49 bytes/ns
2004 byte block: 24.40 bytes/ns  24.51 bytes/ns
2003 byte block: 24.39 bytes/ns  24.50 bytes/ns
2002 byte block: 24.38 bytes/ns  24.49 bytes/ns
2001 byte block: 24.37 bytes/ns  24.48 bytes/ns
2000 byte block: 24.44 bytes/ns  24.55 bytes/ns
1999 byte block: 24.43 bytes/ns  24.54 bytes/ns
1998 byte block: 24.42 bytes/ns  24.53 bytes/ns
1997 byte block: 24.41 bytes/ns  24.51 bytes/ns
1996 byte block: 24.39 bytes/ns  24.51 bytes/ns
1995 byte block: 24.38 bytes/ns  24.50 bytes/ns
1994 byte block: 24.37 bytes/ns  24.48 bytes/ns
1993 byte block: 24.35 bytes/ns  24.46 bytes/ns
1992 byte block: 24.43 bytes/ns  24.55 bytes/ns
1991 byte block: 24.42 bytes/ns  24.49 bytes/ns
1990 byte block: 24.41 bytes/ns  24.52 bytes/ns
1989 byte block: 24.39 bytes/ns  24.51 bytes/ns
1988 byte block: 24.38 bytes/ns  24.50 bytes/ns
1987 byte block: 24.37 bytes/ns  24.49 bytes/ns
1986 byte block: 24.36 bytes/ns  24.47 bytes/ns
1985 byte block: 24.35 bytes/ns  24.46 bytes/ns
1984 byte block: 24.43 bytes/ns  24.54 bytes/ns
1983 byte block: 24.41 bytes/ns  24.53 bytes/ns
1982 byte block: 24.40 bytes/ns  24.51 bytes/ns
1981 byte block: 24.38 bytes/ns  24.50 bytes/ns
1980 byte block: 24.38 bytes/ns  24.49 bytes/ns
1979 byte block: 24.37 bytes/ns  24.48 bytes/ns
1978 byte block: 24.35 bytes/ns  24.47 bytes/ns
1977 byte block: 24.34 bytes/ns  24.46 bytes/ns
1976 byte block: 24.41 bytes/ns  24.53 bytes/ns
1975 byte block: 24.40 bytes/ns  24.52 bytes/ns
1974 byte block: 24.39 bytes/ns  24.51 bytes/ns
1973 byte block: 24.38 bytes/ns  24.49 bytes/ns
1972 byte block: 24.37 bytes/ns  24.48 bytes/ns
1971 byte block: 24.35 bytes/ns  24.47 bytes/ns
1970 byte block: 24.35 bytes/ns  24.45 bytes/ns
1969 byte block: 24.33 bytes/ns  24.44 bytes/ns
1968 byte block: 24.41 bytes/ns  24.52 bytes/ns
1967 byte block: 24.39 bytes/ns  24.51 bytes/ns
1966 byte block: 24.38 bytes/ns  24.50 bytes/ns
1965 byte block: 24.37 bytes/ns  24.48 bytes/ns
1964 byte block: 24.36 bytes/ns  24.47 bytes/ns
1963 byte block: 24.34 bytes/ns  24.46 bytes/ns
1962 byte block: 24.33 bytes/ns  24.44 bytes/ns
1961 byte block: 24.32 bytes/ns  24.43 bytes/ns
1960 byte block: 24.39 bytes/ns  24.51 bytes/ns
1959 byte block: 24.39 bytes/ns  24.50 bytes/ns
1958 byte block: 24.37 bytes/ns  24.49 bytes/ns
1957 byte block: 24.36 bytes/ns  24.47 bytes/ns
1956 byte block: 24.35 bytes/ns  24.46 bytes/ns
1955 byte block: 24.33 bytes/ns  24.45 bytes/ns
1954 byte block: 24.33 bytes/ns  24.44 bytes/ns
1953 byte block: 24.31 bytes/ns  24.43 bytes/ns
1952 byte block: 24.39 bytes/ns  24.50 bytes/ns
1951 byte block: 24.38 bytes/ns  24.49 bytes/ns
1950 byte block: 24.36 bytes/ns  24.48 bytes/ns
1949 byte block: 24.35 bytes/ns  24.47 bytes/ns
1948 byte block: 24.34 bytes/ns  24.45 bytes/ns
1947 byte block: 24.32 bytes/ns  24.44 bytes/ns
1946 byte block: 24.31 bytes/ns  24.43 bytes/ns
1945 byte block: 24.30 bytes/ns  24.42 bytes/ns
1944 byte block: 24.38 bytes/ns  24.49 bytes/ns
1943 byte block: 24.37 bytes/ns  24.48 bytes/ns
1942 byte block: 24.35 bytes/ns  24.46 bytes/ns
1941 byte block: 24.35 bytes/ns  24.45 bytes/ns
1940 byte block: 24.33 bytes/ns  24.44 bytes/ns
1939 byte block: 24.32 bytes/ns  24.43 bytes/ns
1938 byte block: 24.31 bytes/ns  24.41 bytes/ns
1937 byte block: 24.29 bytes/ns  24.41 bytes/ns
1936 byte block: 24.37 bytes/ns  24.47 bytes/ns
1935 byte block: 24.36 bytes/ns  24.47 bytes/ns
1934 byte block: 24.34 bytes/ns  24.46 bytes/ns
1933 byte block: 24.33 bytes/ns  24.45 bytes/ns
1932 byte block: 24.32 bytes/ns  24.43 bytes/ns
1931 byte block: 24.30 bytes/ns  24.42 bytes/ns
1930 byte block: 24.30 bytes/ns  24.41 bytes/ns
1929 byte block: 24.28 bytes/ns  24.39 bytes/ns
1928 byte block: 24.36 bytes/ns  24.47 bytes/ns
1927 byte block: 24.35 bytes/ns  24.46 bytes/ns
1926 byte block: 24.34 bytes/ns  24.45 bytes/ns
1925 byte block: 24.32 bytes/ns  24.44 bytes/ns
1924 byte block: 24.31 bytes/ns  24.42 bytes/ns
1923 byte block: 24.30 bytes/ns  24.41 bytes/ns
1922 byte block: 24.29 bytes/ns  24.40 bytes/ns
1921 byte block: 24.27 bytes/ns  24.38 bytes/ns
1920 byte block: 24.35 bytes/ns  24.47 bytes/ns
1919 byte block: 24.34 bytes/ns  24.45 bytes/ns
1918 byte block: 24.33 bytes/ns  24.44 bytes/ns
1917 byte block: 24.31 bytes/ns  24.43 bytes/ns
1916 byte block: 24.30 bytes/ns  24.41 bytes/ns
1915 byte block: 24.29 bytes/ns  24.36 bytes/ns
1914 byte block: 24.28 bytes/ns  24.39 bytes/ns
1913 byte block: 24.27 bytes/ns  24.35 bytes/ns
1912 byte block: 24.34 bytes/ns  24.46 bytes/ns
1911 byte block: 24.33 bytes/ns  24.44 bytes/ns
1910 byte block: 24.32 bytes/ns  24.39 bytes/ns
1909 byte block: 24.30 bytes/ns  24.42 bytes/ns
1908 byte block: 24.29 bytes/ns  24.40 bytes/ns
1907 byte block: 24.28 bytes/ns  24.39 bytes/ns
1906 byte block: 24.26 bytes/ns  24.38 bytes/ns
1905 byte block: 24.26 bytes/ns  24.37 bytes/ns
1904 byte block: 24.33 bytes/ns  24.45 bytes/ns
1903 byte block: 24.32 bytes/ns  24.44 bytes/ns
1902 byte block: 24.30 bytes/ns  24.42 bytes/ns
1901 byte block: 24.29 bytes/ns  24.41 bytes/ns
1900 byte block: 24.28 bytes/ns  24.40 bytes/ns
1899 byte block: 24.27 bytes/ns  24.39 bytes/ns
1898 byte block: 24.25 bytes/ns  24.37 bytes/ns
1897 byte block: 24.24 bytes/ns  24.36 bytes/ns
1896 byte block: 24.32 bytes/ns  24.44 bytes/ns
1895 byte block: 24.31 bytes/ns  24.43 bytes/ns
1894 byte block: 24.29 bytes/ns  24.42 bytes/ns
1893 byte block: 24.28 bytes/ns  24.40 bytes/ns
1892 byte block: 24.27 bytes/ns  24.39 bytes/ns
1891 byte block: 24.26 bytes/ns  24.38 bytes/ns
1890 byte block: 24.24 bytes/ns  24.36 bytes/ns
1889 byte block: 24.23 bytes/ns  24.35 bytes/ns
1888 byte block: 24.31 bytes/ns  24.43 bytes/ns
1887 byte block: 24.30 bytes/ns  24.42 bytes/ns
1886 byte block: 24.29 bytes/ns  24.40 bytes/ns
1885 byte block: 24.27 bytes/ns  24.39 bytes/ns
1884 byte block: 24.27 bytes/ns  24.38 bytes/ns
1883 byte block: 24.25 bytes/ns  24.36 bytes/ns
1882 byte block: 24.23 bytes/ns  24.35 bytes/ns
1881 byte block: 24.22 bytes/ns  24.34 bytes/ns
1880 byte block: 24.30 bytes/ns  24.42 bytes/ns
1879 byte block: 24.29 bytes/ns  24.41 bytes/ns
1878 byte block: 24.27 bytes/ns  24.39 bytes/ns
1877 byte block: 24.27 bytes/ns  24.38 bytes/ns
1876 byte block: 24.25 bytes/ns  24.37 bytes/ns
1875 byte block: 24.24 bytes/ns  24.36 bytes/ns
1874 byte block: 24.22 bytes/ns  24.34 bytes/ns
1873 byte block: 24.21 bytes/ns  24.33 bytes/ns
1872 byte block: 24.29 bytes/ns  24.41 bytes/ns
1871 byte block: 24.28 bytes/ns  24.40 bytes/ns
1870 byte block: 24.27 bytes/ns  24.38 bytes/ns
1869 byte block: 24.25 bytes/ns  24.37 bytes/ns
1868 byte block: 24.24 bytes/ns  24.36 bytes/ns
1867 byte block: 24.22 bytes/ns  24.35 bytes/ns
1866 byte block: 24.21 bytes/ns  24.33 bytes/ns
1865 byte block: 24.20 bytes/ns  24.32 bytes/ns
1864 byte block: 24.28 bytes/ns  24.40 bytes/ns
1863 byte block: 24.27 bytes/ns  24.39 bytes/ns
1862 byte block: 24.25 bytes/ns  24.38 bytes/ns
1861 byte block: 24.25 bytes/ns  24.36 bytes/ns
1860 byte block: 24.23 bytes/ns  24.35 bytes/ns
1859 byte block: 24.22 bytes/ns  24.33 bytes/ns
1858 byte block: 24.21 bytes/ns  24.32 bytes/ns
1857 byte block: 24.19 bytes/ns  24.30 bytes/ns
1856 byte block: 24.27 bytes/ns  24.39 bytes/ns
1855 byte block: 24.26 bytes/ns  24.37 bytes/ns
1854 byte block: 24.25 bytes/ns  24.36 bytes/ns
1853 byte block: 24.23 bytes/ns  24.35 bytes/ns
1852 byte block: 24.22 bytes/ns  24.33 bytes/ns
1851 byte block: 24.21 bytes/ns  24.32 bytes/ns
1850 byte block: 24.19 bytes/ns  24.31 bytes/ns
1849 byte block: 24.18 bytes/ns  24.30 bytes/ns
1848 byte block: 24.26 bytes/ns  24.38 bytes/ns
1847 byte block: 24.25 bytes/ns  24.37 bytes/ns
1846 byte block: 24.24 bytes/ns  24.35 bytes/ns
1845 byte block: 24.22 bytes/ns  24.34 bytes/ns
1844 byte block: 24.21 bytes/ns  24.33 bytes/ns
1843 byte block: 24.20 bytes/ns  24.31 bytes/ns
1842 byte block: 24.18 bytes/ns  24.30 bytes/ns
1841 byte block: 24.17 bytes/ns  24.29 bytes/ns
1840 byte block: 24.25 bytes/ns  24.37 bytes/ns
1839 byte block: 24.24 bytes/ns  24.35 bytes/ns
1838 byte block: 24.22 bytes/ns  24.34 bytes/ns
1837 byte block: 24.21 bytes/ns  24.33 bytes/ns
1836 byte block: 24.20 bytes/ns  24.28 bytes/ns
1835 byte block: 24.19 bytes/ns  24.27 bytes/ns
1834 byte block: 24.17 bytes/ns  24.29 bytes/ns
1833 byte block: 24.17 bytes/ns  24.28 bytes/ns
1832 byte block: 24.24 bytes/ns  24.36 bytes/ns
1831 byte block: 24.23 bytes/ns  24.35 bytes/ns
1830 byte block: 24.21 bytes/ns  24.33 bytes/ns
1829 byte block: 24.20 bytes/ns  24.32 bytes/ns
1828 byte block: 24.19 bytes/ns  24.30 bytes/ns
1827 byte block: 24.18 bytes/ns  24.29 bytes/ns
1826 byte block: 24.17 bytes/ns  24.28 bytes/ns
1825 byte block: 24.15 bytes/ns  24.27 bytes/ns
1824 byte block: 24.23 bytes/ns  24.35 bytes/ns
1823 byte block: 24.22 bytes/ns  24.34 bytes/ns
1822 byte block: 24.21 bytes/ns  24.33 bytes/ns
1821 byte block: 24.19 bytes/ns  24.31 bytes/ns
1820 byte block: 24.18 bytes/ns  24.30 bytes/ns
1819 byte block: 24.17 bytes/ns  24.29 bytes/ns
1818 byte block: 24.16 bytes/ns  24.28 bytes/ns
1817 byte block: 24.14 bytes/ns  24.26 bytes/ns
1816 byte block: 24.22 bytes/ns  24.34 bytes/ns
1815 byte block: 24.21 bytes/ns  24.33 bytes/ns
1814 byte block: 24.19 bytes/ns  24.31 bytes/ns
1813 byte block: 24.18 bytes/ns  24.30 bytes/ns
1812 byte block: 24.17 bytes/ns  24.29 bytes/ns
1811 byte block: 24.15 bytes/ns  24.27 bytes/ns
1810 byte block: 24.14 bytes/ns  24.26 bytes/ns
1809 byte block: 24.13 bytes/ns  24.25 bytes/ns
1808 byte block: 24.21 bytes/ns  24.33 bytes/ns
1807 byte block: 24.20 bytes/ns  24.31 bytes/ns
1806 byte block: 24.19 bytes/ns  24.30 bytes/ns
1805 byte block: 24.17 bytes/ns  24.29 bytes/ns
1804 byte block: 24.16 bytes/ns  24.28 bytes/ns
1803 byte block: 24.14 bytes/ns  24.27 bytes/ns
1802 byte block: 24.13 bytes/ns  24.25 bytes/ns
1801 byte block: 24.12 bytes/ns  24.24 bytes/ns
1800 byte block: 24.20 bytes/ns  24.32 bytes/ns
1799 byte block: 24.19 bytes/ns  24.31 bytes/ns
1798 byte block: 24.17 bytes/ns  24.29 bytes/ns
1797 byte block: 24.16 bytes/ns  24.28 bytes/ns
1796 byte block: 24.15 bytes/ns  24.27 bytes/ns
1795 byte block: 24.13 bytes/ns  24.25 bytes/ns
1794 byte block: 24.12 bytes/ns  24.25 bytes/ns
1793 byte block: 24.11 bytes/ns  24.23 bytes/ns
1792 byte block: 24.18 bytes/ns  24.31 bytes/ns
1791 byte block: 24.18 bytes/ns  24.30 bytes/ns
1790 byte block: 24.16 bytes/ns  24.28 bytes/ns
1789 byte block: 24.14 bytes/ns  24.27 bytes/ns
1788 byte block: 24.14 bytes/ns  24.26 bytes/ns
1787 byte block: 24.12 bytes/ns  24.25 bytes/ns
1786 byte block: 24.10 bytes/ns  24.23 bytes/ns
1785 byte block: 24.09 bytes/ns  24.21 bytes/ns
1784 byte block: 24.18 bytes/ns  24.30 bytes/ns
1783 byte block: 24.16 bytes/ns  24.29 bytes/ns
1782 byte block: 24.15 bytes/ns  24.27 bytes/ns
1781 byte block: 24.13 bytes/ns  24.26 bytes/ns
1780 byte block: 24.12 bytes/ns  24.25 bytes/ns
1779 byte block: 24.11 bytes/ns  24.19 bytes/ns
1778 byte block: 24.09 bytes/ns  24.21 bytes/ns
1777 byte block: 24.08 bytes/ns  24.20 bytes/ns
1776 byte block: 24.17 bytes/ns  24.29 bytes/ns
1775 byte block: 24.15 bytes/ns  24.27 bytes/ns
1774 byte block: 24.14 bytes/ns  24.26 bytes/ns
1773 byte block: 24.13 bytes/ns  24.24 bytes/ns
1772 byte block: 24.11 bytes/ns  24.23 bytes/ns
1771 byte block: 24.10 bytes/ns  24.22 bytes/ns
1770 byte block: 24.09 bytes/ns  24.17 bytes/ns
1769 byte block: 24.07 bytes/ns  24.19 bytes/ns
1768 byte block: 24.16 bytes/ns  24.28 bytes/ns
1767 byte block: 24.15 bytes/ns  24.26 bytes/ns
1766 byte block: 24.13 bytes/ns  24.25 bytes/ns
1765 byte block: 24.12 bytes/ns  24.23 bytes/ns
1764 byte block: 24.10 bytes/ns  24.22 bytes/ns
1763 byte block: 24.09 bytes/ns  24.17 bytes/ns
1762 byte block: 24.07 bytes/ns  24.19 bytes/ns
1761 byte block: 24.06 bytes/ns  24.18 bytes/ns
1760 byte block: 24.15 bytes/ns  24.23 bytes/ns
1759 byte block: 24.13 bytes/ns  24.25 bytes/ns
1758 byte block: 24.12 bytes/ns  24.23 bytes/ns
1757 byte block: 24.11 bytes/ns  24.22 bytes/ns
1756 byte block: 24.09 bytes/ns  24.21 bytes/ns
1755 byte block: 24.08 bytes/ns  24.20 bytes/ns
1754 byte block: 24.06 bytes/ns  24.19 bytes/ns
1753 byte block: 24.05 bytes/ns  24.17 bytes/ns
1752 byte block: 24.14 bytes/ns  24.25 bytes/ns
1751 byte block: 24.12 bytes/ns  24.24 bytes/ns
1750 byte block: 24.11 bytes/ns  24.22 bytes/ns
1749 byte block: 24.09 bytes/ns  24.21 bytes/ns
1748 byte block: 24.08 bytes/ns  24.20 bytes/ns
1747 byte block: 24.07 bytes/ns  24.19 bytes/ns
1746 byte block: 24.05 bytes/ns  24.17 bytes/ns
1745 byte block: 24.04 bytes/ns  24.16 bytes/ns
1744 byte block: 24.12 bytes/ns  24.24 bytes/ns
1743 byte block: 24.11 bytes/ns  24.23 bytes/ns
1742 byte block: 24.09 bytes/ns  24.22 bytes/ns
1741 byte block: 24.08 bytes/ns  24.21 bytes/ns
1740 byte block: 24.07 bytes/ns  24.19 bytes/ns
1739 byte block: 24.06 bytes/ns  24.18 bytes/ns
1738 byte block: 24.04 bytes/ns  24.16 bytes/ns
1737 byte block: 24.03 bytes/ns  24.15 bytes/ns
1736 byte block: 24.11 bytes/ns  24.23 bytes/ns
1735 byte block: 24.10 bytes/ns  24.22 bytes/ns
1734 byte block: 24.09 bytes/ns  24.21 bytes/ns
1733 byte block: 24.07 bytes/ns  24.19 bytes/ns
1732 byte block: 24.06 bytes/ns  24.18 bytes/ns
1731 byte block: 24.04 bytes/ns  24.17 bytes/ns
1730 byte block: 24.03 bytes/ns  24.15 bytes/ns
1729 byte block: 24.01 bytes/ns  24.14 bytes/ns
1728 byte block: 24.10 bytes/ns  24.22 bytes/ns
1727 byte block: 24.09 bytes/ns  24.21 bytes/ns
1726 byte block: 24.07 bytes/ns  24.19 bytes/ns
1725 byte block: 24.06 bytes/ns  24.18 bytes/ns
1724 byte block: 24.04 bytes/ns  24.17 bytes/ns
1723 byte block: 24.03 bytes/ns  24.16 bytes/ns
1722 byte block: 24.02 bytes/ns  24.14 bytes/ns
1721 byte block: 24.00 bytes/ns  24.13 bytes/ns
1720 byte block: 24.09 bytes/ns  24.21 bytes/ns
1719 byte block: 24.07 bytes/ns  24.20 bytes/ns
1718 byte block: 24.06 bytes/ns  24.19 bytes/ns
1717 byte block: 24.05 bytes/ns  24.17 bytes/ns
1716 byte block: 24.03 bytes/ns  24.16 bytes/ns
1715 byte block: 24.01 bytes/ns  24.14 bytes/ns
1714 byte block: 24.00 bytes/ns  24.13 bytes/ns
1713 byte block: 23.99 bytes/ns  24.12 bytes/ns
1712 byte block: 24.08 bytes/ns  24.21 bytes/ns
1711 byte block: 24.06 bytes/ns  24.19 bytes/ns
1710 byte block: 24.04 bytes/ns  24.18 bytes/ns
1709 byte block: 24.04 bytes/ns  24.16 bytes/ns
1708 byte block: 24.00 bytes/ns  24.14 bytes/ns
1707 byte block: 24.00 bytes/ns  24.13 bytes/ns
1706 byte block: 23.99 bytes/ns  24.12 bytes/ns
1705 byte block: 23.98 bytes/ns  24.10 bytes/ns
1704 byte block: 24.06 bytes/ns  24.19 bytes/ns
1703 byte block: 24.05 bytes/ns  24.18 bytes/ns
1702 byte block: 24.03 bytes/ns  24.16 bytes/ns
1701 byte block: 24.02 bytes/ns  24.15 bytes/ns
1700 byte block: 24.01 bytes/ns  24.13 bytes/ns
1699 byte block: 23.99 bytes/ns  24.12 bytes/ns
1698 byte block: 23.98 bytes/ns  24.11 bytes/ns
1697 byte block: 23.96 bytes/ns  24.09 bytes/ns
1696 byte block: 24.05 bytes/ns  24.18 bytes/ns
1695 byte block: 24.04 bytes/ns  24.16 bytes/ns
1694 byte block: 24.02 bytes/ns  24.14 bytes/ns
1693 byte block: 24.01 bytes/ns  24.13 bytes/ns
1692 byte block: 23.99 bytes/ns  24.12 bytes/ns
1691 byte block: 23.98 bytes/ns  24.11 bytes/ns
1690 byte block: 23.97 bytes/ns  24.09 bytes/ns
1689 byte block: 23.95 bytes/ns  24.08 bytes/ns
1688 byte block: 24.04 bytes/ns  24.16 bytes/ns
1687 byte block: 24.03 bytes/ns  24.12 bytes/ns
1686 byte block: 24.02 bytes/ns  24.14 bytes/ns
1685 byte block: 24.00 bytes/ns  24.12 bytes/ns
1684 byte block: 23.98 bytes/ns  24.11 bytes/ns
1683 byte block: 23.97 bytes/ns  24.09 bytes/ns
1682 byte block: 23.96 bytes/ns  24.08 bytes/ns
1681 byte block: 23.94 bytes/ns  24.06 bytes/ns
1680 byte block: 24.03 bytes/ns  24.15 bytes/ns
1679 byte block: 24.02 bytes/ns  24.14 bytes/ns
1678 byte block: 24.00 bytes/ns  24.12 bytes/ns
1677 byte block: 23.99 bytes/ns  24.11 bytes/ns
1676 byte block: 23.98 bytes/ns  24.10 bytes/ns
1675 byte block: 23.96 bytes/ns  24.08 bytes/ns
1674 byte block: 23.94 bytes/ns  24.07 bytes/ns
1673 byte block: 23.93 bytes/ns  24.05 bytes/ns
1672 byte block: 24.01 bytes/ns  24.14 bytes/ns
1671 byte block: 24.01 bytes/ns  24.13 bytes/ns
1670 byte block: 23.99 bytes/ns  24.11 bytes/ns
1669 byte block: 23.98 bytes/ns  24.10 bytes/ns
1668 byte block: 23.96 bytes/ns  24.08 bytes/ns
1667 byte block: 23.95 bytes/ns  24.07 bytes/ns
1666 byte block: 23.93 bytes/ns  24.06 bytes/ns
1665 byte block: 23.92 bytes/ns  24.04 bytes/ns
1664 byte block: 24.01 bytes/ns  24.13 bytes/ns
1663 byte block: 23.99 bytes/ns  24.12 bytes/ns
1662 byte block: 23.98 bytes/ns  24.10 bytes/ns
1661 byte block: 23.96 bytes/ns  24.09 bytes/ns
1660 byte block: 23.95 bytes/ns  24.07 bytes/ns
1659 byte block: 23.93 bytes/ns  24.06 bytes/ns
1658 byte block: 23.92 bytes/ns  24.04 bytes/ns
1657 byte block: 23.90 bytes/ns  24.03 bytes/ns
1656 byte block: 24.00 bytes/ns  24.12 bytes/ns
1655 byte block: 23.98 bytes/ns  24.11 bytes/ns
1654 byte block: 23.96 bytes/ns  24.09 bytes/ns
1653 byte block: 23.95 bytes/ns  24.08 bytes/ns
1652 byte block: 23.94 bytes/ns  24.06 bytes/ns
1651 byte block: 23.92 bytes/ns  24.05 bytes/ns
1650 byte block: 23.91 bytes/ns  24.03 bytes/ns
1649 byte block: 23.89 bytes/ns  24.02 bytes/ns
1648 byte block: 23.98 bytes/ns  24.11 bytes/ns
1647 byte block: 23.96 bytes/ns  24.09 bytes/ns
1646 byte block: 23.96 bytes/ns  24.08 bytes/ns
1645 byte block: 23.93 bytes/ns  24.06 bytes/ns
1644 byte block: 23.92 bytes/ns  24.05 bytes/ns
1643 byte block: 23.91 bytes/ns  24.04 bytes/ns
1642 byte block: 23.89 bytes/ns  24.02 bytes/ns
1641 byte block: 23.88 bytes/ns  24.01 bytes/ns
1640 byte block: 23.97 bytes/ns  24.10 bytes/ns
1639 byte block: 23.95 bytes/ns  24.08 bytes/ns
1638 byte block: 23.94 bytes/ns  24.07 bytes/ns
1637 byte block: 23.93 bytes/ns  24.05 bytes/ns
1636 byte block: 23.90 bytes/ns  24.04 bytes/ns
1635 byte block: 23.89 bytes/ns  24.02 bytes/ns
1634 byte block: 23.88 bytes/ns  24.01 bytes/ns
1633 byte block: 23.87 bytes/ns  23.99 bytes/ns
1632 byte block: 23.95 bytes/ns  24.08 bytes/ns
1631 byte block: 23.94 bytes/ns  24.07 bytes/ns
1630 byte block: 23.92 bytes/ns  24.05 bytes/ns
1629 byte block: 23.91 bytes/ns  24.04 bytes/ns
1628 byte block: 23.89 bytes/ns  24.02 bytes/ns
1627 byte block: 23.88 bytes/ns  24.01 bytes/ns
1626 byte block: 23.87 bytes/ns  24.00 bytes/ns
1625 byte block: 23.85 bytes/ns  23.98 bytes/ns
1624 byte block: 23.94 bytes/ns  24.07 bytes/ns
1623 byte block: 23.92 bytes/ns  24.06 bytes/ns
1622 byte block: 23.91 bytes/ns  24.04 bytes/ns
1621 byte block: 23.90 bytes/ns  24.03 bytes/ns
1620 byte block: 23.88 bytes/ns  24.01 bytes/ns
1619 byte block: 23.87 bytes/ns  24.00 bytes/ns
1618 byte block: 23.85 bytes/ns  23.98 bytes/ns
1617 byte block: 23.84 bytes/ns  23.97 bytes/ns
1616 byte block: 23.93 bytes/ns  24.06 bytes/ns
1615 byte block: 23.91 bytes/ns  24.04 bytes/ns
1614 byte block: 23.90 bytes/ns  24.03 bytes/ns
1613 byte block: 23.88 bytes/ns  23.98 bytes/ns
1612 byte block: 23.87 bytes/ns  23.96 bytes/ns
1611 byte block: 23.86 bytes/ns  23.98 bytes/ns
1610 byte block: 23.84 bytes/ns  23.97 bytes/ns
1609 byte block: 23.82 bytes/ns  23.95 bytes/ns
1608 byte block: 23.92 bytes/ns  24.04 bytes/ns
1607 byte block: 23.90 bytes/ns  24.03 bytes/ns
1606 byte block: 23.89 bytes/ns  24.01 bytes/ns
1605 byte block: 23.87 bytes/ns  24.00 bytes/ns
1604 byte block: 23.86 bytes/ns  23.98 bytes/ns
1603 byte block: 23.84 bytes/ns  23.97 bytes/ns
1602 byte block: 23.83 bytes/ns  23.95 bytes/ns
1601 byte block: 23.81 bytes/ns  23.94 bytes/ns
1600 byte block: 23.90 bytes/ns  24.03 bytes/ns
1599 byte block: 23.89 bytes/ns  24.02 bytes/ns
1598 byte block: 23.87 bytes/ns  24.00 bytes/ns
1597 byte block: 23.86 bytes/ns  23.99 bytes/ns
1596 byte block: 23.85 bytes/ns  23.97 bytes/ns
1595 byte block: 23.83 bytes/ns  23.95 bytes/ns
1594 byte block: 23.82 bytes/ns  23.94 bytes/ns
1593 byte block: 23.80 bytes/ns  23.93 bytes/ns
1592 byte block: 23.89 bytes/ns  24.02 bytes/ns
1591 byte block: 23.87 bytes/ns  24.00 bytes/ns
1590 byte block: 23.86 bytes/ns  23.99 bytes/ns
1589 byte block: 23.85 bytes/ns  23.97 bytes/ns
1588 byte block: 23.83 bytes/ns  23.95 bytes/ns
1587 byte block: 23.82 bytes/ns  23.94 bytes/ns
1586 byte block: 23.80 bytes/ns  23.93 bytes/ns
1585 byte block: 23.79 bytes/ns  23.88 bytes/ns
1584 byte block: 23.88 bytes/ns  24.01 bytes/ns
1583 byte block: 23.86 bytes/ns  23.99 bytes/ns
1582 byte block: 23.85 bytes/ns  23.98 bytes/ns
1581 byte block: 23.83 bytes/ns  23.96 bytes/ns
1580 byte block: 23.82 bytes/ns  23.95 bytes/ns
1579 byte block: 23.80 bytes/ns  23.93 bytes/ns
1578 byte block: 23.79 bytes/ns  23.92 bytes/ns
1577 byte block: 23.78 bytes/ns  23.90 bytes/ns
1576 byte block: 23.86 bytes/ns  23.99 bytes/ns
1575 byte block: 23.85 bytes/ns  23.98 bytes/ns
1574 byte block: 23.84 bytes/ns  23.96 bytes/ns
1573 byte block: 23.82 bytes/ns  23.95 bytes/ns
1572 byte block: 23.81 bytes/ns  23.93 bytes/ns
1571 byte block: 23.79 bytes/ns  23.92 bytes/ns
1570 byte block: 23.77 bytes/ns  23.91 bytes/ns
1569 byte block: 23.76 bytes/ns  23.89 bytes/ns
1568 byte block: 23.85 bytes/ns  23.98 bytes/ns
1567 byte block: 23.92 bytes/ns  23.97 bytes/ns
1566 byte block: 23.82 bytes/ns  23.95 bytes/ns
1565 byte block: 23.80 bytes/ns  23.94 bytes/ns
1564 byte block: 23.79 bytes/ns  23.92 bytes/ns
1563 byte block: 23.77 bytes/ns  23.91 bytes/ns
1562 byte block: 23.76 bytes/ns  23.89 bytes/ns
1561 byte block: 23.74 bytes/ns  23.87 bytes/ns
1560 byte block: 23.83 bytes/ns  23.97 bytes/ns
1559 byte block: 23.82 bytes/ns  23.95 bytes/ns
1558 byte block: 23.80 bytes/ns  23.94 bytes/ns
1557 byte block: 23.79 bytes/ns  23.92 bytes/ns
1556 byte block: 23.78 bytes/ns  23.91 bytes/ns
1555 byte block: 23.76 bytes/ns  23.89 bytes/ns
1554 byte block: 23.74 bytes/ns  23.87 bytes/ns
1553 byte block: 23.73 bytes/ns  23.86 bytes/ns
1552 byte block: 23.82 bytes/ns  23.95 bytes/ns
1551 byte block: 23.81 bytes/ns  23.94 bytes/ns
1550 byte block: 23.79 bytes/ns  23.92 bytes/ns
1549 byte block: 23.78 bytes/ns  23.91 bytes/ns
1548 byte block: 23.76 bytes/ns  23.89 bytes/ns
1547 byte block: 23.74 bytes/ns  23.88 bytes/ns
1546 byte block: 23.73 bytes/ns  23.86 bytes/ns
1545 byte block: 23.72 bytes/ns  23.85 bytes/ns
1544 byte block: 23.81 bytes/ns  23.94 bytes/ns
1543 byte block: 23.79 bytes/ns  23.93 bytes/ns
1542 byte block: 23.78 bytes/ns  23.91 bytes/ns
1541 byte block: 23.76 bytes/ns  23.90 bytes/ns
1540 byte block: 23.74 bytes/ns  23.88 bytes/ns
1539 byte block: 23.73 bytes/ns  23.86 bytes/ns
1538 byte block: 23.72 bytes/ns  23.84 bytes/ns
1537 byte block: 23.70 bytes/ns  23.83 bytes/ns
1536 byte block: 23.79 bytes/ns  23.92 bytes/ns
1535 byte block: 23.78 bytes/ns  23.91 bytes/ns
1534 byte block: 23.76 bytes/ns  23.89 bytes/ns
1533 byte block: 23.75 bytes/ns  23.88 bytes/ns
1532 byte block: 23.73 bytes/ns  23.86 bytes/ns
1531 byte block: 23.72 bytes/ns  23.84 bytes/ns
1530 byte block: 23.70 bytes/ns  23.83 bytes/ns
1529 byte block: 23.69 bytes/ns  23.82 bytes/ns
1528 byte block: 23.78 bytes/ns  23.91 bytes/ns
1527 byte block: 23.77 bytes/ns  23.89 bytes/ns
1526 byte block: 23.75 bytes/ns  23.88 bytes/ns
1525 byte block: 23.73 bytes/ns  23.87 bytes/ns
1524 byte block: 23.72 bytes/ns  23.85 bytes/ns
1523 byte block: 23.70 bytes/ns  23.83 bytes/ns
1522 byte block: 23.69 bytes/ns  23.82 bytes/ns
1521 byte block: 23.67 bytes/ns  23.80 bytes/ns
1520 byte block: 23.77 bytes/ns  23.90 bytes/ns
1519 byte block: 23.75 bytes/ns  23.88 bytes/ns
1518 byte block: 23.73 bytes/ns  23.86 bytes/ns
1517 byte block: 23.72 bytes/ns  23.85 bytes/ns
1516 byte block: 23.70 bytes/ns  23.83 bytes/ns
1515 byte block: 23.69 bytes/ns  23.82 bytes/ns
1514 byte block: 23.67 bytes/ns  23.80 bytes/ns
1513 byte block: 23.66 bytes/ns  23.79 bytes/ns
1512 byte block: 23.75 bytes/ns  23.89 bytes/ns
1511 byte block: 23.73 bytes/ns  23.87 bytes/ns
1510 byte block: 23.72 bytes/ns  23.85 bytes/ns
1509 byte block: 23.70 bytes/ns  23.80 bytes/ns
1508 byte block: 23.69 bytes/ns  23.82 bytes/ns
1507 byte block: 23.68 bytes/ns  23.80 bytes/ns
1506 byte block: 23.65 bytes/ns  23.79 bytes/ns
1505 byte block: 23.64 bytes/ns  23.77 bytes/ns
1504 byte block: 23.74 bytes/ns  23.87 bytes/ns
1503 byte block: 23.72 bytes/ns  23.86 bytes/ns
1502 byte block: 23.71 bytes/ns  23.84 bytes/ns
1501 byte block: 23.69 bytes/ns  23.83 bytes/ns
1500 byte block: 23.68 bytes/ns  23.81 bytes/ns
1499 byte block: 23.66 bytes/ns  23.79 bytes/ns
1498 byte block: 23.64 bytes/ns  23.78 bytes/ns
1497 byte block: 23.63 bytes/ns  23.76 bytes/ns
1496 byte block: 23.72 bytes/ns  23.86 bytes/ns
1495 byte block: 23.71 bytes/ns  23.84 bytes/ns
1494 byte block: 23.69 bytes/ns  23.82 bytes/ns
1493 byte block: 23.67 bytes/ns  23.81 bytes/ns
1492 byte block: 23.66 bytes/ns  23.79 bytes/ns
1491 byte block: 23.64 bytes/ns  23.78 bytes/ns
1490 byte block: 23.63 bytes/ns  23.76 bytes/ns
1489 byte block: 23.61 bytes/ns  23.75 bytes/ns
1488 byte block: 23.71 bytes/ns  23.84 bytes/ns
1487 byte block: 23.69 bytes/ns  23.83 bytes/ns
1486 byte block: 23.67 bytes/ns  23.81 bytes/ns
1485 byte block: 23.66 bytes/ns  23.79 bytes/ns
1484 byte block: 23.65 bytes/ns  23.78 bytes/ns
1483 byte block: 23.62 bytes/ns  23.76 bytes/ns
1482 byte block: 23.61 bytes/ns  23.75 bytes/ns
1481 byte block: 23.60 bytes/ns  23.73 bytes/ns
1480 byte block: 23.69 bytes/ns  23.83 bytes/ns
1479 byte block: 23.68 bytes/ns  23.81 bytes/ns
1478 byte block: 23.66 bytes/ns  23.80 bytes/ns
1477 byte block: 23.64 bytes/ns  23.78 bytes/ns
1476 byte block: 23.63 bytes/ns  23.76 bytes/ns
1475 byte block: 23.61 bytes/ns  23.75 bytes/ns
1474 byte block: 23.60 bytes/ns  23.73 bytes/ns
1473 byte block: 23.58 bytes/ns  23.71 bytes/ns
1472 byte block: 23.68 bytes/ns  23.81 bytes/ns
1471 byte block: 23.66 bytes/ns  23.80 bytes/ns
1470 byte block: 23.64 bytes/ns  23.78 bytes/ns
1469 byte block: 23.63 bytes/ns  23.76 bytes/ns
1468 byte block: 23.62 bytes/ns  23.75 bytes/ns
1467 byte block: 23.60 bytes/ns  23.73 bytes/ns
1466 byte block: 23.58 bytes/ns  23.72 bytes/ns
1465 byte block: 23.56 bytes/ns  23.70 bytes/ns
1464 byte block: 23.66 bytes/ns  23.80 bytes/ns
1463 byte block: 23.65 bytes/ns  23.78 bytes/ns
1462 byte block: 23.63 bytes/ns  23.77 bytes/ns
1461 byte block: 23.62 bytes/ns  23.75 bytes/ns
1460 byte block: 23.60 bytes/ns  23.73 bytes/ns
1459 byte block: 23.58 bytes/ns  23.72 bytes/ns
1458 byte block: 23.56 bytes/ns  23.70 bytes/ns
1457 byte block: 23.54 bytes/ns  23.68 bytes/ns
1456 byte block: 23.64 bytes/ns  23.78 bytes/ns
1455 byte block: 23.63 bytes/ns  23.77 bytes/ns
1454 byte block: 23.61 bytes/ns  23.75 bytes/ns
1453 byte block: 23.60 bytes/ns  23.73 bytes/ns
1452 byte block: 23.58 bytes/ns  23.72 bytes/ns
1451 byte block: 23.56 bytes/ns  23.70 bytes/ns
1450 byte block: 23.55 bytes/ns  23.68 bytes/ns
1449 byte block: 23.53 bytes/ns  23.67 bytes/ns
1448 byte block: 23.63 bytes/ns  23.77 bytes/ns
1447 byte block: 23.61 bytes/ns  23.75 bytes/ns
1446 byte block: 23.60 bytes/ns  23.73 bytes/ns
1445 byte block: 23.58 bytes/ns  23.72 bytes/ns
1444 byte block: 23.56 bytes/ns  23.70 bytes/ns
1443 byte block: 23.55 bytes/ns  23.68 bytes/ns
1442 byte block: 23.53 bytes/ns  23.63 bytes/ns
1441 byte block: 23.51 bytes/ns  23.61 bytes/ns
1440 byte block: 23.61 bytes/ns  23.75 bytes/ns
1439 byte block: 23.60 bytes/ns  23.74 bytes/ns
1438 byte block: 23.58 bytes/ns  23.72 bytes/ns
1437 byte block: 23.56 bytes/ns  23.70 bytes/ns
1436 byte block: 23.55 bytes/ns  23.65 bytes/ns
1435 byte block: 23.53 bytes/ns  23.67 bytes/ns
1434 byte block: 23.51 bytes/ns  23.65 bytes/ns
1433 byte block: 23.50 bytes/ns  23.64 bytes/ns
1432 byte block: 23.60 bytes/ns  23.73 bytes/ns
1431 byte block: 23.58 bytes/ns  23.72 bytes/ns
1430 byte block: 23.57 bytes/ns  23.70 bytes/ns
1429 byte block: 23.55 bytes/ns  23.69 bytes/ns
1428 byte block: 23.53 bytes/ns  23.67 bytes/ns
1427 byte block: 23.52 bytes/ns  23.65 bytes/ns
1426 byte block: 23.50 bytes/ns  23.64 bytes/ns
1425 byte block: 23.48 bytes/ns  23.61 bytes/ns
1424 byte block: 23.58 bytes/ns  23.72 bytes/ns
1423 byte block: 23.57 bytes/ns  23.70 bytes/ns
1422 byte block: 23.55 bytes/ns  23.69 bytes/ns
1421 byte block: 23.53 bytes/ns  23.67 bytes/ns
1420 byte block: 23.52 bytes/ns  23.66 bytes/ns
1419 byte block: 23.50 bytes/ns  23.64 bytes/ns
1418 byte block: 23.48 bytes/ns  23.62 bytes/ns
1417 byte block: 23.47 bytes/ns  23.61 bytes/ns
1416 byte block: 23.57 bytes/ns  23.71 bytes/ns
1415 byte block: 23.55 bytes/ns  23.69 bytes/ns
1414 byte block: 23.53 bytes/ns  23.68 bytes/ns
1413 byte block: 23.51 bytes/ns  23.65 bytes/ns
1412 byte block: 23.50 bytes/ns  23.64 bytes/ns
1411 byte block: 23.49 bytes/ns  23.62 bytes/ns
1410 byte block: 23.47 bytes/ns  23.60 bytes/ns
1409 byte block: 23.45 bytes/ns  23.59 bytes/ns
1408 byte block: 23.55 bytes/ns  23.69 bytes/ns
1407 byte block: 23.53 bytes/ns  23.67 bytes/ns
1406 byte block: 23.52 bytes/ns  23.66 bytes/ns
1405 byte block: 23.50 bytes/ns  23.64 bytes/ns
1404 byte block: 23.49 bytes/ns  23.62 bytes/ns
1403 byte block: 23.47 bytes/ns  23.61 bytes/ns
1402 byte block: 23.45 bytes/ns  23.59 bytes/ns
1401 byte block: 23.44 bytes/ns  23.57 bytes/ns
1400 byte block: 23.53 bytes/ns  23.68 bytes/ns
1399 byte block: 23.52 bytes/ns  23.66 bytes/ns
1398 byte block: 23.50 bytes/ns  23.64 bytes/ns
1397 byte block: 23.48 bytes/ns  23.62 bytes/ns
1396 byte block: 23.47 bytes/ns  23.61 bytes/ns
1395 byte block: 23.45 bytes/ns  23.59 bytes/ns
1394 byte block: 23.43 bytes/ns  23.57 bytes/ns
1393 byte block: 23.41 bytes/ns  23.56 bytes/ns
1392 byte block: 23.51 bytes/ns  23.66 bytes/ns
1391 byte block: 23.50 bytes/ns  23.64 bytes/ns
1390 byte block: 23.48 bytes/ns  23.62 bytes/ns
1389 byte block: 23.46 bytes/ns  23.61 bytes/ns
1388 byte block: 23.45 bytes/ns  23.59 bytes/ns
1387 byte block: 23.43 bytes/ns  23.57 bytes/ns
1386 byte block: 23.42 bytes/ns  23.55 bytes/ns
1385 byte block: 23.40 bytes/ns  23.54 bytes/ns
1384 byte block: 23.50 bytes/ns  23.64 bytes/ns
1383 byte block: 23.49 bytes/ns  23.62 bytes/ns
1382 byte block: 23.46 bytes/ns  23.61 bytes/ns
1381 byte block: 23.45 bytes/ns  23.59 bytes/ns
1380 byte block: 23.43 bytes/ns  23.57 bytes/ns
1379 byte block: 23.42 bytes/ns  23.56 bytes/ns
1378 byte block: 23.40 bytes/ns  23.54 bytes/ns
1377 byte block: 23.38 bytes/ns  23.52 bytes/ns
1376 byte block: 23.48 bytes/ns  23.62 bytes/ns
1375 byte block: 23.47 bytes/ns  23.60 bytes/ns
1374 byte block: 23.45 bytes/ns  23.58 bytes/ns
1373 byte block: 23.43 bytes/ns  23.57 bytes/ns
1372 byte block: 23.41 bytes/ns  23.55 bytes/ns
1371 byte block: 23.40 bytes/ns  23.54 bytes/ns
1370 byte block: 23.38 bytes/ns  23.52 bytes/ns
1369 byte block: 23.36 bytes/ns  23.50 bytes/ns
1368 byte block: 23.46 bytes/ns  23.60 bytes/ns
1367 byte block: 23.45 bytes/ns  23.55 bytes/ns
1366 byte block: 23.43 bytes/ns  23.57 bytes/ns
1365 byte block: 23.41 bytes/ns  23.55 bytes/ns
1364 byte block: 23.40 bytes/ns  23.53 bytes/ns
1363 byte block: 23.38 bytes/ns  23.52 bytes/ns
1362 byte block: 23.36 bytes/ns  23.50 bytes/ns
1361 byte block: 23.34 bytes/ns  23.48 bytes/ns
1360 byte block: 23.44 bytes/ns  23.59 bytes/ns
1359 byte block: 23.43 bytes/ns  23.56 bytes/ns
1358 byte block: 23.39 bytes/ns  23.55 bytes/ns
1357 byte block: 22.02 bytes/ns  23.54 bytes/ns
1356 byte block: 22.00 bytes/ns  23.52 bytes/ns
1355 byte block: 21.99 bytes/ns  23.50 bytes/ns
1354 byte block: 21.97 bytes/ns  23.49 bytes/ns
1353 byte block: 21.96 bytes/ns  23.47 bytes/ns
1352 byte block: 22.05 bytes/ns  23.57 bytes/ns
1351 byte block: 16.64 bytes/ns  23.55 bytes/ns
1350 byte block: 16.25 bytes/ns  23.54 bytes/ns
1349 byte block: 17.02 bytes/ns  23.52 bytes/ns
1348 byte block: 21.98 bytes/ns  23.50 bytes/ns
1347 byte block: 23.33 bytes/ns  23.49 bytes/ns
1346 byte block: 23.31 bytes/ns  23.47 bytes/ns
1345 byte block: 23.31 bytes/ns  23.45 bytes/ns
1344 byte block: 23.40 bytes/ns  23.56 bytes/ns
1343 byte block: 23.39 bytes/ns  23.54 bytes/ns
1342 byte block: 23.38 bytes/ns  23.52 bytes/ns
1341 byte block: 23.36 bytes/ns  23.50 bytes/ns
1340 byte block: 23.34 bytes/ns  23.49 bytes/ns
1339 byte block: 23.32 bytes/ns  23.47 bytes/ns
1338 byte block: 23.31 bytes/ns  23.45 bytes/ns
1337 byte block: 23.29 bytes/ns  23.44 bytes/ns
1336 byte block: 23.38 bytes/ns  23.54 bytes/ns
1335 byte block: 23.38 bytes/ns  23.52 bytes/ns
1334 byte block: 23.36 bytes/ns  23.50 bytes/ns
1333 byte block: 23.34 bytes/ns  23.48 bytes/ns
1332 byte block: 23.32 bytes/ns  23.47 bytes/ns
1331 byte block: 23.30 bytes/ns  23.45 bytes/ns
1330 byte block: 23.29 bytes/ns  23.43 bytes/ns
1329 byte block: 23.27 bytes/ns  23.42 bytes/ns
1328 byte block: 23.38 bytes/ns  23.52 bytes/ns
1327 byte block: 23.36 bytes/ns  23.50 bytes/ns
1326 byte block: 23.34 bytes/ns  23.48 bytes/ns
1325 byte block: 23.32 bytes/ns  23.47 bytes/ns
1324 byte block: 23.30 bytes/ns  23.45 bytes/ns
1323 byte block: 23.28 bytes/ns  23.43 bytes/ns
1322 byte block: 23.27 bytes/ns  23.42 bytes/ns
1321 byte block: 23.25 bytes/ns  23.40 bytes/ns
1320 byte block: 23.36 bytes/ns  23.50 bytes/ns
1319 byte block: 23.34 bytes/ns  23.49 bytes/ns
1318 byte block: 23.32 bytes/ns  23.47 bytes/ns
1317 byte block: 23.30 bytes/ns  23.45 bytes/ns
1316 byte block: 23.29 bytes/ns  23.43 bytes/ns
1315 byte block: 23.27 bytes/ns  23.42 bytes/ns
1314 byte block: 23.25 bytes/ns  23.40 bytes/ns
1313 byte block: 23.23 bytes/ns  23.38 bytes/ns
1312 byte block: 21.96 bytes/ns  23.49 bytes/ns
1311 byte block: 21.95 bytes/ns  23.47 bytes/ns
1310 byte block: 21.93 bytes/ns  23.45 bytes/ns
1309 byte block: 21.92 bytes/ns  23.43 bytes/ns
1308 byte block: 23.27 bytes/ns  23.41 bytes/ns
1307 byte block: 23.25 bytes/ns  23.39 bytes/ns
1306 byte block: 23.23 bytes/ns  23.38 bytes/ns
1305 byte block: 23.21 bytes/ns  23.36 bytes/ns
1304 byte block: 23.32 bytes/ns  23.47 bytes/ns
1303 byte block: 23.30 bytes/ns  23.45 bytes/ns
1302 byte block: 23.28 bytes/ns  23.43 bytes/ns
1301 byte block: 23.27 bytes/ns  23.41 bytes/ns
1300 byte block: 23.25 bytes/ns  23.40 bytes/ns
1299 byte block: 23.23 bytes/ns  23.38 bytes/ns
1298 byte block: 23.21 bytes/ns  23.36 bytes/ns
1297 byte block: 23.19 bytes/ns  23.34 bytes/ns
1296 byte block: 23.30 bytes/ns  23.45 bytes/ns
1295 byte block: 23.27 bytes/ns  23.42 bytes/ns
1294 byte block: 23.26 bytes/ns  23.41 bytes/ns
1293 byte block: 23.24 bytes/ns  23.39 bytes/ns
1292 byte block: 23.23 bytes/ns  23.38 bytes/ns
1291 byte block: 23.21 bytes/ns  23.36 bytes/ns
1290 byte block: 23.18 bytes/ns  23.34 bytes/ns
1289 byte block: 23.17 bytes/ns  23.32 bytes/ns
1288 byte block: 23.28 bytes/ns  23.39 bytes/ns
1287 byte block: 23.26 bytes/ns  23.41 bytes/ns
1286 byte block: 23.24 bytes/ns  23.39 bytes/ns
1285 byte block: 23.22 bytes/ns  23.37 bytes/ns
1284 byte block: 23.19 bytes/ns  23.36 bytes/ns
1283 byte block: 23.19 bytes/ns  23.34 bytes/ns
1282 byte block: 23.17 bytes/ns  23.32 bytes/ns
1281 byte block: 23.15 bytes/ns  23.30 bytes/ns
1280 byte block: 23.26 bytes/ns  23.40 bytes/ns
1279 byte block: 23.23 bytes/ns  23.39 bytes/ns
1278 byte block: 23.21 bytes/ns  23.37 bytes/ns
1277 byte block: 23.19 bytes/ns  23.35 bytes/ns
1276 byte block: 23.18 bytes/ns  23.34 bytes/ns
1275 byte block: 23.17 bytes/ns  23.31 bytes/ns
1274 byte block: 23.16 bytes/ns  23.30 bytes/ns
1273 byte block: 23.12 bytes/ns  23.28 bytes/ns
1272 byte block: 23.24 bytes/ns  23.39 bytes/ns
1271 byte block: 23.21 bytes/ns  23.37 bytes/ns
1270 byte block: 23.20 bytes/ns  23.35 bytes/ns
1269 byte block: 23.18 bytes/ns  23.33 bytes/ns
1268 byte block: 23.17 bytes/ns  23.31 bytes/ns
1267 byte block: 23.15 bytes/ns  23.30 bytes/ns
1266 byte block: 23.13 bytes/ns  23.28 bytes/ns
1265 byte block: 23.11 bytes/ns  23.26 bytes/ns
1264 byte block: 23.22 bytes/ns  23.37 bytes/ns
1263 byte block: 23.20 bytes/ns  23.35 bytes/ns
1262 byte block: 23.18 bytes/ns  23.33 bytes/ns
1261 byte block: 23.17 bytes/ns  23.32 bytes/ns
1260 byte block: 23.15 bytes/ns  23.30 bytes/ns
1259 byte block: 23.13 bytes/ns  23.28 bytes/ns
1258 byte block: 23.12 bytes/ns  23.26 bytes/ns
1257 byte block: 23.09 bytes/ns  23.24 bytes/ns
1256 byte block: 23.20 bytes/ns  23.35 bytes/ns
1255 byte block: 23.18 bytes/ns  23.33 bytes/ns
1254 byte block: 23.16 bytes/ns  23.31 bytes/ns
1253 byte block: 21.79 bytes/ns  23.30 bytes/ns
1252 byte block: 23.13 bytes/ns  23.28 bytes/ns
1251 byte block: 23.11 bytes/ns  23.26 bytes/ns
1250 byte block: 23.09 bytes/ns  23.24 bytes/ns
1249 byte block: 23.07 bytes/ns  23.22 bytes/ns
1248 byte block: 23.19 bytes/ns  23.33 bytes/ns
1247 byte block: 23.16 bytes/ns  23.31 bytes/ns
1246 byte block: 23.13 bytes/ns  23.30 bytes/ns
1245 byte block: 23.12 bytes/ns  23.28 bytes/ns
1244 byte block: 23.11 bytes/ns  23.26 bytes/ns
1243 byte block: 23.09 bytes/ns  23.24 bytes/ns
1242 byte block: 23.07 bytes/ns  23.22 bytes/ns
1241 byte block: 23.05 bytes/ns  23.20 bytes/ns
1240 byte block: 23.16 bytes/ns  23.31 bytes/ns
1239 byte block: 23.14 bytes/ns  23.30 bytes/ns
1238 byte block: 23.11 bytes/ns  23.28 bytes/ns
1237 byte block: 21.75 bytes/ns  23.26 bytes/ns
1236 byte block: 23.08 bytes/ns  23.24 bytes/ns
1235 byte block: 23.07 bytes/ns  23.22 bytes/ns
1234 byte block: 23.05 bytes/ns  23.20 bytes/ns
1233 byte block: 23.03 bytes/ns  23.19 bytes/ns
1232 byte block: 23.14 bytes/ns  23.29 bytes/ns
1231 byte block: 23.12 bytes/ns  23.27 bytes/ns
1230 byte block: 23.10 bytes/ns  23.26 bytes/ns
1229 byte block: 21.73 bytes/ns  23.24 bytes/ns
1228 byte block: 23.07 bytes/ns  23.22 bytes/ns
1227 byte block: 23.05 bytes/ns  23.20 bytes/ns
1226 byte block: 23.03 bytes/ns  23.18 bytes/ns
1225 byte block: 23.01 bytes/ns  23.16 bytes/ns
1224 byte block: 23.12 bytes/ns  23.27 bytes/ns
1223 byte block: 23.10 bytes/ns  23.25 bytes/ns
1222 byte block: 23.09 bytes/ns  23.23 bytes/ns
1221 byte block: 23.06 bytes/ns  23.18 bytes/ns
1220 byte block: 21.69 bytes/ns  23.19 bytes/ns
1219 byte block: 23.03 bytes/ns  23.18 bytes/ns
1218 byte block: 23.01 bytes/ns  23.16 bytes/ns
1217 byte block: 22.99 bytes/ns  23.14 bytes/ns
1216 byte block: 23.10 bytes/ns  23.22 bytes/ns
1215 byte block: 21.73 bytes/ns  23.23 bytes/ns
1214 byte block: 21.70 bytes/ns  23.21 bytes/ns
1213 byte block: 23.04 bytes/ns  23.19 bytes/ns
1212 byte block: 23.01 bytes/ns  23.17 bytes/ns
1211 byte block: 23.00 bytes/ns  23.15 bytes/ns
1210 byte block: 22.98 bytes/ns  23.14 bytes/ns
1209 byte block: 22.96 bytes/ns  23.11 bytes/ns
1208 byte block: 23.08 bytes/ns  23.23 bytes/ns
1207 byte block: 23.06 bytes/ns  23.21 bytes/ns
1206 byte block: 23.02 bytes/ns  23.19 bytes/ns
1205 byte block: 23.01 bytes/ns  23.17 bytes/ns
1204 byte block: 22.99 bytes/ns  23.15 bytes/ns
1203 byte block: 22.97 bytes/ns  23.13 bytes/ns
1202 byte block: 22.96 bytes/ns  23.12 bytes/ns
1201 byte block: 22.93 bytes/ns  23.06 bytes/ns
1200 byte block: 23.05 bytes/ns  23.21 bytes/ns
1199 byte block: 23.03 bytes/ns  23.19 bytes/ns
1198 byte block: 23.02 bytes/ns  23.17 bytes/ns
1197 byte block: 23.00 bytes/ns  23.15 bytes/ns
1196 byte block: 22.97 bytes/ns  23.13 bytes/ns
1195 byte block: 22.96 bytes/ns  23.11 bytes/ns
1194 byte block: 22.94 bytes/ns  23.06 bytes/ns
1193 byte block: 22.91 bytes/ns  23.07 bytes/ns
1192 byte block: 23.02 bytes/ns  23.19 bytes/ns
1191 byte block: 23.01 bytes/ns  23.17 bytes/ns
1190 byte block: 22.99 bytes/ns  23.15 bytes/ns
1189 byte block: 22.97 bytes/ns  23.13 bytes/ns
1188 byte block: 22.95 bytes/ns  23.11 bytes/ns
1187 byte block: 22.94 bytes/ns  23.10 bytes/ns
1186 byte block: 22.91 bytes/ns  23.07 bytes/ns
1185 byte block: 22.90 bytes/ns  23.06 bytes/ns
1184 byte block: 23.01 bytes/ns  23.17 bytes/ns
1183 byte block: 22.99 bytes/ns  23.15 bytes/ns
1182 byte block: 21.62 bytes/ns  23.13 bytes/ns
1181 byte block: 22.95 bytes/ns  23.11 bytes/ns
1180 byte block: 21.59 bytes/ns  23.09 bytes/ns
1179 byte block: 22.92 bytes/ns  23.07 bytes/ns
1178 byte block: 22.89 bytes/ns  23.05 bytes/ns
1177 byte block: 22.88 bytes/ns  23.03 bytes/ns
1176 byte block: 22.99 bytes/ns  23.14 bytes/ns
1175 byte block: 22.97 bytes/ns  23.13 bytes/ns
1174 byte block: 22.95 bytes/ns  23.11 bytes/ns
1173 byte block: 22.93 bytes/ns  23.09 bytes/ns
1172 byte block: 22.91 bytes/ns  23.07 bytes/ns
1171 byte block: 22.89 bytes/ns  23.05 bytes/ns
1170 byte block: 22.87 bytes/ns  23.03 bytes/ns
1169 byte block: 22.86 bytes/ns  23.01 bytes/ns
1168 byte block: 22.97 bytes/ns  23.12 bytes/ns
1167 byte block: 22.94 bytes/ns  23.10 bytes/ns
1166 byte block: 22.92 bytes/ns  23.08 bytes/ns
1165 byte block: 22.91 bytes/ns  23.07 bytes/ns
1164 byte block: 22.89 bytes/ns  23.04 bytes/ns
1163 byte block: 22.87 bytes/ns  23.03 bytes/ns
1162 byte block: 22.85 bytes/ns  23.01 bytes/ns
1161 byte block: 22.83 bytes/ns  22.99 bytes/ns
1160 byte block: 22.95 bytes/ns  23.10 bytes/ns
1159 byte block: 22.92 bytes/ns  23.08 bytes/ns
1158 byte block: 22.91 bytes/ns  23.06 bytes/ns
1157 byte block: 22.88 bytes/ns  23.04 bytes/ns
1156 byte block: 22.86 bytes/ns  23.02 bytes/ns
1155 byte block: 22.85 bytes/ns  23.01 bytes/ns
1154 byte block: 22.82 bytes/ns  22.98 bytes/ns
1153 byte block: 22.80 bytes/ns  22.96 bytes/ns
1152 byte block: 22.92 bytes/ns  23.08 bytes/ns
1151 byte block: 22.90 bytes/ns  23.06 bytes/ns
1150 byte block: 22.88 bytes/ns  23.04 bytes/ns
1149 byte block: 22.86 bytes/ns  23.02 bytes/ns
1148 byte block: 22.84 bytes/ns  23.00 bytes/ns
1147 byte block: 22.82 bytes/ns  22.98 bytes/ns
1146 byte block: 22.80 bytes/ns  22.96 bytes/ns
1145 byte block: 22.78 bytes/ns  22.94 bytes/ns
1144 byte block: 22.89 bytes/ns  23.06 bytes/ns
1143 byte block: 22.87 bytes/ns  23.04 bytes/ns
1142 byte block: 22.86 bytes/ns  23.01 bytes/ns
1141 byte block: 22.84 bytes/ns  22.99 bytes/ns
1140 byte block: 22.82 bytes/ns  22.97 bytes/ns
1139 byte block: 22.80 bytes/ns  22.95 bytes/ns
1138 byte block: 22.78 bytes/ns  22.93 bytes/ns
1137 byte block: 22.75 bytes/ns  22.92 bytes/ns
1136 byte block: 22.87 bytes/ns  23.03 bytes/ns
1135 byte block: 22.85 bytes/ns  23.01 bytes/ns
1134 byte block: 22.83 bytes/ns  22.99 bytes/ns
1133 byte block: 22.80 bytes/ns  22.97 bytes/ns
1132 byte block: 22.79 bytes/ns  22.95 bytes/ns
1131 byte block: 22.77 bytes/ns  22.93 bytes/ns
1130 byte block: 22.75 bytes/ns  22.91 bytes/ns
1129 byte block: 22.73 bytes/ns  22.89 bytes/ns
1128 byte block: 22.85 bytes/ns  23.01 bytes/ns
1127 byte block: 22.83 bytes/ns  22.99 bytes/ns
1126 byte block: 22.80 bytes/ns  22.93 bytes/ns
1125 byte block: 22.79 bytes/ns  22.95 bytes/ns
1124 byte block: 22.76 bytes/ns  22.93 bytes/ns
1123 byte block: 22.75 bytes/ns  22.90 bytes/ns
1122 byte block: 22.72 bytes/ns  22.88 bytes/ns
1121 byte block: 22.70 bytes/ns  22.86 bytes/ns
1120 byte block: 22.83 bytes/ns  22.98 bytes/ns
1119 byte block: 22.80 bytes/ns  22.96 bytes/ns
1118 byte block: 22.78 bytes/ns  22.94 bytes/ns
1117 byte block: 22.76 bytes/ns  22.92 bytes/ns
1116 byte block: 22.73 bytes/ns  22.90 bytes/ns
1115 byte block: 22.72 bytes/ns  22.88 bytes/ns
1114 byte block: 22.71 bytes/ns  22.86 bytes/ns
1113 byte block: 22.67 bytes/ns  22.84 bytes/ns
1112 byte block: 22.79 bytes/ns  22.96 bytes/ns
1111 byte block: 22.78 bytes/ns  22.94 bytes/ns
1110 byte block: 22.75 bytes/ns  22.92 bytes/ns
1109 byte block: 22.74 bytes/ns  22.90 bytes/ns
1108 byte block: 22.72 bytes/ns  22.88 bytes/ns
1107 byte block: 22.70 bytes/ns  22.86 bytes/ns
1106 byte block: 22.68 bytes/ns  22.84 bytes/ns
1105 byte block: 22.65 bytes/ns  22.82 bytes/ns
1104 byte block: 22.78 bytes/ns  22.94 bytes/ns
1103 byte block: 22.75 bytes/ns  22.92 bytes/ns
1102 byte block: 22.74 bytes/ns  22.90 bytes/ns
1101 byte block: 22.71 bytes/ns  22.88 bytes/ns
1100 byte block: 22.69 bytes/ns  22.85 bytes/ns
1099 byte block: 22.67 bytes/ns  22.83 bytes/ns
1098 byte block: 22.65 bytes/ns  22.82 bytes/ns
1097 byte block: 22.63 bytes/ns  22.79 bytes/ns
1096 byte block: 22.75 bytes/ns  22.91 bytes/ns
1095 byte block: 22.73 bytes/ns  22.89 bytes/ns
1094 byte block: 22.71 bytes/ns  22.87 bytes/ns
1093 byte block: 22.69 bytes/ns  22.85 bytes/ns
1092 byte block: 22.67 bytes/ns  22.83 bytes/ns
1091 byte block: 22.65 bytes/ns  22.81 bytes/ns
1090 byte block: 22.62 bytes/ns  22.79 bytes/ns
1089 byte block: 22.61 bytes/ns  22.77 bytes/ns
1088 byte block: 22.73 bytes/ns  22.89 bytes/ns
1087 byte block: 22.71 bytes/ns  22.87 bytes/ns
1086 byte block: 22.69 bytes/ns  22.85 bytes/ns
1085 byte block: 22.66 bytes/ns  22.82 bytes/ns
1084 byte block: 22.64 bytes/ns  22.80 bytes/ns
1083 byte block: 22.62 bytes/ns  22.78 bytes/ns
1082 byte block: 22.60 bytes/ns  22.76 bytes/ns
1081 byte block: 22.58 bytes/ns  22.74 bytes/ns
1080 byte block: 22.70 bytes/ns  22.86 bytes/ns
1079 byte block: 22.68 bytes/ns  22.84 bytes/ns
1078 byte block: 22.66 bytes/ns  22.82 bytes/ns
1077 byte block: 22.64 bytes/ns  22.80 bytes/ns
1076 byte block: 22.61 bytes/ns  22.78 bytes/ns
1075 byte block: 22.59 bytes/ns  22.76 bytes/ns
1074 byte block: 22.57 bytes/ns  22.74 bytes/ns
1073 byte block: 22.55 bytes/ns  22.71 bytes/ns
1072 byte block: 22.67 bytes/ns  22.84 bytes/ns
1071 byte block: 22.65 bytes/ns  22.82 bytes/ns
1070 byte block: 22.63 bytes/ns  22.80 bytes/ns
1069 byte block: 22.61 bytes/ns  22.77 bytes/ns
1068 byte block: 22.59 bytes/ns  22.75 bytes/ns
1067 byte block: 22.57 bytes/ns  22.73 bytes/ns
1066 byte block: 22.55 bytes/ns  22.70 bytes/ns
1065 byte block: 22.53 bytes/ns  22.69 bytes/ns
1064 byte block: 22.64 bytes/ns  22.81 bytes/ns
1063 byte block: 22.62 bytes/ns  22.79 bytes/ns
1062 byte block: 22.60 bytes/ns  22.77 bytes/ns
1061 byte block: 22.57 bytes/ns  22.74 bytes/ns
1060 byte block: 22.55 bytes/ns  22.73 bytes/ns
1059 byte block: 22.54 bytes/ns  22.70 bytes/ns
1058 byte block: 22.52 bytes/ns  22.65 bytes/ns
1057 byte block: 22.49 bytes/ns  22.66 bytes/ns
1056 byte block: 22.61 bytes/ns  22.75 bytes/ns
1055 byte block: 22.60 bytes/ns  22.76 bytes/ns
1054 byte block: 22.57 bytes/ns  22.74 bytes/ns
1053 byte block: 22.55 bytes/ns  22.72 bytes/ns
1052 byte block: 22.53 bytes/ns  22.70 bytes/ns
1051 byte block: 22.51 bytes/ns  22.68 bytes/ns
1050 byte block: 22.49 bytes/ns  22.66 bytes/ns
1049 byte block: 22.47 bytes/ns  22.63 bytes/ns
1048 byte block: 22.59 bytes/ns  22.75 bytes/ns
1047 byte block: 22.57 bytes/ns  22.74 bytes/ns
1046 byte block: 22.55 bytes/ns  22.71 bytes/ns
1045 byte block: 22.52 bytes/ns  22.69 bytes/ns
1044 byte block: 22.49 bytes/ns  22.67 bytes/ns
1043 byte block: 22.48 bytes/ns  22.65 bytes/ns
1042 byte block: 22.46 bytes/ns  22.63 bytes/ns
1041 byte block: 22.43 bytes/ns  22.60 bytes/ns
1040 byte block: 22.56 bytes/ns  22.73 bytes/ns
1039 byte block: 22.53 bytes/ns  22.71 bytes/ns
1038 byte block: 22.51 bytes/ns  22.68 bytes/ns
1037 byte block: 22.50 bytes/ns  22.66 bytes/ns
1036 byte block: 22.48 bytes/ns  22.64 bytes/ns
1035 byte block: 22.45 bytes/ns  22.62 bytes/ns
1034 byte block: 22.42 bytes/ns  22.60 bytes/ns
1033 byte block: 22.41 bytes/ns  22.58 bytes/ns
1032 byte block: 22.54 bytes/ns  22.70 bytes/ns
1031 byte block: 22.52 bytes/ns  22.68 bytes/ns
1030 byte block: 22.49 bytes/ns  22.66 bytes/ns
1029 byte block: 22.47 bytes/ns  22.64 bytes/ns
1028 byte block: 22.45 bytes/ns  22.61 bytes/ns
1027 byte block: 22.43 bytes/ns  22.60 bytes/ns
1026 byte block: 22.41 bytes/ns  22.57 bytes/ns
1025 byte block: 22.38 bytes/ns  22.55 bytes/ns
1024 byte block: 22.51 bytes/ns  22.67 bytes/ns
1023 byte block: 22.49 bytes/ns  22.65 bytes/ns
1022 byte block: 22.47 bytes/ns  22.63 bytes/ns
1021 byte block: 22.45 bytes/ns  22.61 bytes/ns
1020 byte block: 22.42 bytes/ns  22.59 bytes/ns
1019 byte block: 22.40 bytes/ns  22.57 bytes/ns
1018 byte block: 22.38 bytes/ns  22.54 bytes/ns
1017 byte block: 22.36 bytes/ns  22.52 bytes/ns
1016 byte block: 22.48 bytes/ns  22.65 bytes/ns
1015 byte block: 22.46 bytes/ns  22.63 bytes/ns
1014 byte block: 22.44 bytes/ns  22.61 bytes/ns
1013 byte block: 22.41 bytes/ns  22.58 bytes/ns
1012 byte block: 22.39 bytes/ns  22.56 bytes/ns
1011 byte block: 22.37 bytes/ns  22.54 bytes/ns
1010 byte block: 22.35 bytes/ns  22.52 bytes/ns
1009 byte block: 22.33 bytes/ns  22.49 bytes/ns
1008 byte block: 22.45 bytes/ns  22.62 bytes/ns
1007 byte block: 22.43 bytes/ns  22.60 bytes/ns
1006 byte block: 22.41 bytes/ns  22.58 bytes/ns
1005 byte block: 22.38 bytes/ns  22.56 bytes/ns
1004 byte block: 22.36 bytes/ns  22.53 bytes/ns
1003 byte block: 22.34 bytes/ns  22.51 bytes/ns
1002 byte block: 22.31 bytes/ns  22.49 bytes/ns
1001 byte block: 22.30 bytes/ns  22.46 bytes/ns
1000 byte block: 22.42 bytes/ns  22.59 bytes/ns
999 byte block: 22.40 bytes/ns   22.57 bytes/ns
998 byte block: 22.38 bytes/ns   22.54 bytes/ns
997 byte block: 21.04 bytes/ns   22.53 bytes/ns
996 byte block: 21.02 bytes/ns   22.50 bytes/ns
995 byte block: 22.31 bytes/ns   22.48 bytes/ns
994 byte block: 22.29 bytes/ns   22.46 bytes/ns
993 byte block: 22.26 bytes/ns   22.43 bytes/ns
992 byte block: 22.39 bytes/ns   22.56 bytes/ns
991 byte block: 22.37 bytes/ns   22.54 bytes/ns
990 byte block: 22.35 bytes/ns   22.52 bytes/ns
989 byte block: 22.33 bytes/ns   22.49 bytes/ns
988 byte block: 22.30 bytes/ns   22.47 bytes/ns
987 byte block: 22.27 bytes/ns   22.45 bytes/ns
986 byte block: 22.24 bytes/ns   22.43 bytes/ns
985 byte block: 22.22 bytes/ns   22.40 bytes/ns
984 byte block: 22.36 bytes/ns   22.53 bytes/ns
983 byte block: 22.34 bytes/ns   22.51 bytes/ns
982 byte block: 22.32 bytes/ns   22.48 bytes/ns
981 byte block: 22.29 bytes/ns   22.46 bytes/ns
980 byte block: 22.27 bytes/ns   22.44 bytes/ns
979 byte block: 22.24 bytes/ns   22.42 bytes/ns
978 byte block: 22.23 bytes/ns   22.40 bytes/ns
977 byte block: 22.20 bytes/ns   22.37 bytes/ns
976 byte block: 22.33 bytes/ns   22.50 bytes/ns
975 byte block: 22.30 bytes/ns   22.48 bytes/ns
974 byte block: 22.28 bytes/ns   22.45 bytes/ns
973 byte block: 22.26 bytes/ns   22.43 bytes/ns
972 byte block: 22.24 bytes/ns   22.41 bytes/ns
971 byte block: 22.21 bytes/ns   22.39 bytes/ns
970 byte block: 22.18 bytes/ns   22.36 bytes/ns
969 byte block: 22.16 bytes/ns   22.34 bytes/ns
968 byte block: 22.28 bytes/ns   22.47 bytes/ns
967 byte block: 22.26 bytes/ns   22.45 bytes/ns
966 byte block: 22.25 bytes/ns   22.42 bytes/ns
965 byte block: 22.23 bytes/ns   22.40 bytes/ns
964 byte block: 22.21 bytes/ns   22.38 bytes/ns
963 byte block: 22.18 bytes/ns   22.32 bytes/ns
962 byte block: 22.16 bytes/ns   22.33 bytes/ns
961 byte block: 22.13 bytes/ns   22.31 bytes/ns
960 byte block: 22.26 bytes/ns   22.41 bytes/ns
959 byte block: 22.24 bytes/ns   22.41 bytes/ns
958 byte block: 22.22 bytes/ns   22.40 bytes/ns
957 byte block: 22.20 bytes/ns   22.37 bytes/ns
956 byte block: 22.17 bytes/ns   22.35 bytes/ns
955 byte block: 22.15 bytes/ns   22.32 bytes/ns
954 byte block: 22.13 bytes/ns   22.30 bytes/ns
953 byte block: 22.10 bytes/ns   22.28 bytes/ns
952 byte block: 22.24 bytes/ns   22.41 bytes/ns
951 byte block: 22.21 bytes/ns   22.39 bytes/ns
950 byte block: 22.18 bytes/ns   22.37 bytes/ns
949 byte block: 22.17 bytes/ns   22.34 bytes/ns
948 byte block: 20.84 bytes/ns   22.32 bytes/ns
947 byte block: 22.12 bytes/ns   22.30 bytes/ns
946 byte block: 22.09 bytes/ns   22.27 bytes/ns
945 byte block: 22.07 bytes/ns   22.25 bytes/ns
944 byte block: 22.20 bytes/ns   22.38 bytes/ns
943 byte block: 22.18 bytes/ns   22.36 bytes/ns
942 byte block: 22.15 bytes/ns   22.33 bytes/ns
941 byte block: 22.13 bytes/ns   22.31 bytes/ns
940 byte block: 22.11 bytes/ns   22.29 bytes/ns
939 byte block: 22.08 bytes/ns   22.26 bytes/ns
938 byte block: 22.06 bytes/ns   22.24 bytes/ns
937 byte block: 22.04 bytes/ns   22.21 bytes/ns
936 byte block: 22.17 bytes/ns   22.35 bytes/ns
935 byte block: 22.14 bytes/ns   22.32 bytes/ns
934 byte block: 22.12 bytes/ns   22.30 bytes/ns
933 byte block: 22.10 bytes/ns   22.28 bytes/ns
932 byte block: 22.07 bytes/ns   22.25 bytes/ns
931 byte block: 22.05 bytes/ns   22.23 bytes/ns
930 byte block: 22.03 bytes/ns   22.21 bytes/ns
929 byte block: 22.00 bytes/ns   22.18 bytes/ns
928 byte block: 22.14 bytes/ns   22.31 bytes/ns
927 byte block: 22.12 bytes/ns   22.29 bytes/ns
926 byte block: 22.09 bytes/ns   22.27 bytes/ns
925 byte block: 22.06 bytes/ns   22.24 bytes/ns
924 byte block: 22.04 bytes/ns   22.22 bytes/ns
923 byte block: 22.01 bytes/ns   22.20 bytes/ns
922 byte block: 21.99 bytes/ns   22.17 bytes/ns
921 byte block: 21.97 bytes/ns   22.15 bytes/ns
920 byte block: 22.10 bytes/ns   22.28 bytes/ns
919 byte block: 22.08 bytes/ns   22.26 bytes/ns
918 byte block: 22.05 bytes/ns   22.23 bytes/ns
917 byte block: 22.03 bytes/ns   22.21 bytes/ns
916 byte block: 22.01 bytes/ns   22.19 bytes/ns
915 byte block: 21.98 bytes/ns   22.16 bytes/ns
914 byte block: 21.96 bytes/ns   22.14 bytes/ns
913 byte block: 21.93 bytes/ns   22.08 bytes/ns
912 byte block: 22.07 bytes/ns   22.25 bytes/ns
911 byte block: 22.04 bytes/ns   22.22 bytes/ns
910 byte block: 22.02 bytes/ns   22.20 bytes/ns
909 byte block: 21.99 bytes/ns   22.17 bytes/ns
908 byte block: 21.97 bytes/ns   22.15 bytes/ns
907 byte block: 21.95 bytes/ns   22.12 bytes/ns
906 byte block: 21.92 bytes/ns   22.10 bytes/ns
905 byte block: 21.89 bytes/ns   22.08 bytes/ns
904 byte block: 22.03 bytes/ns   22.21 bytes/ns
903 byte block: 22.01 bytes/ns   22.19 bytes/ns
902 byte block: 21.98 bytes/ns   22.16 bytes/ns
901 byte block: 21.96 bytes/ns   22.14 bytes/ns
900 byte block: 21.93 bytes/ns   22.11 bytes/ns
899 byte block: 21.91 bytes/ns   22.09 bytes/ns
898 byte block: 21.88 bytes/ns   22.06 bytes/ns
897 byte block: 21.85 bytes/ns   22.04 bytes/ns
896 byte block: 22.00 bytes/ns   22.18 bytes/ns
895 byte block: 21.97 bytes/ns   22.15 bytes/ns
894 byte block: 21.95 bytes/ns   22.13 bytes/ns
893 byte block: 21.91 bytes/ns   22.10 bytes/ns
892 byte block: 21.90 bytes/ns   22.08 bytes/ns
891 byte block: 21.88 bytes/ns   22.06 bytes/ns
890 byte block: 21.85 bytes/ns   22.03 bytes/ns
889 byte block: 21.82 bytes/ns   21.97 bytes/ns
888 byte block: 21.96 bytes/ns   22.11 bytes/ns
887 byte block: 21.94 bytes/ns   22.12 bytes/ns
886 byte block: 21.90 bytes/ns   22.09 bytes/ns
885 byte block: 21.89 bytes/ns   22.07 bytes/ns
884 byte block: 21.86 bytes/ns   22.05 bytes/ns
883 byte block: 21.84 bytes/ns   22.02 bytes/ns
882 byte block: 21.81 bytes/ns   21.99 bytes/ns
881 byte block: 21.79 bytes/ns   21.97 bytes/ns
880 byte block: 21.93 bytes/ns   22.11 bytes/ns
879 byte block: 21.90 bytes/ns   22.08 bytes/ns
878 byte block: 21.87 bytes/ns   22.06 bytes/ns
877 byte block: 21.85 bytes/ns   22.03 bytes/ns
876 byte block: 21.82 bytes/ns   22.01 bytes/ns
875 byte block: 21.80 bytes/ns   21.98 bytes/ns
874 byte block: 21.78 bytes/ns   21.96 bytes/ns
873 byte block: 21.75 bytes/ns   21.93 bytes/ns
872 byte block: 21.89 bytes/ns   22.08 bytes/ns
871 byte block: 21.86 bytes/ns   22.05 bytes/ns
870 byte block: 21.84 bytes/ns   22.02 bytes/ns
869 byte block: 21.82 bytes/ns   22.00 bytes/ns
868 byte block: 21.79 bytes/ns   21.97 bytes/ns
867 byte block: 21.76 bytes/ns   21.95 bytes/ns
866 byte block: 21.74 bytes/ns   21.92 bytes/ns
865 byte block: 21.71 bytes/ns   21.90 bytes/ns
864 byte block: 21.85 bytes/ns   22.04 bytes/ns
863 byte block: 21.83 bytes/ns   22.01 bytes/ns
862 byte block: 21.80 bytes/ns   21.99 bytes/ns
861 byte block: 21.78 bytes/ns   21.96 bytes/ns
860 byte block: 21.75 bytes/ns   21.93 bytes/ns
859 byte block: 21.73 bytes/ns   21.91 bytes/ns
858 byte block: 21.70 bytes/ns   21.88 bytes/ns
857 byte block: 21.68 bytes/ns   21.86 bytes/ns
856 byte block: 21.81 bytes/ns   22.00 bytes/ns
855 byte block: 21.79 bytes/ns   21.97 bytes/ns
854 byte block: 21.76 bytes/ns   21.95 bytes/ns
853 byte block: 21.74 bytes/ns   21.92 bytes/ns
852 byte block: 21.71 bytes/ns   21.90 bytes/ns
851 byte block: 21.69 bytes/ns   21.87 bytes/ns
850 byte block: 21.67 bytes/ns   21.85 bytes/ns
849 byte block: 21.63 bytes/ns   21.82 bytes/ns
848 byte block: 21.77 bytes/ns   21.96 bytes/ns
847 byte block: 21.75 bytes/ns   21.94 bytes/ns
846 byte block: 21.72 bytes/ns   21.91 bytes/ns
845 byte block: 21.70 bytes/ns   21.89 bytes/ns
844 byte block: 21.67 bytes/ns   21.86 bytes/ns
843 byte block: 21.64 bytes/ns   21.83 bytes/ns
842 byte block: 21.62 bytes/ns   21.81 bytes/ns
841 byte block: 21.60 bytes/ns   21.78 bytes/ns
840 byte block: 21.73 bytes/ns   21.93 bytes/ns
839 byte block: 21.71 bytes/ns   21.90 bytes/ns
838 byte block: 21.69 bytes/ns   21.87 bytes/ns
837 byte block: 21.66 bytes/ns   21.84 bytes/ns
836 byte block: 21.63 bytes/ns   21.82 bytes/ns
835 byte block: 21.61 bytes/ns   21.79 bytes/ns
834 byte block: 21.58 bytes/ns   21.77 bytes/ns
833 byte block: 21.55 bytes/ns   21.74 bytes/ns
832 byte block: 21.69 bytes/ns   21.88 bytes/ns
831 byte block: 21.66 bytes/ns   21.86 bytes/ns
830 byte block: 21.63 bytes/ns   21.83 bytes/ns
829 byte block: 21.60 bytes/ns   21.81 bytes/ns
828 byte block: 21.58 bytes/ns   21.77 bytes/ns
827 byte block: 21.56 bytes/ns   21.75 bytes/ns
826 byte block: 21.53 bytes/ns   21.72 bytes/ns
825 byte block: 21.51 bytes/ns   21.70 bytes/ns
824 byte block: 21.65 bytes/ns   21.84 bytes/ns
823 byte block: 21.63 bytes/ns   21.82 bytes/ns
822 byte block: 21.60 bytes/ns   21.79 bytes/ns
821 byte block: 21.57 bytes/ns   21.76 bytes/ns
820 byte block: 21.55 bytes/ns   21.74 bytes/ns
819 byte block: 21.53 bytes/ns   21.71 bytes/ns
818 byte block: 21.49 bytes/ns   21.68 bytes/ns
817 byte block: 21.46 bytes/ns   21.66 bytes/ns
816 byte block: 21.61 bytes/ns   21.81 bytes/ns
815 byte block: 21.58 bytes/ns   21.78 bytes/ns
814 byte block: 21.56 bytes/ns   21.75 bytes/ns
813 byte block: 21.53 bytes/ns   21.72 bytes/ns
812 byte block: 21.50 bytes/ns   21.69 bytes/ns
811 byte block: 21.48 bytes/ns   21.67 bytes/ns
810 byte block: 21.45 bytes/ns   21.64 bytes/ns
809 byte block: 21.43 bytes/ns   21.62 bytes/ns
808 byte block: 21.56 bytes/ns   21.76 bytes/ns
807 byte block: 21.54 bytes/ns   21.74 bytes/ns
806 byte block: 21.51 bytes/ns   21.71 bytes/ns
805 byte block: 21.49 bytes/ns   21.68 bytes/ns
804 byte block: 21.46 bytes/ns   21.66 bytes/ns
803 byte block: 21.44 bytes/ns   21.63 bytes/ns
802 byte block: 21.41 bytes/ns   21.60 bytes/ns
801 byte block: 21.38 bytes/ns   21.58 bytes/ns
800 byte block: 21.53 bytes/ns   21.72 bytes/ns
799 byte block: 21.50 bytes/ns   21.69 bytes/ns
798 byte block: 21.48 bytes/ns   21.67 bytes/ns
797 byte block: 21.45 bytes/ns   21.64 bytes/ns
796 byte block: 21.42 bytes/ns   21.61 bytes/ns
795 byte block: 21.39 bytes/ns   21.59 bytes/ns
794 byte block: 21.37 bytes/ns   21.56 bytes/ns
793 byte block: 21.34 bytes/ns   21.53 bytes/ns
792 byte block: 21.49 bytes/ns   21.68 bytes/ns
791 byte block: 21.45 bytes/ns   21.65 bytes/ns
790 byte block: 21.43 bytes/ns   21.63 bytes/ns
789 byte block: 21.41 bytes/ns   21.60 bytes/ns
788 byte block: 21.38 bytes/ns   21.57 bytes/ns
787 byte block: 21.35 bytes/ns   21.54 bytes/ns
786 byte block: 21.32 bytes/ns   21.52 bytes/ns
785 byte block: 21.30 bytes/ns   21.49 bytes/ns
784 byte block: 21.44 bytes/ns   21.64 bytes/ns
783 byte block: 21.42 bytes/ns   21.61 bytes/ns
782 byte block: 21.39 bytes/ns   21.58 bytes/ns
781 byte block: 21.36 bytes/ns   21.56 bytes/ns
780 byte block: 21.33 bytes/ns   21.53 bytes/ns
779 byte block: 21.31 bytes/ns   21.50 bytes/ns
778 byte block: 21.28 bytes/ns   21.47 bytes/ns
777 byte block: 21.25 bytes/ns   21.45 bytes/ns
776 byte block: 21.40 bytes/ns   21.59 bytes/ns
775 byte block: 21.36 bytes/ns   21.57 bytes/ns
774 byte block: 21.35 bytes/ns   21.54 bytes/ns
773 byte block: 21.32 bytes/ns   21.51 bytes/ns
772 byte block: 21.29 bytes/ns   21.48 bytes/ns
771 byte block: 21.26 bytes/ns   21.46 bytes/ns
770 byte block: 21.23 bytes/ns   21.43 bytes/ns
769 byte block: 21.21 bytes/ns   21.40 bytes/ns
768 byte block: 21.36 bytes/ns   21.55 bytes/ns
767 byte block: 21.33 bytes/ns   21.52 bytes/ns
766 byte block: 21.30 bytes/ns   21.49 bytes/ns
765 byte block: 21.27 bytes/ns   21.46 bytes/ns
764 byte block: 21.24 bytes/ns   21.44 bytes/ns
763 byte block: 21.22 bytes/ns   21.41 bytes/ns
762 byte block: 21.18 bytes/ns   21.38 bytes/ns
761 byte block: 21.16 bytes/ns   21.35 bytes/ns
760 byte block: 21.29 bytes/ns   21.50 bytes/ns
759 byte block: 21.27 bytes/ns   21.47 bytes/ns
758 byte block: 21.25 bytes/ns   21.45 bytes/ns
757 byte block: 21.21 bytes/ns   21.42 bytes/ns
756 byte block: 21.19 bytes/ns   21.39 bytes/ns
755 byte block: 21.16 bytes/ns   21.36 bytes/ns
754 byte block: 21.14 bytes/ns   21.33 bytes/ns
753 byte block: 21.11 bytes/ns   21.30 bytes/ns
752 byte block: 21.26 bytes/ns   21.43 bytes/ns
751 byte block: 21.23 bytes/ns   21.43 bytes/ns
750 byte block: 21.20 bytes/ns   21.40 bytes/ns
749 byte block: 21.17 bytes/ns   21.37 bytes/ns
748 byte block: 21.14 bytes/ns   21.34 bytes/ns
747 byte block: 21.12 bytes/ns   21.32 bytes/ns
746 byte block: 21.09 bytes/ns   21.28 bytes/ns
745 byte block: 21.06 bytes/ns   21.25 bytes/ns
744 byte block: 21.21 bytes/ns   21.41 bytes/ns
743 byte block: 21.18 bytes/ns   21.38 bytes/ns
742 byte block: 21.16 bytes/ns   21.35 bytes/ns
741 byte block: 21.13 bytes/ns   21.33 bytes/ns
740 byte block: 21.10 bytes/ns   21.30 bytes/ns
739 byte block: 21.06 bytes/ns   21.27 bytes/ns
738 byte block: 21.03 bytes/ns   21.23 bytes/ns
737 byte block: 21.00 bytes/ns   21.21 bytes/ns
736 byte block: 21.16 bytes/ns   21.36 bytes/ns
735 byte block: 21.13 bytes/ns   21.34 bytes/ns
734 byte block: 21.10 bytes/ns   21.31 bytes/ns
733 byte block: 21.07 bytes/ns   21.28 bytes/ns
732 byte block: 21.05 bytes/ns   21.25 bytes/ns
731 byte block: 21.02 bytes/ns   21.22 bytes/ns
730 byte block: 20.99 bytes/ns   21.19 bytes/ns
729 byte block: 20.96 bytes/ns   21.16 bytes/ns
728 byte block: 21.11 bytes/ns   21.32 bytes/ns
727 byte block: 21.08 bytes/ns   21.29 bytes/ns
726 byte block: 21.05 bytes/ns   21.26 bytes/ns
725 byte block: 21.03 bytes/ns   21.23 bytes/ns
724 byte block: 20.99 bytes/ns   21.20 bytes/ns
723 byte block: 20.97 bytes/ns   21.17 bytes/ns
722 byte block: 20.94 bytes/ns   21.14 bytes/ns
721 byte block: 20.91 bytes/ns   21.12 bytes/ns
720 byte block: 21.07 bytes/ns   21.27 bytes/ns
719 byte block: 21.04 bytes/ns   21.24 bytes/ns
718 byte block: 21.01 bytes/ns   21.21 bytes/ns
717 byte block: 20.98 bytes/ns   21.18 bytes/ns
716 byte block: 20.95 bytes/ns   21.15 bytes/ns
715 byte block: 20.92 bytes/ns   21.12 bytes/ns
714 byte block: 20.89 bytes/ns   21.09 bytes/ns
713 byte block: 20.86 bytes/ns   21.06 bytes/ns
712 byte block: 21.02 bytes/ns   21.22 bytes/ns
711 byte block: 20.98 bytes/ns   21.19 bytes/ns
710 byte block: 20.95 bytes/ns   21.16 bytes/ns
709 byte block: 20.93 bytes/ns   21.13 bytes/ns
708 byte block: 20.90 bytes/ns   21.10 bytes/ns
707 byte block: 20.87 bytes/ns   21.07 bytes/ns
706 byte block: 20.84 bytes/ns   21.04 bytes/ns
705 byte block: 20.81 bytes/ns   21.01 bytes/ns
704 byte block: 20.96 bytes/ns   21.17 bytes/ns
703 byte block: 20.93 bytes/ns   21.14 bytes/ns
702 byte block: 20.90 bytes/ns   21.11 bytes/ns
701 byte block: 20.87 bytes/ns   21.08 bytes/ns
700 byte block: 20.84 bytes/ns   21.05 bytes/ns
699 byte block: 20.81 bytes/ns   21.02 bytes/ns
698 byte block: 20.78 bytes/ns   20.99 bytes/ns
697 byte block: 20.75 bytes/ns   20.96 bytes/ns
696 byte block: 20.91 bytes/ns   21.12 bytes/ns
695 byte block: 20.88 bytes/ns   21.09 bytes/ns
694 byte block: 20.85 bytes/ns   21.05 bytes/ns
693 byte block: 20.82 bytes/ns   21.03 bytes/ns
692 byte block: 20.79 bytes/ns   20.99 bytes/ns
691 byte block: 20.76 bytes/ns   20.96 bytes/ns
690 byte block: 20.73 bytes/ns   20.93 bytes/ns
689 byte block: 20.70 bytes/ns   20.90 bytes/ns
688 byte block: 20.85 bytes/ns   21.03 bytes/ns
687 byte block: 20.82 bytes/ns   21.03 bytes/ns
686 byte block: 20.80 bytes/ns   21.00 bytes/ns
685 byte block: 20.76 bytes/ns   20.97 bytes/ns
684 byte block: 20.73 bytes/ns   20.93 bytes/ns
683 byte block: 20.70 bytes/ns   20.91 bytes/ns
682 byte block: 20.67 bytes/ns   20.88 bytes/ns
681 byte block: 20.64 bytes/ns   20.84 bytes/ns
680 byte block: 20.80 bytes/ns   21.01 bytes/ns
679 byte block: 20.77 bytes/ns   20.97 bytes/ns
678 byte block: 20.74 bytes/ns   20.95 bytes/ns
677 byte block: 20.71 bytes/ns   20.91 bytes/ns
676 byte block: 20.68 bytes/ns   20.89 bytes/ns
675 byte block: 20.65 bytes/ns   20.86 bytes/ns
674 byte block: 20.61 bytes/ns   20.82 bytes/ns
673 byte block: 20.58 bytes/ns   20.79 bytes/ns
672 byte block: 20.74 bytes/ns   20.95 bytes/ns
671 byte block: 20.71 bytes/ns   20.92 bytes/ns
670 byte block: 20.68 bytes/ns   20.89 bytes/ns
669 byte block: 20.65 bytes/ns   20.86 bytes/ns
668 byte block: 20.62 bytes/ns   20.83 bytes/ns
667 byte block: 20.59 bytes/ns   20.80 bytes/ns
666 byte block: 20.56 bytes/ns   20.77 bytes/ns
665 byte block: 20.53 bytes/ns   20.71 bytes/ns
664 byte block: 20.69 bytes/ns   20.90 bytes/ns
663 byte block: 20.66 bytes/ns   20.87 bytes/ns
662 byte block: 20.63 bytes/ns   20.84 bytes/ns
661 byte block: 20.59 bytes/ns   20.80 bytes/ns
660 byte block: 20.56 bytes/ns   20.77 bytes/ns
659 byte block: 20.53 bytes/ns   20.74 bytes/ns
658 byte block: 20.50 bytes/ns   20.71 bytes/ns
657 byte block: 20.48 bytes/ns   20.68 bytes/ns
656 byte block: 20.63 bytes/ns   20.84 bytes/ns
655 byte block: 20.60 bytes/ns   20.81 bytes/ns
654 byte block: 20.57 bytes/ns   20.78 bytes/ns
653 byte block: 20.54 bytes/ns   20.75 bytes/ns
652 byte block: 20.50 bytes/ns   20.72 bytes/ns
651 byte block: 20.47 bytes/ns   20.69 bytes/ns
650 byte block: 20.44 bytes/ns   20.65 bytes/ns
649 byte block: 20.41 bytes/ns   20.62 bytes/ns
648 byte block: 20.57 bytes/ns   20.79 bytes/ns
647 byte block: 20.54 bytes/ns   20.75 bytes/ns
646 byte block: 20.51 bytes/ns   20.72 bytes/ns
645 byte block: 20.48 bytes/ns   20.69 bytes/ns
644 byte block: 20.44 bytes/ns   20.66 bytes/ns
643 byte block: 20.41 bytes/ns   20.63 bytes/ns
642 byte block: 20.38 bytes/ns   20.59 bytes/ns
641 byte block: 20.35 bytes/ns   20.56 bytes/ns
640 byte block: 20.51 bytes/ns   20.73 bytes/ns
639 byte block: 20.48 bytes/ns   20.69 bytes/ns
638 byte block: 20.45 bytes/ns   20.66 bytes/ns
637 byte block: 20.42 bytes/ns   20.63 bytes/ns
636 byte block: 20.38 bytes/ns   20.60 bytes/ns
635 byte block: 20.35 bytes/ns   20.56 bytes/ns
634 byte block: 20.32 bytes/ns   20.53 bytes/ns
633 byte block: 20.29 bytes/ns   20.50 bytes/ns
632 byte block: 20.44 bytes/ns   20.67 bytes/ns
631 byte block: 20.42 bytes/ns   20.64 bytes/ns
630 byte block: 20.38 bytes/ns   20.60 bytes/ns
629 byte block: 20.35 bytes/ns   20.57 bytes/ns
628 byte block: 20.32 bytes/ns   20.54 bytes/ns
627 byte block: 20.29 bytes/ns   20.50 bytes/ns
626 byte block: 20.26 bytes/ns   20.47 bytes/ns
625 byte block: 20.23 bytes/ns   20.44 bytes/ns
624 byte block: 20.39 bytes/ns   20.61 bytes/ns
623 byte block: 20.35 bytes/ns   20.57 bytes/ns
622 byte block: 20.32 bytes/ns   20.54 bytes/ns
621 byte block: 20.29 bytes/ns   20.48 bytes/ns
620 byte block: 20.26 bytes/ns   20.47 bytes/ns
619 byte block: 20.22 bytes/ns   20.41 bytes/ns
618 byte block: 20.19 bytes/ns   20.38 bytes/ns
617 byte block: 20.16 bytes/ns   20.37 bytes/ns
616 byte block: 20.33 bytes/ns   20.52 bytes/ns
615 byte block: 20.29 bytes/ns   20.51 bytes/ns
614 byte block: 20.26 bytes/ns   20.47 bytes/ns
613 byte block: 20.22 bytes/ns   20.43 bytes/ns
612 byte block: 20.20 bytes/ns   20.40 bytes/ns
611 byte block: 20.16 bytes/ns   20.37 bytes/ns
610 byte block: 20.13 bytes/ns   20.34 bytes/ns
609 byte block: 20.09 bytes/ns   20.31 bytes/ns
608 byte block: 20.25 bytes/ns   20.47 bytes/ns
607 byte block: 20.22 bytes/ns   20.44 bytes/ns
606 byte block: 20.18 bytes/ns   20.41 bytes/ns
605 byte block: 20.15 bytes/ns   20.38 bytes/ns
604 byte block: 20.12 bytes/ns   20.34 bytes/ns
603 byte block: 20.09 bytes/ns   20.31 bytes/ns
602 byte block: 20.05 bytes/ns   20.28 bytes/ns
601 byte block: 20.02 bytes/ns   20.24 bytes/ns
600 byte block: 20.19 bytes/ns   20.39 bytes/ns
599 byte block: 20.16 bytes/ns   20.35 bytes/ns
598 byte block: 20.12 bytes/ns   20.34 bytes/ns
597 byte block: 20.08 bytes/ns   20.31 bytes/ns
596 byte block: 20.06 bytes/ns   20.28 bytes/ns
595 byte block: 20.02 bytes/ns   20.24 bytes/ns
594 byte block: 19.99 bytes/ns   20.21 bytes/ns
593 byte block: 19.96 bytes/ns   20.17 bytes/ns
592 byte block: 20.12 bytes/ns   20.35 bytes/ns
591 byte block: 20.09 bytes/ns   20.31 bytes/ns
590 byte block: 20.06 bytes/ns   20.28 bytes/ns
589 byte block: 20.03 bytes/ns   20.25 bytes/ns
588 byte block: 19.99 bytes/ns   20.21 bytes/ns
587 byte block: 19.96 bytes/ns   20.18 bytes/ns
586 byte block: 19.92 bytes/ns   20.14 bytes/ns
585 byte block: 19.89 bytes/ns   20.11 bytes/ns
584 byte block: 20.06 bytes/ns   20.28 bytes/ns
583 byte block: 20.02 bytes/ns   20.25 bytes/ns
582 byte block: 19.99 bytes/ns   20.21 bytes/ns
581 byte block: 19.95 bytes/ns   20.18 bytes/ns
580 byte block: 19.92 bytes/ns   20.14 bytes/ns
579 byte block: 19.89 bytes/ns   20.11 bytes/ns
578 byte block: 19.85 bytes/ns   20.07 bytes/ns
577 byte block: 19.82 bytes/ns   20.04 bytes/ns
576 byte block: 19.99 bytes/ns   20.21 bytes/ns
575 byte block: 19.95 bytes/ns   20.18 bytes/ns
574 byte block: 19.92 bytes/ns   20.14 bytes/ns
573 byte block: 19.88 bytes/ns   20.10 bytes/ns
572 byte block: 19.85 bytes/ns   20.07 bytes/ns
571 byte block: 19.82 bytes/ns   20.04 bytes/ns
570 byte block: 19.78 bytes/ns   20.00 bytes/ns
569 byte block: 19.74 bytes/ns   19.97 bytes/ns
568 byte block: 19.92 bytes/ns   20.14 bytes/ns
567 byte block: 19.88 bytes/ns   20.10 bytes/ns
566 byte block: 19.84 bytes/ns   20.07 bytes/ns
565 byte block: 19.81 bytes/ns   20.03 bytes/ns
564 byte block: 19.77 bytes/ns   20.00 bytes/ns
563 byte block: 19.74 bytes/ns   19.97 bytes/ns
562 byte block: 19.70 bytes/ns   19.93 bytes/ns
561 byte block: 19.67 bytes/ns   19.90 bytes/ns
560 byte block: 19.84 bytes/ns   20.07 bytes/ns
559 byte block: 19.81 bytes/ns   20.03 bytes/ns
558 byte block: 19.77 bytes/ns   20.00 bytes/ns
557 byte block: 19.74 bytes/ns   19.96 bytes/ns
556 byte block: 19.70 bytes/ns   19.93 bytes/ns
555 byte block: 19.66 bytes/ns   19.89 bytes/ns
554 byte block: 19.63 bytes/ns   19.85 bytes/ns
553 byte block: 19.59 bytes/ns   19.82 bytes/ns
552 byte block: 19.77 bytes/ns   19.99 bytes/ns
551 byte block: 19.73 bytes/ns   19.95 bytes/ns
550 byte block: 19.69 bytes/ns   19.92 bytes/ns
549 byte block: 19.66 bytes/ns   19.88 bytes/ns
548 byte block: 19.62 bytes/ns   19.85 bytes/ns
547 byte block: 19.59 bytes/ns   19.81 bytes/ns
546 byte block: 19.55 bytes/ns   19.77 bytes/ns
545 byte block: 19.51 bytes/ns   19.74 bytes/ns
544 byte block: 19.69 bytes/ns   19.92 bytes/ns
543 byte block: 19.64 bytes/ns   19.88 bytes/ns
542 byte block: 19.62 bytes/ns   19.84 bytes/ns
541 byte block: 19.58 bytes/ns   19.81 bytes/ns
540 byte block: 19.55 bytes/ns   19.77 bytes/ns
539 byte block: 19.51 bytes/ns   19.73 bytes/ns
538 byte block: 19.47 bytes/ns   19.70 bytes/ns
537 byte block: 19.44 bytes/ns   19.67 bytes/ns
536 byte block: 19.61 bytes/ns   19.84 bytes/ns
535 byte block: 19.57 bytes/ns   19.80 bytes/ns
534 byte block: 19.54 bytes/ns   19.76 bytes/ns
533 byte block: 19.50 bytes/ns   19.73 bytes/ns
532 byte block: 19.47 bytes/ns   19.69 bytes/ns
531 byte block: 19.43 bytes/ns   19.66 bytes/ns
530 byte block: 19.39 bytes/ns   19.62 bytes/ns
529 byte block: 19.36 bytes/ns   19.58 bytes/ns
528 byte block: 19.53 bytes/ns   19.76 bytes/ns
527 byte block: 19.48 bytes/ns   19.72 bytes/ns
526 byte block: 19.46 bytes/ns   19.69 bytes/ns
525 byte block: 19.42 bytes/ns   19.65 bytes/ns
524 byte block: 19.38 bytes/ns   19.61 bytes/ns
523 byte block: 19.35 bytes/ns   19.58 bytes/ns
522 byte block: 19.31 bytes/ns   19.54 bytes/ns
521 byte block: 19.28 bytes/ns   19.51 bytes/ns
520 byte block: 19.45 bytes/ns   19.69 bytes/ns
519 byte block: 19.41 bytes/ns   19.65 bytes/ns
518 byte block: 19.38 bytes/ns   19.61 bytes/ns
517 byte block: 19.34 bytes/ns   19.57 bytes/ns
516 byte block: 19.30 bytes/ns   19.53 bytes/ns
515 byte block: 19.27 bytes/ns   19.50 bytes/ns
514 byte block: 19.23 bytes/ns   19.46 bytes/ns
513 byte block: 19.19 bytes/ns   19.42 bytes/ns
512 byte block: 19.37 bytes/ns   19.60 bytes/ns
511 byte block: 19.33 bytes/ns   19.56 bytes/ns
510 byte block: 19.29 bytes/ns   19.53 bytes/ns
509 byte block: 19.25 bytes/ns   19.49 bytes/ns
508 byte block: 19.22 bytes/ns   19.45 bytes/ns
507 byte block: 19.18 bytes/ns   19.41 bytes/ns
506 byte block: 19.14 bytes/ns   19.37 bytes/ns
505 byte block: 19.11 bytes/ns   19.34 bytes/ns
504 byte block: 19.28 bytes/ns   19.52 bytes/ns
503 byte block: 19.25 bytes/ns   19.48 bytes/ns
502 byte block: 19.20 bytes/ns   19.44 bytes/ns
501 byte block: 19.17 bytes/ns   19.40 bytes/ns
500 byte block: 19.13 bytes/ns   19.36 bytes/ns
499 byte block: 19.09 bytes/ns   19.33 bytes/ns
498 byte block: 19.05 bytes/ns   19.29 bytes/ns
497 byte block: 19.02 bytes/ns   19.25 bytes/ns
496 byte block: 19.19 bytes/ns   19.43 bytes/ns
495 byte block: 19.16 bytes/ns   19.39 bytes/ns
494 byte block: 19.12 bytes/ns   19.36 bytes/ns
493 byte block: 19.08 bytes/ns   19.32 bytes/ns
492 byte block: 19.04 bytes/ns   19.28 bytes/ns
491 byte block: 19.00 bytes/ns   19.24 bytes/ns
490 byte block: 18.96 bytes/ns   19.20 bytes/ns
489 byte block: 18.93 bytes/ns   19.16 bytes/ns
488 byte block: 19.11 bytes/ns   19.34 bytes/ns
487 byte block: 19.07 bytes/ns   19.30 bytes/ns
486 byte block: 19.03 bytes/ns   19.27 bytes/ns
485 byte block: 18.99 bytes/ns   19.22 bytes/ns
484 byte block: 18.95 bytes/ns   19.18 bytes/ns
483 byte block: 18.90 bytes/ns   19.14 bytes/ns
482 byte block: 18.86 bytes/ns   19.11 bytes/ns
481 byte block: 18.83 bytes/ns   19.07 bytes/ns
480 byte block: 19.00 bytes/ns   19.25 bytes/ns
479 byte block: 18.97 bytes/ns   19.21 bytes/ns
478 byte block: 18.93 bytes/ns   19.17 bytes/ns
477 byte block: 18.89 bytes/ns   19.13 bytes/ns
476 byte block: 18.85 bytes/ns   19.09 bytes/ns
475 byte block: 18.81 bytes/ns   19.05 bytes/ns
474 byte block: 18.77 bytes/ns   19.01 bytes/ns
473 byte block: 18.74 bytes/ns   18.97 bytes/ns
472 byte block: 18.92 bytes/ns   19.16 bytes/ns
471 byte block: 18.88 bytes/ns   19.10 bytes/ns
470 byte block: 18.84 bytes/ns   19.08 bytes/ns
469 byte block: 18.80 bytes/ns   19.04 bytes/ns
468 byte block: 18.76 bytes/ns   19.00 bytes/ns
467 byte block: 18.72 bytes/ns   18.96 bytes/ns
466 byte block: 18.67 bytes/ns   18.92 bytes/ns
465 byte block: 18.64 bytes/ns   18.87 bytes/ns
464 byte block: 18.82 bytes/ns   19.07 bytes/ns
463 byte block: 18.78 bytes/ns   19.03 bytes/ns
462 byte block: 18.74 bytes/ns   18.99 bytes/ns
461 byte block: 18.70 bytes/ns   18.94 bytes/ns
460 byte block: 18.66 bytes/ns   18.90 bytes/ns
459 byte block: 18.62 bytes/ns   18.86 bytes/ns
458 byte block: 18.58 bytes/ns   18.82 bytes/ns
457 byte block: 18.54 bytes/ns   18.78 bytes/ns
456 byte block: 18.72 bytes/ns   18.97 bytes/ns
455 byte block: 18.69 bytes/ns   18.93 bytes/ns
454 byte block: 18.65 bytes/ns   18.89 bytes/ns
453 byte block: 18.60 bytes/ns   18.85 bytes/ns
452 byte block: 18.56 bytes/ns   18.81 bytes/ns
451 byte block: 18.52 bytes/ns   18.76 bytes/ns
450 byte block: 18.48 bytes/ns   18.72 bytes/ns
449 byte block: 18.44 bytes/ns   18.68 bytes/ns
448 byte block: 18.63 bytes/ns   18.87 bytes/ns
447 byte block: 18.58 bytes/ns   18.83 bytes/ns
446 byte block: 18.54 bytes/ns   18.79 bytes/ns
445 byte block: 18.50 bytes/ns   18.75 bytes/ns
444 byte block: 18.46 bytes/ns   18.71 bytes/ns
443 byte block: 18.42 bytes/ns   18.66 bytes/ns
442 byte block: 18.38 bytes/ns   18.62 bytes/ns
441 byte block: 18.34 bytes/ns   18.58 bytes/ns
440 byte block: 18.52 bytes/ns   18.77 bytes/ns
439 byte block: 18.48 bytes/ns   18.73 bytes/ns
438 byte block: 18.44 bytes/ns   18.69 bytes/ns
437 byte block: 18.40 bytes/ns   18.64 bytes/ns
436 byte block: 18.35 bytes/ns   18.60 bytes/ns
435 byte block: 18.32 bytes/ns   18.56 bytes/ns
434 byte block: 18.27 bytes/ns   18.52 bytes/ns
433 byte block: 18.23 bytes/ns   18.47 bytes/ns
432 byte block: 18.42 bytes/ns   18.66 bytes/ns
431 byte block: 18.37 bytes/ns   18.62 bytes/ns
430 byte block: 18.33 bytes/ns   18.58 bytes/ns
429 byte block: 18.29 bytes/ns   18.54 bytes/ns
428 byte block: 18.25 bytes/ns   18.49 bytes/ns
427 byte block: 18.21 bytes/ns   18.45 bytes/ns
426 byte block: 18.16 bytes/ns   18.41 bytes/ns
425 byte block: 18.12 bytes/ns   18.37 bytes/ns
424 byte block: 18.31 bytes/ns   18.56 bytes/ns
423 byte block: 18.27 bytes/ns   18.51 bytes/ns
422 byte block: 18.22 bytes/ns   18.47 bytes/ns
421 byte block: 18.18 bytes/ns   18.43 bytes/ns
420 byte block: 18.14 bytes/ns   18.38 bytes/ns
419 byte block: 18.09 bytes/ns   18.34 bytes/ns
418 byte block: 18.05 bytes/ns   18.30 bytes/ns
417 byte block: 18.01 bytes/ns   18.25 bytes/ns
416 byte block: 18.19 bytes/ns   18.45 bytes/ns
415 byte block: 18.15 bytes/ns   18.40 bytes/ns
414 byte block: 18.11 bytes/ns   18.36 bytes/ns
413 byte block: 18.07 bytes/ns   18.32 bytes/ns
412 byte block: 18.02 bytes/ns   18.27 bytes/ns
411 byte block: 17.98 bytes/ns   18.23 bytes/ns
410 byte block: 17.94 bytes/ns   18.18 bytes/ns
409 byte block: 17.89 bytes/ns   18.14 bytes/ns
408 byte block: 18.08 bytes/ns   18.34 bytes/ns
407 byte block: 18.04 bytes/ns   18.29 bytes/ns
406 byte block: 17.99 bytes/ns   18.25 bytes/ns
405 byte block: 17.95 bytes/ns   18.20 bytes/ns
404 byte block: 17.90 bytes/ns   18.16 bytes/ns
403 byte block: 17.86 bytes/ns   18.11 bytes/ns
402 byte block: 17.82 bytes/ns   18.07 bytes/ns
401 byte block: 17.77 bytes/ns   18.02 bytes/ns
400 byte block: 17.96 bytes/ns   18.22 bytes/ns
399 byte block: 17.92 bytes/ns   18.17 bytes/ns
398 byte block: 17.87 bytes/ns   18.13 bytes/ns
397 byte block: 17.83 bytes/ns   18.08 bytes/ns
396 byte block: 17.78 bytes/ns   18.04 bytes/ns
395 byte block: 17.74 bytes/ns   17.99 bytes/ns
394 byte block: 17.70 bytes/ns   17.95 bytes/ns
393 byte block: 17.65 bytes/ns   17.90 bytes/ns
392 byte block: 17.84 bytes/ns   18.10 bytes/ns
391 byte block: 17.80 bytes/ns   18.05 bytes/ns
390 byte block: 17.75 bytes/ns   18.01 bytes/ns
389 byte block: 17.71 bytes/ns   17.96 bytes/ns
388 byte block: 17.66 bytes/ns   17.92 bytes/ns
387 byte block: 17.62 bytes/ns   17.87 bytes/ns
386 byte block: 17.57 bytes/ns   17.82 bytes/ns
385 byte block: 17.53 bytes/ns   17.78 bytes/ns
384 byte block: 17.72 bytes/ns   17.98 bytes/ns
383 byte block: 17.68 bytes/ns   17.93 bytes/ns
382 byte block: 17.63 bytes/ns   17.88 bytes/ns
381 byte block: 17.58 bytes/ns   17.84 bytes/ns
380 byte block: 17.54 bytes/ns   17.79 bytes/ns
379 byte block: 17.49 bytes/ns   17.75 bytes/ns
378 byte block: 17.44 bytes/ns   17.70 bytes/ns
377 byte block: 17.40 bytes/ns   17.65 bytes/ns
376 byte block: 17.59 bytes/ns   17.85 bytes/ns
375 byte block: 17.55 bytes/ns   17.81 bytes/ns
374 byte block: 17.50 bytes/ns   17.76 bytes/ns
373 byte block: 17.45 bytes/ns   17.71 bytes/ns
372 byte block: 17.41 bytes/ns   17.66 bytes/ns
371 byte block: 17.36 bytes/ns   17.62 bytes/ns
370 byte block: 17.31 bytes/ns   17.57 bytes/ns
369 byte block: 17.27 bytes/ns   17.52 bytes/ns
368 byte block: 17.46 bytes/ns   17.72 bytes/ns
367 byte block: 17.42 bytes/ns   17.67 bytes/ns
366 byte block: 17.37 bytes/ns   17.63 bytes/ns
365 byte block: 17.32 bytes/ns   17.58 bytes/ns
364 byte block: 17.27 bytes/ns   17.53 bytes/ns
363 byte block: 17.23 bytes/ns   17.48 bytes/ns
362 byte block: 17.18 bytes/ns   17.44 bytes/ns
361 byte block: 17.13 bytes/ns   17.39 bytes/ns
360 byte block: 17.33 bytes/ns   17.59 bytes/ns
359 byte block: 17.28 bytes/ns   17.54 bytes/ns
358 byte block: 17.23 bytes/ns   17.49 bytes/ns
357 byte block: 17.18 bytes/ns   17.44 bytes/ns
356 byte block: 17.13 bytes/ns   17.39 bytes/ns
355 byte block: 17.09 bytes/ns   17.35 bytes/ns
354 byte block: 17.04 bytes/ns   17.30 bytes/ns
353 byte block: 16.99 bytes/ns   17.25 bytes/ns
352 byte block: 17.19 bytes/ns   17.45 bytes/ns
351 byte block: 17.14 bytes/ns   17.40 bytes/ns
350 byte block: 17.09 bytes/ns   17.35 bytes/ns
349 byte block: 17.04 bytes/ns   17.30 bytes/ns
348 byte block: 16.99 bytes/ns   17.25 bytes/ns
347 byte block: 16.94 bytes/ns   17.20 bytes/ns
346 byte block: 16.89 bytes/ns   17.15 bytes/ns
345 byte block: 16.85 bytes/ns   17.11 bytes/ns
344 byte block: 17.05 bytes/ns   17.31 bytes/ns
343 byte block: 17.00 bytes/ns   17.26 bytes/ns
342 byte block: 16.95 bytes/ns   17.21 bytes/ns
341 byte block: 16.90 bytes/ns   17.16 bytes/ns
340 byte block: 16.85 bytes/ns   17.11 bytes/ns
339 byte block: 16.80 bytes/ns   17.06 bytes/ns
338 byte block: 16.75 bytes/ns   17.01 bytes/ns
337 byte block: 16.70 bytes/ns   16.96 bytes/ns
336 byte block: 16.90 bytes/ns   17.16 bytes/ns
335 byte block: 16.85 bytes/ns   17.11 bytes/ns
334 byte block: 16.80 bytes/ns   17.06 bytes/ns
333 byte block: 16.75 bytes/ns   17.01 bytes/ns
332 byte block: 16.70 bytes/ns   16.96 bytes/ns
331 byte block: 16.65 bytes/ns   16.91 bytes/ns
330 byte block: 16.60 bytes/ns   16.86 bytes/ns
329 byte block: 16.55 bytes/ns   16.81 bytes/ns
328 byte block: 16.75 bytes/ns   17.01 bytes/ns
327 byte block: 16.69 bytes/ns   16.96 bytes/ns
326 byte block: 16.64 bytes/ns   16.91 bytes/ns
325 byte block: 16.59 bytes/ns   16.86 bytes/ns
324 byte block: 16.54 bytes/ns   16.81 bytes/ns
323 byte block: 16.49 bytes/ns   16.76 bytes/ns
322 byte block: 16.44 bytes/ns   16.71 bytes/ns
321 byte block: 16.39 bytes/ns   16.66 bytes/ns
320 byte block: 16.59 bytes/ns   16.86 bytes/ns
319 byte block: 16.54 bytes/ns   16.81 bytes/ns
318 byte block: 16.49 bytes/ns   16.76 bytes/ns
317 byte block: 16.44 bytes/ns   16.70 bytes/ns
316 byte block: 16.38 bytes/ns   16.65 bytes/ns
315 byte block: 16.33 bytes/ns   16.60 bytes/ns
314 byte block: 16.28 bytes/ns   16.55 bytes/ns
313 byte block: 16.23 bytes/ns   16.49 bytes/ns
312 byte block: 16.43 bytes/ns   16.70 bytes/ns
311 byte block: 16.38 bytes/ns   16.65 bytes/ns
310 byte block: 16.32 bytes/ns   16.59 bytes/ns
309 byte block: 16.27 bytes/ns   16.54 bytes/ns
308 byte block: 16.22 bytes/ns   16.49 bytes/ns
307 byte block: 16.17 bytes/ns   16.43 bytes/ns
306 byte block: 16.12 bytes/ns   16.38 bytes/ns
305 byte block: 16.06 bytes/ns   16.33 bytes/ns
304 byte block: 16.26 bytes/ns   16.54 bytes/ns
303 byte block: 16.21 bytes/ns   16.48 bytes/ns
302 byte block: 16.16 bytes/ns   16.43 bytes/ns
301 byte block: 16.10 bytes/ns   16.37 bytes/ns
300 byte block: 16.05 bytes/ns   16.32 bytes/ns
299 byte block: 16.00 bytes/ns   16.27 bytes/ns
298 byte block: 15.94 bytes/ns   16.21 bytes/ns
297 byte block: 15.89 bytes/ns   16.16 bytes/ns
296 byte block: 16.09 bytes/ns   16.37 bytes/ns
295 byte block: 16.04 bytes/ns   16.31 bytes/ns
294 byte block: 15.98 bytes/ns   16.26 bytes/ns
293 byte block: 15.93 bytes/ns   16.20 bytes/ns
292 byte block: 15.88 bytes/ns   16.14 bytes/ns
291 byte block: 15.82 bytes/ns   16.09 bytes/ns
290 byte block: 15.77 bytes/ns   16.03 bytes/ns
289 byte block: 15.71 bytes/ns   15.98 bytes/ns
288 byte block: 15.91 bytes/ns   16.19 bytes/ns
287 byte block: 15.86 bytes/ns   16.13 bytes/ns
286 byte block: 15.80 bytes/ns   16.08 bytes/ns
285 byte block: 15.75 bytes/ns   16.02 bytes/ns
284 byte block: 15.69 bytes/ns   15.96 bytes/ns
283 byte block: 15.64 bytes/ns   15.91 bytes/ns
282 byte block: 15.58 bytes/ns   15.85 bytes/ns
281 byte block: 15.53 bytes/ns   15.80 bytes/ns
280 byte block: 15.73 bytes/ns   16.01 bytes/ns
279 byte block: 15.68 bytes/ns   15.95 bytes/ns
278 byte block: 15.62 bytes/ns   15.89 bytes/ns
277 byte block: 15.56 bytes/ns   15.83 bytes/ns
276 byte block: 15.51 bytes/ns   15.78 bytes/ns
275 byte block: 15.45 bytes/ns   15.72 bytes/ns
274 byte block: 15.39 bytes/ns   15.67 bytes/ns
273 byte block: 15.34 bytes/ns   15.61 bytes/ns
272 byte block: 15.54 bytes/ns   15.82 bytes/ns
271 byte block: 15.48 bytes/ns   15.76 bytes/ns
270 byte block: 15.43 bytes/ns   15.70 bytes/ns
269 byte block: 15.37 bytes/ns   15.64 bytes/ns
268 byte block: 15.31 bytes/ns   15.59 bytes/ns
267 byte block: 15.26 bytes/ns   15.53 bytes/ns
266 byte block: 15.20 bytes/ns   15.47 bytes/ns
265 byte block: 15.14 bytes/ns   15.41 bytes/ns
264 byte block: 15.35 bytes/ns   15.62 bytes/ns
263 byte block: 15.29 bytes/ns   15.57 bytes/ns
262 byte block: 15.23 bytes/ns   15.51 bytes/ns
261 byte block: 15.17 bytes/ns   15.45 bytes/ns
260 byte block: 15.11 bytes/ns   15.39 bytes/ns
259 byte block: 15.06 bytes/ns   15.33 bytes/ns
258 byte block: 15.00 bytes/ns   15.27 bytes/ns
257 byte block: 14.94 bytes/ns   15.21 bytes/ns
256 byte block: 15.14 bytes/ns   15.42 bytes/ns
255 byte block: 15.08 bytes/ns   15.36 bytes/ns
254 byte block: 15.03 bytes/ns   15.30 bytes/ns
253 byte block: 14.97 bytes/ns   15.24 bytes/ns
252 byte block: 14.91 bytes/ns   15.18 bytes/ns
251 byte block: 14.85 bytes/ns   15.12 bytes/ns
250 byte block: 14.79 bytes/ns   15.06 bytes/ns
249 byte block: 14.73 bytes/ns   15.00 bytes/ns
248 byte block: 14.93 bytes/ns   15.21 bytes/ns
247 byte block: 14.87 bytes/ns   15.15 bytes/ns
246 byte block: 14.81 bytes/ns   15.09 bytes/ns
245 byte block: 14.75 bytes/ns   15.03 bytes/ns
244 byte block: 14.69 bytes/ns   14.97 bytes/ns
243 byte block: 14.63 bytes/ns   14.91 bytes/ns
242 byte block: 14.57 bytes/ns   14.85 bytes/ns
241 byte block: 14.51 bytes/ns   14.78 bytes/ns
240 byte block: 14.71 bytes/ns   14.99 bytes/ns
239 byte block: 14.65 bytes/ns   14.93 bytes/ns
238 byte block: 14.59 bytes/ns   14.87 bytes/ns
237 byte block: 14.53 bytes/ns   14.81 bytes/ns
236 byte block: 14.47 bytes/ns   14.75 bytes/ns
235 byte block: 14.41 bytes/ns   14.68 bytes/ns
234 byte block: 14.35 bytes/ns   14.62 bytes/ns
233 byte block: 14.29 bytes/ns   14.56 bytes/ns
232 byte block: 14.49 bytes/ns   14.77 bytes/ns
231 byte block: 14.43 bytes/ns   14.71 bytes/ns
230 byte block: 14.36 bytes/ns   14.64 bytes/ns
229 byte block: 14.30 bytes/ns   14.58 bytes/ns
228 byte block: 14.24 bytes/ns   14.52 bytes/ns
227 byte block: 14.18 bytes/ns   14.45 bytes/ns
226 byte block: 14.12 bytes/ns   14.39 bytes/ns
225 byte block: 14.05 bytes/ns   14.32 bytes/ns
224 byte block: 14.25 bytes/ns   14.53 bytes/ns
223 byte block: 14.19 bytes/ns   14.47 bytes/ns
222 byte block: 14.13 bytes/ns   14.41 bytes/ns
221 byte block: 14.06 bytes/ns   14.34 bytes/ns
220 byte block: 14.00 bytes/ns   14.28 bytes/ns
219 byte block: 13.94 bytes/ns   14.21 bytes/ns
218 byte block: 13.87 bytes/ns   14.15 bytes/ns
217 byte block: 13.81 bytes/ns   14.08 bytes/ns
216 byte block: 14.01 bytes/ns   14.29 bytes/ns
215 byte block: 13.95 bytes/ns   14.23 bytes/ns
214 byte block: 13.88 bytes/ns   14.16 bytes/ns
213 byte block: 13.82 bytes/ns   14.09 bytes/ns
212 byte block: 13.75 bytes/ns   14.03 bytes/ns
211 byte block: 13.69 bytes/ns   13.96 bytes/ns
210 byte block: 13.62 bytes/ns   13.90 bytes/ns
209 byte block: 13.56 bytes/ns   13.83 bytes/ns
208 byte block: 13.76 bytes/ns   14.04 bytes/ns
207 byte block: 13.69 bytes/ns   13.97 bytes/ns
206 byte block: 13.63 bytes/ns   13.90 bytes/ns
205 byte block: 13.56 bytes/ns   13.84 bytes/ns
204 byte block: 13.49 bytes/ns   13.77 bytes/ns
203 byte block: 13.43 bytes/ns   13.70 bytes/ns
202 byte block: 13.36 bytes/ns   13.64 bytes/ns
201 byte block: 13.30 bytes/ns   13.57 bytes/ns
200 byte block: 13.49 bytes/ns   13.78 bytes/ns
199 byte block: 13.43 bytes/ns   13.71 bytes/ns
198 byte block: 13.36 bytes/ns   13.64 bytes/ns
197 byte block: 13.29 bytes/ns   13.57 bytes/ns
196 byte block: 13.23 bytes/ns   13.50 bytes/ns
195 byte block: 13.16 bytes/ns   13.43 bytes/ns
194 byte block: 13.09 bytes/ns   13.36 bytes/ns
193 byte block: 13.02 bytes/ns   13.30 bytes/ns
192 byte block: 13.22 bytes/ns   13.50 bytes/ns
191 byte block: 13.15 bytes/ns   13.43 bytes/ns
190 byte block: 13.08 bytes/ns   13.36 bytes/ns
189 byte block: 13.01 bytes/ns   13.29 bytes/ns
188 byte block: 12.95 bytes/ns   13.22 bytes/ns
187 byte block: 12.88 bytes/ns   13.15 bytes/ns
186 byte block: 12.81 bytes/ns   13.08 bytes/ns
185 byte block: 12.74 bytes/ns   13.01 bytes/ns
184 byte block: 12.93 bytes/ns   13.21 bytes/ns
183 byte block: 12.86 bytes/ns   13.14 bytes/ns
182 byte block: 12.79 bytes/ns   13.07 bytes/ns
181 byte block: 12.72 bytes/ns   13.00 bytes/ns
180 byte block: 12.65 bytes/ns   12.93 bytes/ns
179 byte block: 12.58 bytes/ns   12.86 bytes/ns
178 byte block: 12.51 bytes/ns   12.79 bytes/ns
177 byte block: 12.44 bytes/ns   12.71 bytes/ns
176 byte block: 12.63 bytes/ns   12.92 bytes/ns
175 byte block: 12.56 bytes/ns   12.84 bytes/ns
174 byte block: 12.49 bytes/ns   12.77 bytes/ns
173 byte block: 12.42 bytes/ns   12.70 bytes/ns
172 byte block: 12.35 bytes/ns   12.62 bytes/ns
171 byte block: 12.28 bytes/ns   12.55 bytes/ns
170 byte block: 12.21 bytes/ns   12.48 bytes/ns
169 byte block: 12.14 bytes/ns   12.40 bytes/ns
168 byte block: 12.33 bytes/ns   12.60 bytes/ns
167 byte block: 12.25 bytes/ns   12.53 bytes/ns
166 byte block: 12.18 bytes/ns   12.45 bytes/ns
165 byte block: 12.11 bytes/ns   12.38 bytes/ns
164 byte block: 12.03 bytes/ns   12.31 bytes/ns
163 byte block: 11.96 bytes/ns   12.23 bytes/ns
162 byte block: 11.89 bytes/ns   12.16 bytes/ns
161 byte block: 11.81 bytes/ns   12.08 bytes/ns
160 byte block: 12.00 bytes/ns   12.28 bytes/ns
159 byte block: 11.93 bytes/ns   12.20 bytes/ns
158 byte block: 11.85 bytes/ns   12.13 bytes/ns
157 byte block: 11.78 bytes/ns   12.05 bytes/ns
156 byte block: 11.70 bytes/ns   11.97 bytes/ns
155 byte block: 11.63 bytes/ns   11.90 bytes/ns
154 byte block: 11.55 bytes/ns   11.82 bytes/ns
153 byte block: 11.48 bytes/ns   11.74 bytes/ns
152 byte block: 11.66 bytes/ns   12.11 bytes/ns
151 byte block: 11.59 bytes/ns   11.86 bytes/ns
150 byte block: 11.51 bytes/ns   11.97 bytes/ns
149 byte block: 11.43 bytes/ns   11.87 bytes/ns
148 byte block: 11.35 bytes/ns   11.79 bytes/ns
147 byte block: 11.28 bytes/ns   11.55 bytes/ns
146 byte block: 11.20 bytes/ns   11.47 bytes/ns
145 byte block: 11.13 bytes/ns   11.55 bytes/ns
144 byte block: 11.31 bytes/ns   11.85 bytes/ns
143 byte block: 11.23 bytes/ns   11.50 bytes/ns
142 byte block: 11.15 bytes/ns   11.66 bytes/ns
141 byte block: 11.07 bytes/ns   11.57 bytes/ns
140 byte block: 10.99 bytes/ns   11.52 bytes/ns
139 byte block: 10.92 bytes/ns   11.44 bytes/ns
138 byte block: 10.84 bytes/ns   11.10 bytes/ns
137 byte block: 10.76 bytes/ns   11.24 bytes/ns
136 byte block: 10.93 bytes/ns   11.24 bytes/ns
135 byte block: 10.85 bytes/ns   11.15 bytes/ns
134 byte block: 10.77 bytes/ns   11.06 bytes/ns
133 byte block: 10.69 bytes/ns   10.96 bytes/ns
132 byte block: 10.61 bytes/ns   10.90 bytes/ns
131 byte block: 10.53 bytes/ns   10.79 bytes/ns
130 byte block: 10.45 bytes/ns   10.74 bytes/ns
129 byte block: 10.37 bytes/ns   10.65 bytes/ns
128 byte block: 10.54 bytes/ns   10.81 bytes/ns
127 byte block: 10.46 bytes/ns   10.99 bytes/ns
126 byte block: 18.44 bytes/ns   18.44 bytes/ns
125 byte block: 18.30 bytes/ns   18.30 bytes/ns
124 byte block: 18.15 bytes/ns   18.15 bytes/ns
123 byte block: 18.01 bytes/ns   18.01 bytes/ns
122 byte block: 17.86 bytes/ns   17.86 bytes/ns
121 byte block: 17.72 bytes/ns   17.72 bytes/ns
120 byte block: 17.57 bytes/ns   17.57 bytes/ns
119 byte block: 17.88 bytes/ns   18.33 bytes/ns
118 byte block: 16.26 bytes/ns   17.28 bytes/ns
117 byte block: 16.13 bytes/ns   17.13 bytes/ns
116 byte block: 15.99 bytes/ns   16.99 bytes/ns
115 byte block: 15.85 bytes/ns   16.84 bytes/ns
114 byte block: 15.71 bytes/ns   16.70 bytes/ns
113 byte block: 15.58 bytes/ns   16.55 bytes/ns
112 byte block: 15.44 bytes/ns   16.41 bytes/ns
111 byte block: 16.73 bytes/ns   17.11 bytes/ns
110 byte block: 15.17 bytes/ns   16.12 bytes/ns
109 byte block: 15.03 bytes/ns   15.97 bytes/ns
108 byte block: 14.89 bytes/ns   15.82 bytes/ns
107 byte block: 14.76 bytes/ns   15.68 bytes/ns
106 byte block: 14.62 bytes/ns   15.53 bytes/ns
105 byte block: 14.48 bytes/ns   15.39 bytes/ns
104 byte block: 14.34 bytes/ns   15.24 bytes/ns
103 byte block: 15.50 bytes/ns   16.50 bytes/ns
102 byte block: 14.07 bytes/ns   14.95 bytes/ns
101 byte block: 14.80 bytes/ns   14.80 bytes/ns
100 byte block: 14.66 bytes/ns   14.66 bytes/ns
99 byte block: 13.66 bytes/ns   14.51 bytes/ns
98 byte block: 14.37 bytes/ns   14.37 bytes/ns
97 byte block: 14.22 bytes/ns   14.22 bytes/ns
96 byte block: 14.07 bytes/ns   14.07 bytes/ns
95 byte block: 14.90 bytes/ns   14.67 bytes/ns
94 byte block: 13.78 bytes/ns   13.78 bytes/ns
93 byte block: 13.64 bytes/ns   13.64 bytes/ns
92 byte block: 13.49 bytes/ns   13.49 bytes/ns
91 byte block: 13.34 bytes/ns   13.34 bytes/ns
90 byte block: 13.20 bytes/ns   13.20 bytes/ns
89 byte block: 13.05 bytes/ns   13.05 bytes/ns
88 byte block: 12.91 bytes/ns   12.91 bytes/ns
87 byte block: 13.85 bytes/ns   13.58 bytes/ns
86 byte block: 12.61 bytes/ns   12.61 bytes/ns
85 byte block: 12.47 bytes/ns   12.47 bytes/ns
84 byte block: 12.32 bytes/ns   12.32 bytes/ns
83 byte block: 12.18 bytes/ns   12.18 bytes/ns
82 byte block: 12.03 bytes/ns   12.03 bytes/ns
81 byte block: 11.88 bytes/ns   11.88 bytes/ns
80 byte block: 11.74 bytes/ns   11.74 bytes/ns
79 byte block: 12.40 bytes/ns   12.32 bytes/ns
78 byte block: 11.44 bytes/ns   11.44 bytes/ns
77 byte block: 11.30 bytes/ns   11.30 bytes/ns
76 byte block: 11.15 bytes/ns   11.15 bytes/ns
75 byte block: 11.01 bytes/ns   11.01 bytes/ns
74 byte block: 10.86 bytes/ns   10.86 bytes/ns
73 byte block: 10.72 bytes/ns   10.72 bytes/ns
72 byte block: 10.57 bytes/ns   10.57 bytes/ns
71 byte block: 11.15 bytes/ns   10.97 bytes/ns
70 byte block: 10.28 bytes/ns   10.28 bytes/ns
69 byte block: 10.13 bytes/ns   10.13 bytes/ns
68 byte block: 9.98 bytes/ns    9.98 bytes/ns
67 byte block: 10.52 bytes/ns   10.36 bytes/ns
66 byte block: 9.69 bytes/ns    9.69 bytes/ns
65 byte block: 10.21 bytes/ns   10.05 bytes/ns
64 byte block: 10.05 bytes/ns   9.89 bytes/ns
63 byte block: 9.90 bytes/ns    10.12 bytes/ns
62 byte block: 16.07 bytes/ns   16.07 bytes/ns
61 byte block: 15.81 bytes/ns   15.81 bytes/ns
60 byte block: 15.55 bytes/ns   15.55 bytes/ns
59 byte block: 15.30 bytes/ns   15.29 bytes/ns
58 byte block: 15.04 bytes/ns   15.04 bytes/ns
57 byte block: 14.78 bytes/ns   14.78 bytes/ns
56 byte block: 14.52 bytes/ns   14.52 bytes/ns
55 byte block: 14.26 bytes/ns   14.26 bytes/ns
54 byte block: 14.00 bytes/ns   14.00 bytes/ns
53 byte block: 13.75 bytes/ns   13.75 bytes/ns
52 byte block: 13.49 bytes/ns   13.49 bytes/ns
51 byte block: 13.23 bytes/ns   13.23 bytes/ns
50 byte block: 12.97 bytes/ns   12.97 bytes/ns
49 byte block: 12.72 bytes/ns   12.71 bytes/ns
48 byte block: 12.46 bytes/ns   12.46 bytes/ns
47 byte block: 12.20 bytes/ns   12.20 bytes/ns
46 byte block: 11.94 bytes/ns   11.94 bytes/ns
45 byte block: 11.68 bytes/ns   11.68 bytes/ns
44 byte block: 11.42 bytes/ns   11.42 bytes/ns
43 byte block: 11.16 bytes/ns   11.16 bytes/ns
42 byte block: 10.91 bytes/ns   10.90 bytes/ns
41 byte block: 10.65 bytes/ns   10.65 bytes/ns
40 byte block: 10.39 bytes/ns   10.39 bytes/ns
39 byte block: 10.13 bytes/ns   10.13 bytes/ns
38 byte block: 9.87 bytes/ns    9.87 bytes/ns
37 byte block: 9.61 bytes/ns    9.61 bytes/ns
36 byte block: 9.35 bytes/ns    9.35 bytes/ns
35 byte block: 9.09 bytes/ns    9.09 bytes/ns
34 byte block: 8.83 bytes/ns    8.83 bytes/ns
33 byte block: 8.58 bytes/ns    8.58 bytes/ns
32 byte block: 8.32 bytes/ns    8.32 bytes/ns
31 byte block: 8.06 bytes/ns    8.06 bytes/ns
30 byte block: 9.21 bytes/ns    9.21 bytes/ns
29 byte block: 8.91 bytes/ns    8.91 bytes/ns
28 byte block: 8.60 bytes/ns    8.60 bytes/ns
27 byte block: 8.29 bytes/ns    8.29 bytes/ns
26 byte block: 7.99 bytes/ns    7.99 bytes/ns
25 byte block: 7.68 bytes/ns    7.68 bytes/ns
24 byte block: 7.37 bytes/ns    7.37 bytes/ns
23 byte block: 7.07 bytes/ns    7.07 bytes/ns
22 byte block: 6.76 bytes/ns    6.76 bytes/ns
21 byte block: 6.45 bytes/ns    6.45 bytes/ns
20 byte block: 6.15 bytes/ns    6.15 bytes/ns
19 byte block: 5.84 bytes/ns    5.84 bytes/ns
18 byte block: 5.53 bytes/ns    5.53 bytes/ns
17 byte block: 5.23 bytes/ns    5.23 bytes/ns
16 byte block: 4.63 bytes/ns    4.92 bytes/ns
15 byte block: 4.34 bytes/ns    4.61 bytes/ns
14 byte block: 4.46 bytes/ns    4.74 bytes/ns
13 byte block: 4.14 bytes/ns    4.40 bytes/ns
12 byte block: 3.82 bytes/ns    4.06 bytes/ns
11 byte block: 3.72 bytes/ns    3.72 bytes/ns
10 byte block: 3.38 bytes/ns    3.38 bytes/ns
9 byte block: 3.05 bytes/ns     3.05 bytes/ns
8 byte block: 2.71 bytes/ns     2.71 bytes/ns
7 byte block: 2.37 bytes/ns     2.37 bytes/ns
6 byte block: 2.03 bytes/ns     2.03 bytes/ns
5 byte block: 1.69 bytes/ns     1.69 bytes/ns
4 byte block: 1.35 bytes/ns     1.35 bytes/ns
3 byte block: 1.02 bytes/ns     1.02 bytes/ns
2 byte block: 0.68 bytes/ns     0.68 bytes/ns
1 byte block: 0.34 bytes/ns     0.34 bytes/ns
0 byte block: 0.00 bytes/ns     0.00 bytes/ns


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-17 13:08             ` Denys Vlasenko
@ 2015-02-17 16:12               ` Rich Felker
  2015-02-17 16:51                 ` Denys Vlasenko
  0 siblings, 1 reply; 18+ messages in thread
From: Rich Felker @ 2015-02-17 16:12 UTC (permalink / raw)
  To: Denys Vlasenko; +Cc: musl

[-- Attachment #1: Type: text/plain, Size: 580 bytes --]

On Tue, Feb 17, 2015 at 02:08:52PM +0100, Denys Vlasenko wrote:
> >> Please see attached file.
> >
> > I tried it and it's ~1 cycle slower for at least sizes 16-30;
> > presumably we're seeing the cost of the extra compare/branch at these
> > sizes but not at others. What does your timing test show?
> 
> See below.
> First column - result of my2.s
> Second column - result of vda1.s
> 
> Basically, the "rep stosq" code path got a bit faster, while
> small memsets stayed the same.

Can you post your test program for me to try out? Here's what I've
been using, attached.

Rich

[-- Attachment #2: memset-cycles.c --]
[-- Type: text/plain, Size: 1274 bytes --]

#define _XOPEN_SOURCE 700
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

static inline unsigned rdtsc()
{
#if defined __i386__ || defined __x86_64__
	unsigned x;
	__asm__ __volatile__ ( "rdtsc" : "=a"(x) : : "rdx" );
//	__asm__ __volatile__ ( "cpuid ; rdtsc" : "=a"(x)
//		: : "rbx", "rcx", "rdx" );
	return x;
#else
	struct timespec ts;
	clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts);
	return ts.tv_nsec;
#endif
}

char buf[32768+100];

int main()
{
	unsigned a=0;
	unsigned i, j, t, tmin=-1;
	unsigned long long tmean=0;
	unsigned overhead = -1;
	size_t n;

	for (i=0; i<0+1*4096; i++) {
		t = rdtsc();
		__asm__ __volatile__("nop");
		t = rdtsc()-t;
		if (t < overhead) overhead = t;
	}
	//overhead = 0;

	for (n=2; n<32768; n+=(n<64 ? 2 : n<512 ? 32 : n)) {
		tmin = -1;
		tmean = 0;
		for (i=0; i<0+1*4096; i++) {
			__asm__ __volatile__ ("" : : : "memory");
			t = rdtsc();
			for (j=0; j<64; j++) {
				memset(buf, 0, n);
				__asm__ __volatile__ ("" : : : "memory");
			}
			t = rdtsc()-t;
			__asm__ __volatile__ ("" : : : "memory");
			if (t < tmin) tmin = t;
			tmean += t;
		}
		tmin -= overhead;
		tmean -= 4096*overhead;
		tmin /= 64;
		tmean /= 64;
		tmean /= 4096;
		printf("size %zu: min=%u, avg=%llu\n", n, tmin, tmean);
	}
}

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-17 16:12               ` Rich Felker
@ 2015-02-17 16:51                 ` Denys Vlasenko
  2015-02-17 17:30                   ` Denys Vlasenko
  2015-02-17 17:40                   ` Rich Felker
  0 siblings, 2 replies; 18+ messages in thread
From: Denys Vlasenko @ 2015-02-17 16:51 UTC (permalink / raw)
  To: Rich Felker; +Cc: musl

[-- Attachment #1: Type: text/plain, Size: 2117 bytes --]

On Tue, Feb 17, 2015 at 5:12 PM, Rich Felker <dalias@libc.org> wrote:
> On Tue, Feb 17, 2015 at 02:08:52PM +0100, Denys Vlasenko wrote:
>> >> Please see attached file.
>> >
>> > I tried it and it's ~1 cycle slower for at least sizes 16-30;
>> > presumably we're seeing the cost of the extra compare/branch at these
>> > sizes but not at others. What does your timing test show?
>>
>> See below.
>> First column - result of my2.s
>> Second column - result of vda1.s
>>
>> Basically, the "rep stosq" code path got a bit faster, while
>> small memsets stayed the same.
>
> Can you post your test program for me to try out? Here's what I've
> been using, attached.

With your program I see similar results:

...
size 50: min=10, avg=10           min=10, avg=10
size 52: min=10, avg=10           min=10, avg=10
size 54: min=10, avg=11           min=10, avg=11
size 56: min=10, avg=11           min=10, avg=11
size 58: min=10, avg=11           min=10, avg=10
size 60: min=10, avg=10           min=10, avg=12
size 62: min=10, avg=10           min=10, avg=11
size 64: min=18, avg=18           min=18, avg=22
size 96: min=17, avg=17           min=18, avg=18
size 128: min=31, avg=32          min=32, avg=32
size 160: min=35, avg=37          min=33, avg=37
size 192: min=40, avg=40          min=36, avg=37
size 224: min=43, avg=43          min=40, avg=40
size 256: min=44, avg=47          min=43, avg=43
size 288: min=47, avg=48          min=46, avg=47
size 320: min=50, avg=52          min=52, avg=52
size 352: min=53, avg=54          min=52, avg=60
size 384: min=56, avg=57          min=55, avg=57
size 416: min=59, avg=60          min=62, avg=63
size 448: min=63, avg=65          min=66, avg=66
size 480: min=66, avg=71          min=69, avg=69
size 512: min=73, avg=74          min=73, avg=76
size 1024: min=127, avg=129       min=127, avg=129
size 2048: min=221, avg=236       min=221, avg=236
size 4096: min=425, avg=444       min=424, avg=450
size 8192: min=831, avg=881       min=830, avg=883
size 16384: min=1644, avg=1717    min=1643, avg=1748

My test program is attached, I use:

gcc -O2 -Wall memset-cycles.c FOO.s

[-- Attachment #2: t.c --]
[-- Type: text/x-csrc, Size: 3388 bytes --]

#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/time.h>
#include <sys/syscall.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
/* Old glibc (< 2.3.4) does not provide this constant. We use syscall
 * directly so this definition is safe. */
#ifndef CLOCK_MONOTONIC
#define CLOCK_MONOTONIC 1
#endif

#define BUF (2*1024)
#define FILL 0

/* libc has incredibly messy way of doing this,
 * typically requiring -lrt. We just skip all this mess */
static void get_mono(struct timespec *ts)
{
        syscall(__NR_clock_gettime, CLOCK_MONOTONIC, ts);
}

//void *musl_memset(void *s, int c, size_t n);

void *memset_rep_stosq(void *ptr, int c, size_t cnt)
{
	unsigned long ax,cx,di;

	asm volatile(
		"rep stosq"
	: "=D" (di), "=c" (cx), "=a" (ax)
	: "0" (ptr), "1" (cnt/8), "2" (0)
	: "memory"
	);
	return ptr;
}

void *memset_movnti(void *ptr, int c, size_t cnt)
{
	unsigned long ax,cx,di;

	asm volatile(
		"1: movnti %%rax,(%%rdi)\n"
		"add $8,%%rdi\n"
		"dec %%rcx\n"
		"jnz 1b\n"
		"sfence\n"
	: "=D" (di), "=c" (cx), "=a" (ax)
	: "0" (ptr), "1" (cnt/8), "2" (0)
	: "memory"
	);
	return ptr;
}

void *memset_movnti_unroll(void *ptr, int c, size_t cnt)
{
	unsigned long ax,cx,di;

	asm volatile(
		"1:\n"
		"movnti %%rax,(%%rdi)\n"
		"movnti %%rax,8(%%rdi)\n"
		"movnti %%rax,16(%%rdi)\n"
		"movnti %%rax,24(%%rdi)\n"
		"add $32,%%rdi\n"
		"dec %%rcx\n"
		"jnz 1b\n"
		"sfence\n"
	: "=D" (di), "=c" (cx), "=a" (ax)
	: "0" (ptr), "1" (cnt/(8*4)), "2" (0)
	: "memory"
	);
	return ptr;
}

unsigned gett()
{
#if 0
	struct timeval tv;
	gettimeofday(&tv, NULL);
	return tv.tv_usec;
#else
	struct timespec ts;
	get_mono(&ts);
	return ts.tv_nsec;
#endif
}

unsigned difft(unsigned t2, unsigned t1)
{
	t2 -= t1;
	if ((int)t2 < 0)
		t2 += 1000000000;
	return t2;
}

void measure(unsigned sz, void *buf, void* (*m)(void *ptr, int c, size_t cnt), const char *name)
{
	unsigned t1, t2, cnt;
	unsigned repeat = 1;

	/* For small sizes, call m() repeatedly before measuring time diff */
	repeat = ((256*1024) / (sz|1)) ? : 1;

//	sleep(1);
	m(buf, FILL, sz); /* warm up caches */
	m(buf, FILL, sz); /* warm up caches */

	t2 = -1U;
	cnt = 1000;
	while (--cnt) {
		unsigned rep = repeat;

		t1 = gett();
		do {
			m(buf, FILL, sz);
		} while (--rep);
		t1 = difft(gett(), t1);
		if (t2 > t1)
			t2 = t1;
//		printf("%s:%u ns %u\n", name, t1, t2);
	}
//	printf("%s:%u ns (times %d), %u bytes, %.2f bytes/ns\n", name, t2, repeat, sz, (double)(sz) * repeat / t2);
	printf("%u byte block: %.2f bytes/ns\n", sz, (double)(sz) * repeat / t2);
}

int main()
{
	int sz;
	char *buf = malloc(BUF + 4096);

	buf += 0x100;
	buf = (char*)((long)buf & ~0xffL);

	setlinebuf(stdout);
	printf("size:%u (%uk) buf:%p\n", BUF, BUF/1024, buf);

	sz = BUF;
	do {
		measure(sz, buf, memset, "musl");
//		measure(sz, buf+1, memset, "musL");
	} while (--sz >= 0);
//	measure(buf, memset_movnti, "movnti");
//	measure(buf, memset_movnti_unroll, "movnti_unroll");
//	measure(buf, memset_rep_stosq, "stos");
//	measure(buf+1, memset_movnti, "movnti+1");
//	measure(buf+1, memset_movnti_unroll, "movnti_unroll+1");
//	measure(buf+1, memset_rep_stosq, "stos+1");
//	measure(buf+3, memset_movnti, "movnti+3");
//	measure(buf+3, memset_movnti_unroll, "movnti_unroll+3");
//	measure(buf+4, memset_rep_stosq, "stos+4");
//	measure(buf+8, memset_rep_stosq, "stos+8");

	return 0;
}

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-17 16:51                 ` Denys Vlasenko
@ 2015-02-17 17:30                   ` Denys Vlasenko
  2015-02-17 17:40                   ` Rich Felker
  1 sibling, 0 replies; 18+ messages in thread
From: Denys Vlasenko @ 2015-02-17 17:30 UTC (permalink / raw)
  To: Rich Felker; +Cc: musl

[-- Attachment #1: Type: text/plain, Size: 1244 bytes --]

On Tue, Feb 17, 2015 at 5:51 PM, Denys Vlasenko
<vda.linux@googlemail.com> wrote:
> On Tue, Feb 17, 2015 at 5:12 PM, Rich Felker <dalias@libc.org> wrote:
>> On Tue, Feb 17, 2015 at 02:08:52PM +0100, Denys Vlasenko wrote:
>>> >> Please see attached file.
>>> >
>>> > I tried it and it's ~1 cycle slower for at least sizes 16-30;
>>> > presumably we're seeing the cost of the extra compare/branch at these
>>> > sizes but not at others. What does your timing test show?
>>>
>>> See below.
>>> First column - result of my2.s
>>> Second column - result of vda1.s
>>>
>>> Basically, the "rep stosq" code path got a bit faster, while
>>> small memsets stayed the same.
>>
>> Can you post your test program for me to try out? Here's what I've
>> been using, attached.
>
> With your program I see similar results:

Changed your program to output floating point results,
and do many more iterations finding minimum,
as otherwise (on my machine) consecutive runs give
+-2 cycles discrepancy for most measurements.
With one million iterations, discrepancy between
 runs is often zero, and when it's not, it's one cycle or less.

Please see attached files.
my2.OUT1 and my2.OUT2 are two runs of my2.s code
(to judge how much noise is in the measurements).

[-- Attachment #2: my2.OUT1 --]
[-- Type: application/octet-stream, Size: 1533 bytes --]

size 2: min=7.96, avg=8.17
size 4: min=8.01, avg=8.19
size 6: min=8.03, avg=8.26
size 8: min=8.12, avg=8.31
size 10: min=8.13, avg=8.45
size 12: min=8.19, avg=8.41
size 14: min=8.21, avg=8.48
size 16: min=9.05, avg=9.35
size 18: min=9.06, avg=9.49
size 20: min=9.12, avg=9.45
size 22: min=9.20, avg=9.48
size 24: min=9.22, avg=9.54
size 26: min=9.24, avg=9.65
size 28: min=9.34, avg=10.21
size 30: min=9.27, avg=9.71
size 32: min=10.94, avg=11.17
size 34: min=12.41, avg=12.75
size 36: min=12.56, avg=12.87
size 38: min=12.58, avg=12.97
size 40: min=11.75, avg=12.39
size 42: min=11.87, avg=12.07
size 44: min=11.73, avg=12.74
size 46: min=11.71, avg=12.89
size 48: min=11.70, avg=12.69
size 50: min=11.70, avg=12.92
size 52: min=11.84, avg=13.03
size 54: min=11.67, avg=12.23
size 56: min=11.65, avg=12.37
size 58: min=11.65, avg=12.13
size 60: min=11.62, avg=12.05
size 62: min=11.62, avg=12.11
size 64: min=19.40, avg=19.98
size 96: min=18.00, avg=18.58
size 128: min=32.14, avg=34.43
size 160: min=35.50, avg=37.91
size 192: min=39.00, avg=41.62
size 224: min=42.00, avg=46.42
size 256: min=45.00, avg=50.31
size 288: min=48.00, avg=52.63
size 320: min=51.00, avg=55.73
size 352: min=57.00, avg=61.11
size 384: min=60.00, avg=64.06
size 416: min=63.00, avg=67.07
size 448: min=66.00, avg=70.23
size 480: min=69.00, avg=73.61
size 512: min=75.00, avg=83.13
size 1024: min=126.00, avg=134.42
size 2048: min=228.00, avg=237.24
size 4096: min=432.00, avg=453.01
size 8192: min=837.00, avg=861.20
size 16384: min=1650.00, avg=1695.39

[-- Attachment #3: vda1.OUT1 --]
[-- Type: application/octet-stream, Size: 1533 bytes --]

size 2: min=7.97, avg=8.15
size 4: min=8.01, avg=8.21
size 6: min=8.03, avg=8.27
size 8: min=8.12, avg=8.29
size 10: min=8.16, avg=8.40
size 12: min=8.19, avg=8.49
size 14: min=8.25, avg=8.46
size 16: min=9.10, avg=9.33
size 18: min=9.11, avg=9.48
size 20: min=9.19, avg=9.53
size 22: min=9.20, avg=9.49
size 24: min=9.22, avg=9.51
size 26: min=9.24, avg=9.60
size 28: min=9.34, avg=10.06
size 30: min=9.36, avg=9.95
size 32: min=10.94, avg=11.34
size 34: min=12.52, avg=12.88
size 36: min=12.56, avg=12.98
size 38: min=12.69, avg=13.00
size 40: min=11.75, avg=12.15
size 42: min=11.87, avg=12.43
size 44: min=11.73, avg=13.18
size 46: min=11.71, avg=13.14
size 48: min=11.85, avg=13.43
size 50: min=11.85, avg=13.26
size 52: min=11.84, avg=13.34
size 54: min=11.67, avg=12.38
size 56: min=11.65, avg=12.24
size 58: min=11.65, avg=12.72
size 60: min=11.62, avg=12.36
size 62: min=11.62, avg=12.25
size 64: min=19.40, avg=20.45
size 96: min=18.00, avg=18.55
size 128: min=31.29, avg=33.33
size 160: min=34.50, avg=36.89
size 192: min=37.80, avg=40.21
size 224: min=42.00, avg=43.81
size 256: min=45.00, avg=48.03
size 288: min=48.00, avg=52.69
size 320: min=51.00, avg=55.10
size 352: min=55.50, avg=59.32
size 384: min=58.50, avg=61.74
size 416: min=61.50, avg=65.17
size 448: min=64.50, avg=69.09
size 480: min=67.50, avg=71.62
size 512: min=75.00, avg=80.14
size 1024: min=126.00, avg=131.30
size 2048: min=228.00, avg=235.69
size 4096: min=432.00, avg=442.48
size 8192: min=837.00, avg=862.37
size 16384: min=1650.00, avg=1687.02

[-- Attachment #4: memset-cycles-vda.c --]
[-- Type: text/x-csrc, Size: 1222 bytes --]

#define _XOPEN_SOURCE 700
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

static inline unsigned rdtsc()
{
#if defined __i386__ || defined __x86_64__
	unsigned x;
	__asm__ __volatile__ ( "rdtsc" : "=a"(x) : : "rdx" );
//	__asm__ __volatile__ ( "cpuid ; rdtsc" : "=a"(x)
//		: : "rbx", "rcx", "rdx" );
	return x;
#else
	struct timespec ts;
	clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts);
	return ts.tv_nsec;
#endif
}

char buf[32768+100];

int main()
{
	unsigned i, t, tmin;
	unsigned long long tmean;
	unsigned n;

// I need a million of iterations to get a stable "min" measurement
#define REP (1024*4096)

	for (n=2; n<32768; n+=(n<64 ? 2 : n<512 ? 32 : n)) {
		int repeat = (1024 / (n|1)) ? : 1;

		memset(buf, 0, n);
		tmin = -1;
		tmean = 0;
		for (i=0; i < REP; i++) {
			int j = repeat;
			__asm__ __volatile__ ("" : : : "memory");
			t = rdtsc();
			do {
				memset(buf, 0, n);
				__asm__ __volatile__ ("" : : : "memory");
			} while (--j != 0);
			t = rdtsc() - t;
			__asm__ __volatile__ ("" : : : "memory");
			if (t < tmin) tmin = t;
			tmean += t;
		}
		printf("size %u: min=%.2f, avg=%.2f\n",
			n,
			(double)tmin / repeat,
			(double)tmean / (repeat*REP)
		);
	}
	return 0;
}

[-- Attachment #5: my2.OUT2 --]
[-- Type: application/octet-stream, Size: 1533 bytes --]

size 2: min=7.96, avg=8.20
size 4: min=8.01, avg=8.24
size 6: min=8.03, avg=8.29
size 8: min=8.10, avg=8.32
size 10: min=8.16, avg=8.45
size 12: min=8.19, avg=8.50
size 14: min=8.25, avg=8.49
size 16: min=9.10, avg=9.35
size 18: min=9.17, avg=9.58
size 20: min=9.12, avg=9.48
size 22: min=9.20, avg=9.54
size 24: min=9.22, avg=9.61
size 26: min=9.24, avg=9.68
size 28: min=9.34, avg=10.25
size 30: min=9.36, avg=9.89
size 32: min=10.94, avg=11.33
size 34: min=12.41, avg=12.87
size 36: min=12.56, avg=12.98
size 38: min=12.58, avg=12.98
size 40: min=11.75, avg=12.22
size 42: min=11.87, avg=12.30
size 44: min=11.73, avg=12.71
size 46: min=11.71, avg=12.82
size 48: min=11.70, avg=12.65
size 50: min=11.70, avg=12.64
size 52: min=11.84, avg=15.61
size 54: min=11.67, avg=12.71
size 56: min=11.65, avg=12.33
size 58: min=11.65, avg=12.43
size 60: min=11.62, avg=12.10
size 62: min=11.62, avg=12.05
size 64: min=19.40, avg=20.12
size 96: min=18.00, avg=18.46
size 128: min=32.14, avg=34.66
size 160: min=36.00, avg=37.96
size 192: min=38.40, avg=41.83
size 224: min=42.75, avg=45.58
size 256: min=45.00, avg=50.88
size 288: min=49.00, avg=54.01
size 320: min=52.00, avg=56.12
size 352: min=57.00, avg=60.68
size 384: min=60.00, avg=63.90
size 416: min=63.00, avg=67.51
size 448: min=66.00, avg=70.17
size 480: min=69.00, avg=73.32
size 512: min=75.00, avg=82.78
size 1024: min=126.00, avg=134.00
size 2048: min=228.00, avg=237.86
size 4096: min=432.00, avg=448.33
size 8192: min=837.00, avg=862.52
size 16384: min=1650.00, avg=1698.77

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-17 16:51                 ` Denys Vlasenko
  2015-02-17 17:30                   ` Denys Vlasenko
@ 2015-02-17 17:40                   ` Rich Felker
  2015-02-17 18:53                     ` Denys Vlasenko
  1 sibling, 1 reply; 18+ messages in thread
From: Rich Felker @ 2015-02-17 17:40 UTC (permalink / raw)
  To: Denys Vlasenko; +Cc: musl

On Tue, Feb 17, 2015 at 05:51:11PM +0100, Denys Vlasenko wrote:
> On Tue, Feb 17, 2015 at 5:12 PM, Rich Felker <dalias@libc.org> wrote:
> > On Tue, Feb 17, 2015 at 02:08:52PM +0100, Denys Vlasenko wrote:
> >> >> Please see attached file.
> >> >
> >> > I tried it and it's ~1 cycle slower for at least sizes 16-30;
> >> > presumably we're seeing the cost of the extra compare/branch at these
> >> > sizes but not at others. What does your timing test show?
> >>
> >> See below.
> >> First column - result of my2.s
> >> Second column - result of vda1.s
> >>
> >> Basically, the "rep stosq" code path got a bit faster, while
> >> small memsets stayed the same.
> >
> > Can you post your test program for me to try out? Here's what I've
> > been using, attached.
> 
> With your program I see similar results:
> 
> ....
> size 50: min=10, avg=10           min=10, avg=10
> size 52: min=10, avg=10           min=10, avg=10

The ... was the part where mine seemed better. :)

Anyway thanks; I'll give your test program a run and see what comes
out. I don't think the difference is going to be big either way, but I
suspect mine is slightly faster for small sizes (~1-30) and slightly
slower for large sizes (>126).

BTW I appreciate your work and interest in improving this. I just
don't like string-ops optimization in general because determining that
changes are actually a net gain for a wide range of cpus and usage
cases and not just for one benchmark turns into a big time sink. :-(
But at least it's fun...

Rich


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-17 17:40                   ` Rich Felker
@ 2015-02-17 18:53                     ` Denys Vlasenko
  2015-02-17 21:12                       ` Rich Felker
  0 siblings, 1 reply; 18+ messages in thread
From: Denys Vlasenko @ 2015-02-17 18:53 UTC (permalink / raw)
  To: Rich Felker; +Cc: musl

[-- Attachment #1: Type: text/plain, Size: 632 bytes --]

On Tue, Feb 17, 2015 at 6:40 PM, Rich Felker <dalias@libc.org> wrote:
>> With your program I see similar results:
>>
>> ....
>> size 50: min=10, avg=10           min=10, avg=10
>> size 52: min=10, avg=10           min=10, avg=10
>
> The ... was the part where mine seemed better. :)

Do you seriously think I would go as low as lying by omission?
Here are the full, unabridged files of three runs of both algorithms.

$ gcc -O2 -Wall memset-cycles-vda.c vda1.s.
$ ./a.out >vda1.OUT1 && ./a.out >vda1.OUT2 && ./a.out >vda1.OUT3
$ gcc -O2 -Wall memset-cycles-vda.c my2.s.
$ ./a.out >my2.OUT1 && ./a.out >my2.OUT2 && ./a.out >my2.OUT3

[-- Attachment #2: memset-cycles-vda.c --]
[-- Type: text/x-csrc, Size: 1222 bytes --]

#define _XOPEN_SOURCE 700
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

static inline unsigned rdtsc()
{
#if defined __i386__ || defined __x86_64__
	unsigned x;
	__asm__ __volatile__ ( "rdtsc" : "=a"(x) : : "rdx" );
//	__asm__ __volatile__ ( "cpuid ; rdtsc" : "=a"(x)
//		: : "rbx", "rcx", "rdx" );
	return x;
#else
	struct timespec ts;
	clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts);
	return ts.tv_nsec;
#endif
}

char buf[32768+100];

int main()
{
	unsigned i, t, tmin;
	unsigned long long tmean;
	unsigned n;

// I need a million of iterations to get a stable "min" measurement
#define REP (1024*4096)

	for (n=2; n<32768; n+=(n<64 ? 2 : n<512 ? 32 : n)) {
		int repeat = (1024 / (n|1)) ? : 1;

		memset(buf, 0, n);
		tmin = -1;
		tmean = 0;
		for (i=0; i < REP; i++) {
			int j = repeat;
			__asm__ __volatile__ ("" : : : "memory");
			t = rdtsc();
			do {
				memset(buf, 0, n);
				__asm__ __volatile__ ("" : : : "memory");
			} while (--j != 0);
			t = rdtsc() - t;
			__asm__ __volatile__ ("" : : : "memory");
			if (t < tmin) tmin = t;
			tmean += t;
		}
		printf("size %u: min=%.2f, avg=%.2f\n",
			n,
			(double)tmin / repeat,
			(double)tmean / (repeat*REP)
		);
	}
	return 0;
}

[-- Attachment #3: my2.OUT1 --]
[-- Type: application/octet-stream, Size: 1532 bytes --]

size 2: min=7.96, avg=8.04
size 4: min=8.01, avg=8.07
size 6: min=8.01, avg=8.09
size 8: min=8.12, avg=8.26
size 10: min=8.16, avg=8.26
size 12: min=8.19, avg=8.31
size 14: min=8.25, avg=8.35
size 16: min=9.10, avg=9.20
size 18: min=9.17, avg=9.26
size 20: min=9.12, avg=9.32
size 22: min=9.20, avg=9.36
size 24: min=9.15, avg=9.42
size 26: min=9.32, avg=9.47
size 28: min=9.34, avg=9.92
size 30: min=9.36, avg=9.58
size 32: min=10.94, avg=11.09
size 34: min=12.41, avg=12.60
size 36: min=12.56, avg=12.70
size 38: min=12.58, avg=12.74
size 40: min=11.75, avg=11.91
size 42: min=11.87, avg=11.91
size 44: min=11.73, avg=12.85
size 46: min=11.71, avg=13.06
size 48: min=11.70, avg=12.15
size 50: min=11.70, avg=12.54
size 52: min=11.84, avg=12.77
size 54: min=11.67, avg=11.91
size 56: min=11.65, avg=11.90
size 58: min=11.65, avg=11.90
size 60: min=11.62, avg=11.90
size 62: min=11.62, avg=11.90
size 64: min=19.40, avg=19.77
size 96: min=18.00, avg=18.32
size 128: min=32.57, avg=34.11
size 160: min=36.00, avg=37.56
size 192: min=39.00, avg=41.05
size 224: min=42.75, avg=44.75
size 256: min=45.00, avg=48.84
size 288: min=49.00, avg=52.01
size 320: min=52.00, avg=55.30
size 352: min=57.00, avg=59.91
size 384: min=60.00, avg=63.21
size 416: min=63.00, avg=67.28
size 448: min=66.00, avg=69.39
size 480: min=69.00, avg=72.74
size 512: min=75.00, avg=81.59
size 1024: min=126.00, avg=132.66
size 2048: min=228.00, avg=234.63
size 4096: min=432.00, avg=438.55
size 8192: min=837.00, avg=846.30
size 16384: min=1650.00, avg=1662.39

[-- Attachment #4: my2.OUT2 --]
[-- Type: application/octet-stream, Size: 1532 bytes --]

size 2: min=7.95, avg=8.03
size 4: min=7.99, avg=8.05
size 6: min=8.01, avg=8.09
size 8: min=8.12, avg=8.19
size 10: min=8.16, avg=8.24
size 12: min=8.19, avg=8.30
size 14: min=8.25, avg=8.35
size 16: min=9.10, avg=9.20
size 18: min=9.11, avg=9.25
size 20: min=9.19, avg=9.31
size 22: min=9.20, avg=9.36
size 24: min=9.22, avg=9.42
size 26: min=9.24, avg=9.46
size 28: min=9.34, avg=9.92
size 30: min=9.36, avg=9.55
size 32: min=10.94, avg=11.08
size 34: min=12.41, avg=12.60
size 36: min=12.56, avg=12.70
size 38: min=12.58, avg=12.72
size 40: min=11.75, avg=11.93
size 42: min=11.87, avg=11.90
size 44: min=11.73, avg=12.77
size 46: min=11.71, avg=12.68
size 48: min=11.70, avg=12.41
size 50: min=11.70, avg=12.36
size 52: min=11.84, avg=12.58
size 54: min=11.67, avg=11.90
size 56: min=11.65, avg=11.89
size 58: min=11.65, avg=11.89
size 60: min=11.62, avg=11.89
size 62: min=11.62, avg=11.89
size 64: min=19.40, avg=19.77
size 96: min=18.00, avg=18.31
size 128: min=32.57, avg=34.10
size 160: min=36.00, avg=37.62
size 192: min=39.00, avg=41.06
size 224: min=42.75, avg=44.87
size 256: min=45.00, avg=48.80
size 288: min=49.00, avg=51.98
size 320: min=52.00, avg=55.16
size 352: min=57.00, avg=59.86
size 384: min=60.00, avg=63.03
size 416: min=63.00, avg=66.21
size 448: min=66.00, avg=69.40
size 480: min=70.50, avg=76.88
size 512: min=78.00, avg=86.55
size 1024: min=129.00, avg=149.69
size 2048: min=228.00, avg=273.30
size 4096: min=432.00, avg=510.75
size 8192: min=837.00, avg=985.31
size 16384: min=1650.00, avg=2060.94

[-- Attachment #5: my2.OUT3 --]
[-- Type: application/octet-stream, Size: 1532 bytes --]

size 2: min=7.97, avg=8.03
size 4: min=8.00, avg=8.13
size 6: min=8.01, avg=8.11
size 8: min=8.12, avg=8.20
size 10: min=8.16, avg=8.25
size 12: min=8.19, avg=8.30
size 14: min=8.25, avg=8.35
size 16: min=9.10, avg=9.20
size 18: min=9.17, avg=9.26
size 20: min=9.19, avg=9.31
size 22: min=9.20, avg=9.36
size 24: min=9.22, avg=9.42
size 26: min=9.24, avg=9.47
size 28: min=9.34, avg=9.93
size 30: min=9.36, avg=9.56
size 32: min=10.94, avg=11.09
size 34: min=12.41, avg=12.61
size 36: min=12.56, avg=12.71
size 38: min=12.58, avg=12.74
size 40: min=11.75, avg=11.93
size 42: min=11.87, avg=11.99
size 44: min=11.73, avg=12.87
size 46: min=11.71, avg=12.48
size 48: min=11.70, avg=12.56
size 50: min=11.70, avg=12.12
size 52: min=11.84, avg=12.70
size 54: min=11.67, avg=11.90
size 56: min=11.65, avg=11.90
size 58: min=11.65, avg=11.90
size 60: min=11.62, avg=11.90
size 62: min=11.62, avg=11.90
size 64: min=19.40, avg=19.77
size 96: min=18.00, avg=18.35
size 128: min=32.14, avg=34.11
size 160: min=36.00, avg=37.54
size 192: min=39.00, avg=41.07
size 224: min=42.00, avg=44.80
size 256: min=45.00, avg=48.82
size 288: min=49.00, avg=51.99
size 320: min=52.00, avg=55.20
size 352: min=57.00, avg=59.85
size 384: min=60.00, avg=63.08
size 416: min=63.00, avg=66.26
size 448: min=66.00, avg=69.41
size 480: min=69.00, avg=72.70
size 512: min=75.00, avg=81.62
size 1024: min=126.00, avg=132.54
size 2048: min=228.00, avg=234.49
size 4096: min=432.00, avg=438.37
size 8192: min=837.00, avg=846.75
size 16384: min=1650.00, avg=1662.54

[-- Attachment #6: vda1.OUT1 --]
[-- Type: application/octet-stream, Size: 1532 bytes --]

size 2: min=7.97, avg=8.05
size 4: min=8.01, avg=8.10
size 6: min=8.01, avg=8.10
size 8: min=8.12, avg=8.21
size 10: min=8.16, avg=8.26
size 12: min=8.19, avg=8.32
size 14: min=8.25, avg=8.36
size 16: min=9.10, avg=9.34
size 18: min=9.17, avg=9.27
size 20: min=9.19, avg=9.31
size 22: min=9.20, avg=9.36
size 24: min=9.22, avg=9.42
size 26: min=9.32, avg=9.47
size 28: min=9.34, avg=9.92
size 30: min=9.36, avg=9.55
size 32: min=10.94, avg=11.22
size 34: min=12.52, avg=12.74
size 36: min=12.67, avg=12.81
size 38: min=12.58, avg=12.85
size 40: min=11.75, avg=12.04
size 42: min=11.87, avg=11.99
size 44: min=11.73, avg=12.71
size 46: min=11.71, avg=12.62
size 48: min=11.85, avg=13.25
size 50: min=11.85, avg=13.09
size 52: min=11.84, avg=12.99
size 54: min=11.67, avg=12.08
size 56: min=11.65, avg=12.02
size 58: min=11.65, avg=12.03
size 60: min=11.62, avg=12.02
size 62: min=11.62, avg=12.05
size 64: min=19.40, avg=19.77
size 96: min=18.00, avg=18.32
size 128: min=31.71, avg=32.93
size 160: min=35.00, avg=36.29
size 192: min=37.80, avg=39.71
size 224: min=41.25, avg=43.34
size 256: min=45.00, avg=47.18
size 288: min=48.00, avg=50.37
size 320: min=51.00, avg=53.54
size 352: min=55.50, avg=57.92
size 384: min=58.50, avg=61.10
size 416: min=61.50, avg=64.26
size 448: min=64.50, avg=67.44
size 480: min=67.50, avg=70.73
size 512: min=75.00, avg=79.25
size 1024: min=126.00, avg=129.92
size 2048: min=228.00, avg=232.58
size 4096: min=432.00, avg=435.83
size 8192: min=837.00, avg=844.30
size 16384: min=1650.00, avg=1661.93

[-- Attachment #7: vda1.OUT2 --]
[-- Type: application/octet-stream, Size: 1534 bytes --]

size 2: min=7.97, avg=8.10
size 4: min=8.01, avg=8.05
size 6: min=8.03, avg=8.09
size 8: min=8.12, avg=9.39
size 10: min=8.16, avg=8.24
size 12: min=8.19, avg=8.66
size 14: min=8.25, avg=8.35
size 16: min=9.10, avg=9.20
size 18: min=9.17, avg=9.27
size 20: min=9.19, avg=9.31
size 22: min=9.20, avg=9.36
size 24: min=9.22, avg=9.42
size 26: min=9.24, avg=10.98
size 28: min=9.34, avg=10.25
size 30: min=9.36, avg=9.56
size 32: min=10.94, avg=11.22
size 34: min=12.52, avg=12.72
size 36: min=12.56, avg=14.66
size 38: min=12.69, avg=13.77
size 40: min=11.75, avg=11.99
size 42: min=11.87, avg=12.09
size 44: min=11.73, avg=12.48
size 46: min=11.71, avg=12.59
size 48: min=11.85, avg=12.89
size 50: min=11.85, avg=12.91
size 52: min=11.84, avg=13.56
size 54: min=11.67, avg=12.08
size 56: min=11.65, avg=12.21
size 58: min=11.65, avg=12.01
size 60: min=11.62, avg=12.03
size 62: min=11.62, avg=12.69
size 64: min=19.40, avg=19.77
size 96: min=18.00, avg=18.31
size 128: min=31.71, avg=32.91
size 160: min=35.00, avg=36.27
size 192: min=38.40, avg=40.45
size 224: min=41.25, avg=43.28
size 256: min=45.00, avg=47.20
size 288: min=48.00, avg=50.41
size 320: min=51.00, avg=69.57
size 352: min=55.50, avg=58.77
size 384: min=58.50, avg=61.09
size 416: min=61.50, avg=64.28
size 448: min=64.50, avg=72.61
size 480: min=69.00, avg=74.83
size 512: min=75.00, avg=83.85
size 1024: min=126.00, avg=146.97
size 2048: min=228.00, avg=270.72
size 4096: min=432.00, avg=508.53
size 8192: min=837.00, avg=982.23
size 16384: min=1650.00, avg=2077.87

[-- Attachment #8: vda1.OUT3 --]
[-- Type: application/octet-stream, Size: 1533 bytes --]

size 2: min=7.97, avg=8.19
size 4: min=8.01, avg=8.11
size 6: min=8.03, avg=8.81
size 8: min=8.12, avg=8.21
size 10: min=8.16, avg=8.24
size 12: min=8.19, avg=8.30
size 14: min=8.25, avg=8.35
size 16: min=9.10, avg=9.19
size 18: min=9.06, avg=9.25
size 20: min=9.19, avg=9.31
size 22: min=9.20, avg=9.35
size 24: min=9.22, avg=9.42
size 26: min=9.32, avg=9.48
size 28: min=9.34, avg=9.92
size 30: min=9.36, avg=9.56
size 32: min=10.94, avg=11.21
size 34: min=12.52, avg=12.72
size 36: min=12.67, avg=12.81
size 38: min=12.69, avg=12.84
size 40: min=11.75, avg=11.99
size 42: min=11.87, avg=11.98
size 44: min=11.73, avg=12.69
size 46: min=11.71, avg=12.40
size 48: min=11.85, avg=13.19
size 50: min=11.85, avg=13.01
size 52: min=11.84, avg=13.14
size 54: min=11.67, avg=12.09
size 56: min=11.65, avg=12.05
size 58: min=11.65, avg=12.02
size 60: min=11.62, avg=12.02
size 62: min=11.62, avg=12.02
size 64: min=19.40, avg=19.76
size 96: min=18.00, avg=18.31
size 128: min=31.71, avg=32.92
size 160: min=34.50, avg=36.28
size 192: min=38.40, avg=39.96
size 224: min=41.25, avg=46.85
size 256: min=45.00, avg=47.19
size 288: min=48.00, avg=50.35
size 320: min=51.00, avg=53.54
size 352: min=55.50, avg=57.88
size 384: min=58.50, avg=61.11
size 416: min=61.50, avg=64.26
size 448: min=64.50, avg=67.44
size 480: min=69.00, avg=74.91
size 512: min=75.00, avg=83.72
size 1024: min=126.00, avg=148.88
size 2048: min=228.00, avg=270.60
size 4096: min=432.00, avg=510.83
size 8192: min=837.00, avg=1000.11
size 16384: min=1650.00, avg=2079.31

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-17 18:53                     ` Denys Vlasenko
@ 2015-02-17 21:12                       ` Rich Felker
  2015-02-18  9:05                         ` Denys Vlasenko
  0 siblings, 1 reply; 18+ messages in thread
From: Rich Felker @ 2015-02-17 21:12 UTC (permalink / raw)
  To: Denys Vlasenko; +Cc: musl

On Tue, Feb 17, 2015 at 07:53:28PM +0100, Denys Vlasenko wrote:
> On Tue, Feb 17, 2015 at 6:40 PM, Rich Felker <dalias@libc.org> wrote:
> >> With your program I see similar results:
> >>
> >> ....
> >> size 50: min=10, avg=10           min=10, avg=10
> >> size 52: min=10, avg=10           min=10, avg=10
> >
> > The ... was the part where mine seemed better. :)
> 
> Do you seriously think I would go as low as lying by omission?
> Here are the full, unabridged files of three runs of both algorithms.

No, that's not what I meant, and I'm sorry for making it sound that
way. I just meant it was the interesting part I wanted to compare. For
me, I get ~1 cycle difference for a number of the small runs, but on
your test that measures rates in a way that's probably more applicable
to real-world use, there was no measureable difference one way or the
other.

Rich


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long
  2015-02-17 21:12                       ` Rich Felker
@ 2015-02-18  9:05                         ` Denys Vlasenko
  0 siblings, 0 replies; 18+ messages in thread
From: Denys Vlasenko @ 2015-02-18  9:05 UTC (permalink / raw)
  To: Rich Felker; +Cc: musl

On Tue, Feb 17, 2015 at 10:12 PM, Rich Felker <dalias@libc.org> wrote:
> For
> me, I get ~1 cycle difference for a number of the small runs, but on
> your test that measures rates in a way that's probably more applicable
> to real-world use, there was no measureable difference one way or the
> other.

We had an enjoyable bike shed painting session, don't we?

"Optimizing memset", a must for anyone who knows assembly :D


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2015-02-18  9:05 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-13 16:39 [PATCH] x86_64/memset: use "small block" code for blocks up to 30 bytes long Denys Vlasenko
2015-02-14 19:35 ` Rich Felker
2015-02-15  4:06   ` Rich Felker
2015-02-15 14:07     ` Denys Vlasenko
2015-02-15 15:03       ` Rich Felker
2015-02-15 21:44         ` Denys Vlasenko
2015-02-15 22:55           ` Rich Felker
2015-02-16 10:09             ` Denys Vlasenko
2015-02-16 15:12               ` Rich Felker
2015-02-16 17:36           ` Rich Felker
2015-02-17 13:08             ` Denys Vlasenko
2015-02-17 16:12               ` Rich Felker
2015-02-17 16:51                 ` Denys Vlasenko
2015-02-17 17:30                   ` Denys Vlasenko
2015-02-17 17:40                   ` Rich Felker
2015-02-17 18:53                     ` Denys Vlasenko
2015-02-17 21:12                       ` Rich Felker
2015-02-18  9:05                         ` Denys Vlasenko

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).