• Josh Bleecher Snyder's avatar
    cmd/6g, runtime: improve duffzero throughput · 7e0c11c3
    Josh Bleecher Snyder authored
    It is faster to execute
    
    	MOVQ AX,(DI)
    	MOVQ AX,8(DI)
    	MOVQ AX,16(DI)
    	MOVQ AX,24(DI)
    	ADDQ $32,DI
    
    than
    
    	STOSQ
    	STOSQ
    	STOSQ
    	STOSQ
    
    However, in order to be able to jump into
    the middle of a block of MOVQs, the call
    site needs to pre-adjust DI.
    
    If we're clearing a small area, the cost
    of that DI pre-adjustment isn't repaid.
    
    This CL switches the DUFFZERO implementation
    to use a hybrid strategy, in which small
    clears use STOSQ as before, but large clears
    use mostly MOVQ/ADDQ blocks.
    
    benchmark                 old ns/op     new ns/op     delta
    BenchmarkClearFat8        0.55          0.55          +0.00%
    BenchmarkClearFat12       0.82          0.83          +1.22%
    BenchmarkClearFat16       0.55          0.55          +0.00%
    BenchmarkClearFat24       0.82          0.82          +0.00%
    BenchmarkClearFat32       2.20          1.94          -11.82%
    BenchmarkClearFat40       1.92          1.66          -13.54%
    BenchmarkClearFat48       2.21          1.93          -12.67%
    BenchmarkClearFat56       3.03          2.20          -27.39%
    BenchmarkClearFat64       3.26          2.48          -23.93%
    BenchmarkClearFat72       3.57          2.76          -22.69%
    BenchmarkClearFat80       3.83          3.05          -20.37%
    BenchmarkClearFat88       4.14          3.30          -20.29%
    BenchmarkClearFat128      5.54          4.69          -15.34%
    BenchmarkClearFat256      9.95          9.09          -8.64%
    BenchmarkClearFat512      18.7          17.9          -4.28%
    BenchmarkClearFat1024     36.2          35.4          -2.21%
    
    Change-Id: Ic786406d9b3cab68d5a231688f9e66fcd1bd7103
    Reviewed-on: https://go-review.googlesource.com/2585Reviewed-by: 's avatarKeith Randall <khr@golang.org>
    7e0c11c3
Name
Last commit
Last update
..
cgo Loading commit data...
debug Loading commit data...
pprof Loading commit data...
race Loading commit data...
Makefile Loading commit data...
alg.go Loading commit data...
append_test.go Loading commit data...
arch1_386.go Loading commit data...
arch1_amd64.go Loading commit data...
arch1_amd64p32.go Loading commit data...
arch1_arm.go Loading commit data...
arch1_arm64.go Loading commit data...
arch1_ppc64.go Loading commit data...
arch1_ppc64le.go Loading commit data...
arch_386.go Loading commit data...
arch_amd64.go Loading commit data...
arch_amd64p32.go Loading commit data...
arch_arm.go Loading commit data...
arch_arm64.go Loading commit data...
arch_ppc64.go Loading commit data...
arch_ppc64le.go Loading commit data...
asm.s Loading commit data...
asm_386.s Loading commit data...
asm_amd64.s Loading commit data...
asm_amd64p32.s Loading commit data...
asm_arm.s Loading commit data...
asm_arm64.s Loading commit data...
asm_ppc64x.s Loading commit data...
atomic_386.go Loading commit data...
atomic_amd64x.go Loading commit data...
atomic_arm.go Loading commit data...
atomic_arm64.go Loading commit data...
atomic_arm64.s Loading commit data...
atomic_pointer.go Loading commit data...
atomic_ppc64x.go Loading commit data...
atomic_ppc64x.s Loading commit data...
cgo.go Loading commit data...
cgocall.go Loading commit data...
cgocallback.go Loading commit data...
chan.go Loading commit data...
chan_test.go Loading commit data...
closure_test.go Loading commit data...
compiler.go Loading commit data...
complex.go Loading commit data...
complex_test.go Loading commit data...
cpuprof.go Loading commit data...
cputicks.go Loading commit data...
crash_cgo_test.go Loading commit data...
crash_test.go Loading commit data...
debug.go Loading commit data...
defs1_linux.go Loading commit data...
defs1_netbsd_386.go Loading commit data...
defs1_netbsd_amd64.go Loading commit data...
defs1_netbsd_arm.go Loading commit data...
defs1_solaris_amd64.go Loading commit data...
defs2_linux.go Loading commit data...
defs3_linux.go Loading commit data...
defs_arm_linux.go Loading commit data...
defs_darwin.go Loading commit data...
defs_darwin_386.go Loading commit data...
defs_darwin_amd64.go Loading commit data...
defs_darwin_arm.go Loading commit data...
defs_dragonfly.go Loading commit data...
defs_dragonfly_amd64.go Loading commit data...
defs_freebsd.go Loading commit data...
defs_freebsd_386.go Loading commit data...
defs_freebsd_amd64.go Loading commit data...
defs_freebsd_arm.go Loading commit data...
defs_linux.go Loading commit data...
defs_linux_386.go Loading commit data...
defs_linux_amd64.go Loading commit data...
defs_linux_arm.go Loading commit data...
defs_linux_arm64.go Loading commit data...
defs_linux_ppc64.go Loading commit data...
defs_linux_ppc64le.go Loading commit data...
defs_nacl_386.go Loading commit data...
defs_nacl_amd64p32.go Loading commit data...
defs_nacl_arm.go Loading commit data...
defs_netbsd.go Loading commit data...
defs_netbsd_386.go Loading commit data...
defs_netbsd_amd64.go Loading commit data...
defs_netbsd_arm.go Loading commit data...
defs_openbsd.go Loading commit data...
defs_openbsd_386.go Loading commit data...
defs_openbsd_amd64.go Loading commit data...
defs_openbsd_arm.go Loading commit data...
defs_plan9_386.go Loading commit data...
defs_plan9_amd64.go Loading commit data...
defs_solaris.go Loading commit data...
defs_solaris_amd64.go Loading commit data...
defs_windows.go Loading commit data...
defs_windows_386.go Loading commit data...
defs_windows_amd64.go Loading commit data...
duff_386.s Loading commit data...
duff_amd64.s Loading commit data...
duff_arm.s Loading commit data...
duff_arm64.s Loading commit data...
duff_ppc64x.s Loading commit data...
env_plan9.go Loading commit data...
env_posix.go Loading commit data...
env_test.go Loading commit data...
error.go Loading commit data...
export_futex_test.go Loading commit data...
export_test.go Loading commit data...
export_windows_test.go Loading commit data...
extern.go Loading commit data...
funcdata.h Loading commit data...
futex_test.go Loading commit data...
gc_test.go Loading commit data...
gcinfo_test.go Loading commit data...
gengoos.go Loading commit data...
go_tls.h Loading commit data...
hash32.go Loading commit data...
hash64.go Loading commit data...
hash_test.go Loading commit data...
hashmap.go Loading commit data...
hashmap_fast.go Loading commit data...
heapdump.go Loading commit data...
iface.go Loading commit data...
iface_test.go Loading commit data...
lfstack.go Loading commit data...
lfstack_32bit.go Loading commit data...
lfstack_amd64.go Loading commit data...
lfstack_linux_arm64.go Loading commit data...
lfstack_linux_ppc64x.go Loading commit data...
lfstack_test.go Loading commit data...
lock_futex.go Loading commit data...
lock_sema.go Loading commit data...
malloc.go Loading commit data...
malloc_test.go Loading commit data...
map_test.go Loading commit data...
mapspeed_test.go Loading commit data...
mbarrier.go Loading commit data...
mbitmap.go Loading commit data...
mcache.go Loading commit data...
mcentral.go Loading commit data...
mem_bsd.go Loading commit data...
mem_darwin.go Loading commit data...
mem_linux.go Loading commit data...
mem_plan9.go Loading commit data...
mem_windows.go Loading commit data...
memclr_386.s Loading commit data...
memclr_amd64.s Loading commit data...
memclr_arm.s Loading commit data...
memclr_arm64.s Loading commit data...
memclr_plan9_386.s Loading commit data...
memclr_plan9_amd64.s Loading commit data...
memclr_ppc64x.s Loading commit data...
memmove_386.s Loading commit data...
memmove_amd64.s Loading commit data...
memmove_arm.s Loading commit data...
memmove_arm64.s Loading commit data...
memmove_linux_amd64_test.go Loading commit data...
memmove_nacl_amd64p32.s Loading commit data...
memmove_plan9_386.s Loading commit data...
memmove_plan9_amd64.s Loading commit data...
memmove_ppc64x.s Loading commit data...
memmove_test.go Loading commit data...
mfinal.go Loading commit data...
mfinal_test.go Loading commit data...
mfixalloc.go Loading commit data...
mgc.go Loading commit data...
mgcmark.go Loading commit data...
mgcsweep.go Loading commit data...
mgcwork.go Loading commit data...
mheap.go Loading commit data...
mkduff.go Loading commit data...
mknacl.sh Loading commit data...
mprof.go Loading commit data...
msize.go Loading commit data...
mstats.go Loading commit data...
netpoll.go Loading commit data...
netpoll_epoll.go Loading commit data...
netpoll_kqueue.go Loading commit data...
netpoll_nacl.go Loading commit data...
netpoll_solaris.go Loading commit data...
netpoll_stub.go Loading commit data...
netpoll_windows.go Loading commit data...
noasm.go Loading commit data...
norace_test.go Loading commit data...
os1_darwin.go Loading commit data...
os1_dragonfly.go Loading commit data...
os1_freebsd.go Loading commit data...
os1_linux.go Loading commit data...
os1_nacl.go Loading commit data...
os1_netbsd.go Loading commit data...
os1_netbsd_386.go Loading commit data...
os1_netbsd_amd64.go Loading commit data...
os1_openbsd.go Loading commit data...
os1_plan9.go Loading commit data...
os1_windows.go Loading commit data...
os2_darwin.go Loading commit data...
os2_dragonfly.go Loading commit data...
os2_freebsd.go Loading commit data...
os2_linux.go Loading commit data...
os2_nacl.go Loading commit data...
os2_netbsd.go Loading commit data...
os2_openbsd.go Loading commit data...
os2_plan9.go Loading commit data...
os2_solaris.go Loading commit data...
os2_windows.go Loading commit data...
os3_plan9.go Loading commit data...
os3_solaris.go Loading commit data...
os_android_arm.go Loading commit data...
os_darwin.go Loading commit data...
os_darwin_arm.go Loading commit data...
os_dragonfly.go Loading commit data...
os_freebsd.go Loading commit data...
os_freebsd_arm.go Loading commit data...
os_linux.go Loading commit data...
os_linux_386.go Loading commit data...
os_linux_arm.go Loading commit data...
os_linux_arm64.go Loading commit data...
os_nacl.go Loading commit data...
os_nacl_arm.go Loading commit data...
os_netbsd.go Loading commit data...
os_netbsd_arm.go Loading commit data...
os_openbsd.go Loading commit data...
os_openbsd_arm.go Loading commit data...
os_plan9.go Loading commit data...
os_solaris.go Loading commit data...
os_windows.go Loading commit data...
panic.go Loading commit data...
panic1.go Loading commit data...
parfor.go Loading commit data...
parfor_test.go Loading commit data...
print1.go Loading commit data...
print1_write.go Loading commit data...
print1_write_android.go Loading commit data...
proc.go Loading commit data...
proc1.go Loading commit data...
proc_test.go Loading commit data...
race.go Loading commit data...
race0.go Loading commit data...
race1.go Loading commit data...
race_amd64.s Loading commit data...
rdebug.go Loading commit data...
rt0_android_arm.s Loading commit data...
rt0_darwin_386.s Loading commit data...
rt0_darwin_amd64.s Loading commit data...
rt0_darwin_arm.s Loading commit data...
rt0_dragonfly_amd64.s Loading commit data...
rt0_freebsd_386.s Loading commit data...
rt0_freebsd_amd64.s Loading commit data...
rt0_freebsd_arm.s Loading commit data...
rt0_linux_386.s Loading commit data...
rt0_linux_amd64.s Loading commit data...
rt0_linux_arm.s Loading commit data...
rt0_linux_arm64.s Loading commit data...
rt0_linux_ppc64.s Loading commit data...
rt0_linux_ppc64le.s Loading commit data...
rt0_nacl_386.s Loading commit data...
rt0_nacl_amd64p32.s Loading commit data...
rt0_nacl_arm.s Loading commit data...
rt0_netbsd_386.s Loading commit data...
rt0_netbsd_amd64.s Loading commit data...
rt0_netbsd_arm.s Loading commit data...
rt0_openbsd_386.s Loading commit data...
rt0_openbsd_amd64.s Loading commit data...
rt0_openbsd_arm.s Loading commit data...
rt0_plan9_386.s Loading commit data...
rt0_plan9_amd64.s Loading commit data...
rt0_solaris_amd64.s Loading commit data...
rt0_windows_386.s Loading commit data...
rt0_windows_amd64.s Loading commit data...
rune.go Loading commit data...
runtime-gdb.py Loading commit data...
runtime-gdb_test.go Loading commit data...
runtime.go Loading commit data...
runtime1.go Loading commit data...
runtime2.go Loading commit data...
runtime_linux_test.go Loading commit data...
runtime_test.go Loading commit data...
runtime_unix_test.go Loading commit data...
select.go Loading commit data...
sema.go Loading commit data...
signal1_unix.go Loading commit data...
signal_386.go Loading commit data...
signal_amd64x.go Loading commit data...
signal_arm.go Loading commit data...
signal_arm64.go Loading commit data...
signal_darwin.go Loading commit data...
signal_darwin_386.go Loading commit data...
signal_darwin_amd64.go Loading commit data...
signal_darwin_arm.go Loading commit data...
signal_dragonfly.go Loading commit data...
signal_dragonfly_amd64.go Loading commit data...
signal_freebsd.go Loading commit data...
signal_freebsd_386.go Loading commit data...
signal_freebsd_amd64.go Loading commit data...
signal_freebsd_arm.go Loading commit data...
signal_linux.go Loading commit data...
signal_linux_386.go Loading commit data...
signal_linux_amd64.go Loading commit data...
signal_linux_arm.go Loading commit data...
signal_linux_arm64.go Loading commit data...
signal_linux_ppc64x.go Loading commit data...
signal_nacl.go Loading commit data...
signal_nacl_386.go Loading commit data...
signal_nacl_amd64p32.go Loading commit data...
signal_nacl_arm.go Loading commit data...
signal_netbsd.go Loading commit data...
signal_netbsd_386.go Loading commit data...
signal_netbsd_amd64.go Loading commit data...
signal_netbsd_arm.go Loading commit data...
signal_openbsd.go Loading commit data...
signal_openbsd_386.go Loading commit data...
signal_openbsd_amd64.go Loading commit data...
signal_openbsd_arm.go Loading commit data...
signal_plan9.go Loading commit data...
signal_ppc64x.go Loading commit data...
signal_solaris.go Loading commit data...
signal_solaris_amd64.go Loading commit data...
signal_unix.go Loading commit data...
signal_windows.go Loading commit data...
sigpanic_unix.go Loading commit data...
sigqueue.go Loading commit data...
sigqueue_plan9.go Loading commit data...
slice.go Loading commit data...
softfloat64.go Loading commit data...
softfloat64_test.go Loading commit data...
softfloat_arm.go Loading commit data...
sqrt.go Loading commit data...
stack1.go Loading commit data...
stack2.go Loading commit data...
stack_test.go Loading commit data...
string.go Loading commit data...
string1.go Loading commit data...
string_test.go Loading commit data...
stubs.go Loading commit data...
stubs2.go Loading commit data...
stubs_android.go Loading commit data...
symtab.go Loading commit data...
symtab_test.go Loading commit data...
sys_arm.go Loading commit data...
sys_arm64.go Loading commit data...
sys_darwin_386.s Loading commit data...
sys_darwin_amd64.s Loading commit data...
sys_darwin_arm.s Loading commit data...
sys_dragonfly_amd64.s Loading commit data...
sys_freebsd_386.s Loading commit data...
sys_freebsd_amd64.s Loading commit data...
sys_freebsd_arm.s Loading commit data...
sys_linux_386.s Loading commit data...
sys_linux_amd64.s Loading commit data...
sys_linux_arm.s Loading commit data...
sys_linux_arm64.s Loading commit data...
sys_linux_ppc64x.s Loading commit data...
sys_nacl_386.s Loading commit data...
sys_nacl_amd64p32.s Loading commit data...
sys_nacl_arm.s Loading commit data...
sys_netbsd_386.s Loading commit data...
sys_netbsd_amd64.s Loading commit data...
sys_netbsd_arm.s Loading commit data...
sys_openbsd_386.s Loading commit data...
sys_openbsd_amd64.s Loading commit data...
sys_openbsd_arm.s Loading commit data...
sys_plan9_386.s Loading commit data...
sys_plan9_amd64.s Loading commit data...
sys_ppc64x.go Loading commit data...
sys_solaris_amd64.s Loading commit data...
sys_windows_386.s Loading commit data...
sys_windows_amd64.s Loading commit data...
sys_x86.go Loading commit data...
syscall2_solaris.go Loading commit data...
syscall_nacl.h Loading commit data...
syscall_solaris.go Loading commit data...
syscall_windows.go Loading commit data...
syscall_windows_test.go Loading commit data...
textflag.h Loading commit data...
time.go Loading commit data...
tls_arm.s Loading commit data...
tls_arm64.h Loading commit data...
tls_arm64.s Loading commit data...
tls_ppc64x.s Loading commit data...
trace.go Loading commit data...
traceback.go Loading commit data...
type.go Loading commit data...
typekind.go Loading commit data...
typekind1.go Loading commit data...
unaligned1.go Loading commit data...
unaligned2.go Loading commit data...
vdso_linux_amd64.go Loading commit data...
vdso_none.go Loading commit data...
vlop_386.s Loading commit data...
vlop_arm.s Loading commit data...
vlop_arm_test.go Loading commit data...
vlrt.go Loading commit data...
wbfat.go Loading commit data...
wbfat_gen.go Loading commit data...
wincallback.go Loading commit data...
zcallback_windows.go Loading commit data...
zcallback_windows.s Loading commit data...
zgoarch_386.go Loading commit data...
zgoarch_amd64.go Loading commit data...
zgoarch_amd64p32.go Loading commit data...
zgoarch_arm.go Loading commit data...
zgoarch_arm64.go Loading commit data...
zgoarch_ppc64.go Loading commit data...
zgoarch_ppc64le.go Loading commit data...
zgoos_android.go Loading commit data...
zgoos_darwin.go Loading commit data...
zgoos_dragonfly.go Loading commit data...
zgoos_freebsd.go Loading commit data...
zgoos_linux.go Loading commit data...
zgoos_nacl.go Loading commit data...
zgoos_netbsd.go Loading commit data...
zgoos_openbsd.go Loading commit data...
zgoos_plan9.go Loading commit data...
zgoos_solaris.go Loading commit data...
zgoos_windows.go Loading commit data...