Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save pvoliveira/6b7386b8b8442e68b540479143d36aea to your computer and use it in GitHub Desktop.
Save pvoliveira/6b7386b8b8442e68b540479143d36aea to your computer and use it in GitHub Desktop.
AsyncExperts Module 01 - benchmark results

.NET Core 3.1.8 (CoreCLR 4.700.20.41105, CoreFX 4.700.20.41903), X64 RyuJIT

; Dotnetos.AsyncExpert.Homework.Module01.Benchmark.FibonacciCalc.Recursive(UInt64)
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,20
       mov       rdi,rcx
       mov       rsi,rdx
       cmp       rsi,1
       je        short M00_L00
       cmp       rsi,2
       jne       short M00_L01
M00_L00:
       mov       eax,1
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M00_L01:
       lea       rdx,[rsi+0FFFE]
       mov       rcx,rdi
       call      Dotnetos.AsyncExpert.Homework.Module01.Benchmark.FibonacciCalc.Recursive(UInt64)
       mov       rbx,rax
       lea       rdx,[rsi+0FFFF]
       mov       rcx,rdi
       call      Dotnetos.AsyncExpert.Homework.Module01.Benchmark.FibonacciCalc.Recursive(UInt64)
       add       rax,rbx
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 76

.NET Core 3.1.8 (CoreCLR 4.700.20.41105, CoreFX 4.700.20.41903), X64 RyuJIT

; Dotnetos.AsyncExpert.Homework.Module01.Benchmark.FibonacciCalc.RecursiveWithMemoization(UInt64)
       push      r15
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       mov       rsi,rcx
       mov       rdi,rdx
       cmp       qword ptr [rsi+8],0
       jne       short M00_L00
       test      rdi,rdi
       jl        near ptr M00_L04
       mov       rdx,rdi
       mov       rcx,offset MT_System.UInt64[]
       call      CORINFO_HELP_NEWARR_1_VC
       lea       rcx,[rsi+8]
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
M00_L00:
       cmp       rdi,1
       je        short M00_L01
       cmp       rdi,2
       jne       short M00_L02
M00_L01:
       mov       rdx,[rsi+8]
       dec       rdi
       test      rdi,rdi
       jl        near ptr M00_L04
       mov       eax,[rdx+8]
       movsxd    rax,eax
       cmp       rdi,rax
       jae       near ptr M00_L05
       mov       qword ptr [rdx+rdi*8+10],1
       mov       eax,1
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M00_L02:
       mov       rdx,[rsi+8]
       mov       rax,rdx
       lea       rcx,[rdi+0FFFF]
       test      rcx,rcx
       jl        near ptr M00_L04
       mov       rbx,rcx
       mov       rcx,rbx
       mov       r8d,[rax+8]
       movsxd    r8,r8d
       cmp       rcx,r8
       jae       short M00_L05
       mov       rax,[rax+rcx*8+10]
       test      rax,rax
       je        short M00_L03
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M00_L03:
       mov       rbp,rdx
       mov       r14,rbx
       lea       rdx,[rdi+0FFFE]
       mov       rcx,rsi
       call      Dotnetos.AsyncExpert.Homework.Module01.Benchmark.FibonacciCalc.RecursiveWithMemoization(UInt64)
       mov       r15,rax
       lea       rdx,[rdi+0FFFF]
       mov       rcx,rsi
       call      Dotnetos.AsyncExpert.Homework.Module01.Benchmark.FibonacciCalc.RecursiveWithMemoization(UInt64)
       add       rax,r15
       mov       edx,[rbp+8]
       movsxd    rdx,edx
       cmp       r14,rdx
       jae       short M00_L05
       mov       [rbp+r14*8+10],rax
       mov       rax,[rsi+8]
       mov       rdx,rbx
       mov       ecx,[rax+8]
       movsxd    rcx,ecx
       cmp       rdx,rcx
       jae       short M00_L05
       mov       rax,[rax+rdx*8+10]
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M00_L04:
       call      CORINFO_HELP_OVERFLOW
       int       3
M00_L05:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 295

.NET Core 3.1.8 (CoreCLR 4.700.20.41105, CoreFX 4.700.20.41903), X64 RyuJIT

; Dotnetos.AsyncExpert.Homework.Module01.Benchmark.FibonacciCalc.Iterative(UInt64)
       xor       eax,eax
       mov       ecx,1
       mov       r8d,1
       mov       r9d,2
       cmp       rdx,2
       jbe       short M00_L01
M00_L00:
       lea       rax,[r8+rcx]
       mov       rcx,r8
       mov       r8,rax
       inc       r9
       cmp       r9,rdx
       jb        short M00_L00
M00_L01:
       ret
; Total bytes of code 44

.NET Core 3.1.8 (CoreCLR 4.700.20.41105, CoreFX 4.700.20.41903), X64 RyuJIT

; Dotnetos.AsyncExpert.Homework.Module01.Benchmark.FibonacciCalc.Recursive(UInt64)
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,20
       mov       rdi,rcx
       mov       rsi,rdx
       cmp       rsi,1
       je        short M00_L00
       cmp       rsi,2
       jne       short M00_L01
M00_L00:
       mov       eax,1
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M00_L01:
       lea       rdx,[rsi+0FFFE]
       mov       rcx,rdi
       call      Dotnetos.AsyncExpert.Homework.Module01.Benchmark.FibonacciCalc.Recursive(UInt64)
       mov       rbx,rax
       lea       rdx,[rsi+0FFFF]
       mov       rcx,rdi
       call      Dotnetos.AsyncExpert.Homework.Module01.Benchmark.FibonacciCalc.Recursive(UInt64)
       add       rax,rbx
       add       rsp,20
       pop       rbx
       pop       rsi
       pop       rdi
       ret
; Total bytes of code 76

.NET Core 3.1.8 (CoreCLR 4.700.20.41105, CoreFX 4.700.20.41903), X64 RyuJIT

; Dotnetos.AsyncExpert.Homework.Module01.Benchmark.FibonacciCalc.RecursiveWithMemoization(UInt64)
       push      r15
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,28
       mov       rsi,rcx
       mov       rdi,rdx
       cmp       qword ptr [rsi+8],0
       jne       short M00_L00
       test      rdi,rdi
       jl        near ptr M00_L04
       mov       rdx,rdi
       mov       rcx,offset MT_System.UInt64[]
       call      CORINFO_HELP_NEWARR_1_VC
       lea       rcx,[rsi+8]
       mov       rdx,rax
       call      CORINFO_HELP_ASSIGN_REF
M00_L00:
       cmp       rdi,1
       je        short M00_L01
       cmp       rdi,2
       jne       short M00_L02
M00_L01:
       mov       rdx,[rsi+8]
       dec       rdi
       test      rdi,rdi
       jl        near ptr M00_L04
       mov       eax,[rdx+8]
       movsxd    rax,eax
       cmp       rdi,rax
       jae       near ptr M00_L05
       mov       qword ptr [rdx+rdi*8+10],1
       mov       eax,1
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M00_L02:
       mov       rdx,[rsi+8]
       mov       rax,rdx
       lea       rcx,[rdi+0FFFF]
       test      rcx,rcx
       jl        near ptr M00_L04
       mov       rbx,rcx
       mov       rcx,rbx
       mov       r8d,[rax+8]
       movsxd    r8,r8d
       cmp       rcx,r8
       jae       short M00_L05
       mov       rax,[rax+rcx*8+10]
       test      rax,rax
       je        short M00_L03
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M00_L03:
       mov       rbp,rdx
       mov       r14,rbx
       lea       rdx,[rdi+0FFFE]
       mov       rcx,rsi
       call      Dotnetos.AsyncExpert.Homework.Module01.Benchmark.FibonacciCalc.RecursiveWithMemoization(UInt64)
       mov       r15,rax
       lea       rdx,[rdi+0FFFF]
       mov       rcx,rsi
       call      Dotnetos.AsyncExpert.Homework.Module01.Benchmark.FibonacciCalc.RecursiveWithMemoization(UInt64)
       add       rax,r15
       mov       edx,[rbp+8]
       movsxd    rdx,edx
       cmp       r14,rdx
       jae       short M00_L05
       mov       [rbp+r14*8+10],rax
       mov       rax,[rsi+8]
       mov       rdx,rbx
       mov       ecx,[rax+8]
       movsxd    rcx,ecx
       cmp       rdx,rcx
       jae       short M00_L05
       mov       rax,[rax+rdx*8+10]
       add       rsp,28
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       pop       r15
       ret
M00_L04:
       call      CORINFO_HELP_OVERFLOW
       int       3
M00_L05:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 295

.NET Core 3.1.8 (CoreCLR 4.700.20.41105, CoreFX 4.700.20.41903), X64 RyuJIT

; Dotnetos.AsyncExpert.Homework.Module01.Benchmark.FibonacciCalc.Iterative(UInt64)
       xor       eax,eax
       mov       ecx,1
       mov       r8d,1
       mov       r9d,2
       cmp       rdx,2
       jbe       short M00_L01
M00_L00:
       lea       rax,[r8+rcx]
       mov       rcx,r8
       mov       r8,rax
       inc       r9
       cmp       r9,rdx
       jb        short M00_L00
M00_L01:
       ret
; Total bytes of code 44
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.508 (2004/?/20H1)
Intel Core i7-8550U CPU 1.80GHz (Kaby Lake R), 1 CPU, 8 logical and 4 physical cores
.NET Core SDK=3.1.402
  [Host]     : .NET Core 3.1.8 (CoreCLR 4.700.20.41105, CoreFX 4.700.20.41903), X64 RyuJIT
  DefaultJob : .NET Core 3.1.8 (CoreCLR 4.700.20.41105, CoreFX 4.700.20.41903), X64 RyuJIT

Method n Mean Error StdDev Ratio Gen 0 Gen 1 Gen 2 Allocated Code Size
Recursive 15 2,625.267 ns 50.8593 ns 47.5738 ns 1.000 - - - - 76 B
RecursiveWithMemoization 15 1.588 ns 0.0628 ns 0.0645 ns 0.001 - - - - 295 B
Iterative 15 6.817 ns 0.0208 ns 0.0173 ns 0.003 - - - - 44 B
Recursive 35 36,020,335.714 ns 542,439.2662 ns 480,858.2806 ns 1.000 - - - - 76 B
RecursiveWithMemoization 35 1.490 ns 0.0602 ns 0.0619 ns 0.000 - - - - 295 B
Iterative 35 17.397 ns 0.1176 ns 0.0982 ns 0.000 - - - - 44 B
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment