[RFC-ANN] SystemBenchmark.jl

MacBook Pro (15-inch, 2017)
Processor: 2.9 GHz Intel Core i7
Memory: 16 GB 2133 MHz LPDDR3
Graphic: Radeon Pro 560 4 GB, Intel HD Graphics 630 1536 MB

I’m not sure exactly what or where tempdir is though, so I can’t answer your question.

Edit: I went to check. I would assume its on the SSD because I don’t have external disks connected.

If you do mktemp() in julia, what kind of disk does the given path sit on? Given the age of your machine, I’m pretty certain it’s an SSD

Gives me this:
"/var/folders/pg/p0b31k255vbd7w4z_2msf5rr0000gn/T/jl_fTlvkC"

I added 1MB disk read/write tests (the previous ones were 1KB files).

Also, I’ve collated results so far and I’m observing three things:

  1. MacOS disk io seems much slower. I was originally writing using mktemp() and there was a thought that MacOS might be limiting temp file access. But changing this to a given non-temp file location didn’t change results (This could be a reason behind slower package load times on mac…)

  2. aarch64 compilecache time seems disproportionately slow, compared to CPU mean score and disk io (this confirms what I’ve been seeing - compile time on aarch64 is really slow)

  3. Somehow the cheap MSI GF63 linux laptop I’m using as a reference is really fast…!

(Click to expand)

Note: Given their recent addition, the 1MB diskio tests haven’t been run on most of the examples, hence being missing

4 Likes

Base model MacBook Pro 16’’ (late 2019):

Reference system ----------------------
Julia Version 1.4.1
Commit 381693d3df* (2020-04-14 17:20 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-8.0.1 (ORCJIT, skylake)
  GPU: GeForce GTX 1650 with Max-Q Design

Test system ---------------------------
Julia Version 1.4.0
Commit b8e9a9ecc6 (2020-03-21 16:36 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin18.6.0)
  CPU: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-8.0.1 (ORCJIT, skylake)
Environment:
  JULIA_EDITOR = subl
  JULIA_NUM_THREADS = 6
  JULIA_PROJECT = /Users/crstnbr/.julia/environments/base
  JULIA_DQMC = /Users/crstnbr/sciebo/codes/julia-sdw-dqmc
  JULIA_PKG_SERVER = pkg.julialang.org


14×5 DataFrames.DataFrame
│ Row │ cat         │ testname        │ ref_ms      │ test_ms     │ factor   │
│     │ String      │ String          │ Float64     │ Float64     │ Float64  │
├─────┼─────────────┼─────────────────┼─────────────┼─────────────┼──────────┤
│ 1   │ cpu         │ FloatMul        │ 1.134e-6    │ 1.708e-6    │ 1.50617  │
│ 2   │ cpu         │ FloatSin        │ 4.048e-6    │ 5.52e-6     │ 1.36364  │
│ 3   │ cpu         │ VecMulBroad     │ 2.94935e-5  │ 4.63841e-5  │ 1.57269  │
│ 4   │ cpu         │ CPUMatMul       │ 0.018796    │ 0.0376855   │ 2.00497  │
│ 5   │ cpu         │ MatMulBroad     │ 0.0042468   │ 0.0168836   │ 3.97561  │
│ 6   │ cpu         │ 3DMulBroad      │ 0.0010416   │ 0.0016247   │ 1.55981  │
│ 7   │ cpu         │ FFMPEGH264Write │ 105.579     │ 226.089     │ 2.14143  │
│ 8   │ mem         │ DeepCopy        │ 0.000177585 │ 0.000204076 │ 1.14918  │
│ 9   │ diskio      │ DiskWrite1KB    │ 0.031872    │ 0.115393    │ 3.62051  │
│ 10  │ diskio      │ DiskWrite1MB    │ 0.650659    │ 0.285534    │ 0.438838 │
│ 11  │ diskio      │ DiskRead1KB     │ 0.00681275  │ 0.069403    │ 10.1872  │
│ 12  │ diskio      │ DiskRead1MB     │ 0.144945    │ 0.929291    │ 6.41134  │
│ 13  │ loading     │ JuliaLoad       │ 91.1325     │ 257.615     │ 2.82681  │
│ 14  │ compilation │ compilecache    │ 110.3       │ 109.566     │ 0.993344 │

(Almost identical results with Julia 1.4.1.)

1 Like

My results on a Clevo N141WU:

Reference system ----------------------
Julia Version 1.4.1
Commit 381693d3df* (2020-04-14 17:20 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-8.0.1 (ORCJIT, skylake)
  GPU: GeForce GTX 1650 with Max-Q Design

Test system ---------------------------
Julia Version 1.4.0
Commit b8e9a9ecc6 (2020-03-21 16:36 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-8.0.1 (ORCJIT, skylake)
Environment:
  JULIA_DEPOT_PATH = C:\Julia-1.4.0\.julia\;C:\Julia-1.4.0\local\share\julia\;C:\Julia-1.4.0\share\julia\;
  GPU: GeForce GTX TITAN X

15×5 DataFrames.DataFrame
│ Row │ cat         │ testname        │ ref_ms      │ test_ms     │ factor   │
│     │ String      │ String          │ Float64     │ Float64     │ Float64  │
├─────┼─────────────┼─────────────────┼─────────────┼─────────────┼──────────┤
│ 1   │ cpu         │ FloatMul        │ 1.134e-6    │ 1.3e-6      │ 1.14638  │
│ 2   │ cpu         │ FloatSin        │ 4.048e-6    │ 5.0e-6      │ 1.23518  │
│ 3   │ cpu         │ VecMulBroad     │ 2.94935e-5  │ 3.57503e-5  │ 1.21214  │
│ 4   │ cpu         │ CPUMatMul       │ 0.018796    │ 0.044401    │ 2.36226  │
│ 5   │ cpu         │ MatMulBroad     │ 0.0042468   │ 0.00465006  │ 1.09496  │
│ 6   │ cpu         │ 3DMulBroad      │ 0.0010416   │ 0.00106     │ 1.01767  │
│ 7   │ cpu         │ FFMPEGH264Write │ 105.579     │ 143.97      │ 1.36362  │
│ 8   │ gpu         │ GPUMatMul       │ 0.00531075  │ 0.00281122  │ 0.529346 │
│ 9   │ mem         │ DeepCopy        │ 0.000177585 │ 0.000168098 │ 0.946581 │
│ 10  │ diskio      │ DiskWrite1KB    │ 0.031872    │ 2.7072      │ 84.9398  │
│ 11  │ diskio      │ DiskWrite1MB    │ 0.650659    │ 3.5274      │ 5.42127  │
│ 12  │ diskio      │ DiskRead1KB     │ 0.00681275  │ 0.077399    │ 11.3609  │
│ 13  │ diskio      │ DiskRead1MB     │ 0.144945    │ 0.2365      │ 1.63165  │
│ 14  │ loading     │ JuliaLoad       │ 91.1325     │ 176.793     │ 1.93995  │
│ 15  │ compilation │ compilecache    │ 110.3       │ 140.64      │ 1.27507  │

Disk write is very slow, although I have an nvme SSD. Oh well…
Edit: Windows NTFS cluster size is 4KB. Could that be the cause?

I’m wondering if there’s a way we can make a little dashboard for this? So people can submit their timings and we could all kind of grok whats going on? :slight_smile:

6 Likes

On my rasberry pi 4B and 64 bit Manjaro:

Julia Version 1.4.1
Commit 381693d3df* (2020-04-14 17:20 UTC)
Platform Info:
  OS: Linux (aarch64-unknown-linux-gnu)
  CPU: unknown
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-8.0.1 (ORCJIT, cortex-a72)

14×3 DataFrames.DataFrame
│ Row │ cat         │ testname        │ ms          │
│     │ String      │ String          │ Float64     │
├─────┼─────────────┼─────────────────┼─────────────┤
│ 1   │ cpu         │ FloatMul        │ 4.111e-6    │
│ 2   │ cpu         │ FloatSin        │ 2.44679e-5  │
│ 3   │ cpu         │ VecMulBroad     │ 0.000154232 │
│ 4   │ cpu         │ CPUMatMul       │ 0.113628    │
│ 5   │ cpu         │ MatMulBroad     │ 0.013573    │
│ 6   │ cpu         │ 3DMulBroad      │ 0.00521414  │
│ 7   │ cpu         │ FFMPEGH264Write │ 503.2       │
│ 8   │ mem         │ DeepCopy        │ 0.00120526  │
│ 9   │ diskio      │ DiskWrite1KB    │ 1.07176     │
│ 10  │ diskio      │ DiskWrite1MB    │ 62.6865     │
│ 11  │ diskio      │ DiskRead1KB     │ 0.0693505   │
│ 12  │ diskio      │ DiskRead1MB     │ 1.52091     │
│ 13  │ loading     │ JuliaLoad       │ 476.402     │
│ 14  │ compilation │ compilecache    │ 576.92      │

1 Like

On a MacBook Pro (Retina, 15-inch, Mid 2015), with macOS 10.14.3 (18D42):

Test system ---------------------------
Julia Version 1.4.1
Commit 381693d3df* (2020-04-14 17:20 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin18.7.0)
  CPU: Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-8.0.1 (ORCJIT, haswell)


14×5 DataFrames.DataFrame
│ Row │ cat         │ testname        │ ref_ms      │ test_ms     │ factor   │
│     │ String      │ String          │ Float64     │ Float64     │ Float64  │
├─────┼─────────────┼─────────────────┼─────────────┼─────────────┼──────────┤
│ 1   │ cpu         │ FloatMul        │ 1.134e-6    │ 1.388e-6    │ 1.22399  │
│ 2   │ cpu         │ FloatSin        │ 4.048e-6    │ 5.184e-6    │ 1.28063  │
│ 3   │ cpu         │ VecMulBroad     │ 2.94935e-5  │ 4.78725e-5  │ 1.62316  │
│ 4   │ cpu         │ CPUMatMul       │ 0.018796    │ 0.023664    │ 1.25899  │
│ 5   │ cpu         │ MatMulBroad     │ 0.0042468   │ 0.00516138  │ 1.21536  │
│ 6   │ cpu         │ 3DMulBroad      │ 0.0010416   │ 0.0015743   │ 1.51142  │
│ 7   │ cpu         │ FFMPEGH264Write │ 105.579     │ 237.487     │ 2.24939  │
│ 8   │ mem         │ DeepCopy        │ 0.000177585 │ 0.000177112 │ 0.997339 │
│ 9   │ diskio      │ DiskWrite1KB    │ 0.031872    │ 0.109122    │ 3.42377  │
│ 10  │ diskio      │ DiskWrite1MB    │ 0.650659    │ 0.439287    │ 0.675142 │
│ 11  │ diskio      │ DiskRead1KB     │ 0.00681275  │ 0.033156    │ 4.86676  │
│ 12  │ diskio      │ DiskRead1MB     │ 0.144945    │ 1.04676     │ 7.22174  │
│ 13  │ loading     │ JuliaLoad       │ 91.1325     │ 180.223     │ 1.97759  │
│ 14  │ compilation │ compilecache    │ 110.3       │ 155.903     │ 1.41345  │

with ArchLinux installed on the same machine:

Test system ---------------------------
Julia Version 1.4.1
Commit 381693d3df* (2020-04-14 17:20 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-8.0.1 (ORCJIT, haswell)
Environment:
  JULIA_PKG_SERVER = https://geo.pkg.julialang.org


14×5 DataFrames.DataFrame
│ Row │ cat         │ testname        │ ref_ms      │ test_ms     │ factor   │
│     │ String      │ String          │ Float64     │ Float64     │ Float64  │
├─────┼─────────────┼─────────────────┼─────────────┼─────────────┼──────────┤
│ 1   │ cpu         │ FloatMul        │ 1.134e-6    │ 1.374e-6    │ 1.21164  │
│ 2   │ cpu         │ FloatSin        │ 4.048e-6    │ 5.18e-6     │ 1.27964  │
│ 3   │ cpu         │ VecMulBroad     │ 2.94935e-5  │ 3.6006e-5   │ 1.22081  │
│ 4   │ cpu         │ CPUMatMul       │ 0.018796    │ 0.022104    │ 1.17599  │
│ 5   │ cpu         │ MatMulBroad     │ 0.0042468   │ 0.00339912  │ 0.800397 │
│ 6   │ cpu         │ 3DMulBroad      │ 0.0010416   │ 0.0013563   │ 1.30213  │
│ 7   │ cpu         │ FFMPEGH264Write │ 105.579     │ 147.775     │ 1.39967  │
│ 8   │ mem         │ DeepCopy        │ 0.000177585 │ 0.000167712 │ 0.944406 │
│ 9   │ diskio      │ DiskWrite1KB    │ 0.031872    │ 0.0286745   │ 0.899677 │
│ 10  │ diskio      │ DiskWrite1MB    │ 0.650659    │ 0.775807    │ 1.19234  │
│ 11  │ diskio      │ DiskRead1KB     │ 0.00681275  │ 0.00890512  │ 1.30713  │
│ 12  │ diskio      │ DiskRead1MB     │ 0.144945    │ 0.113265    │ 0.781431 │
│ 13  │ loading     │ JuliaLoad       │ 91.1325     │ 116.015     │ 1.27304  │
│ 14  │ compilation │ compilecache    │ 110.3       │ 193.794     │ 1.75697  │
2 Likes

Awesome. So that rules out hardware as the source of the MacOS disk io slowness :+1:t2:

I want to try a non-julia disk io benchmark to see if it’s julia-specific

Here is my Dell XPS13 with Win10

Test system ---------------------------
Julia Version 1.4.1
Commit 381693d3df* (2020-04-14 17:20 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-8.0.1 (ORCJIT, skylake)


14×5 DataFrames.DataFrame
│ Row │ cat         │ testname        │ ref_ms      │ test_ms     │ factor   │
│     │ String      │ String          │ Float64     │ Float64     │ Float64  │
├─────┼─────────────┼─────────────────┼─────────────┼─────────────┼──────────┤
│ 1   │ cpu         │ FloatMul        │ 1.134e-6    │ 2.7e-6      │ 2.38095  │
│ 2   │ cpu         │ FloatSin        │ 4.048e-6    │ 1.02e-5     │ 2.51976  │
│ 3   │ cpu         │ VecMulBroad     │ 2.94935e-5  │ 5.40578e-5  │ 1.83287  │
│ 4   │ cpu         │ CPUMatMul       │ 0.018796    │ 0.0457      │ 2.43137  │
│ 5   │ cpu         │ MatMulBroad     │ 0.0042468   │ 0.00531429  │ 1.25136  │
│ 6   │ cpu         │ 3DMulBroad      │ 0.0010416   │ 0.00154     │ 1.47849  │
│ 7   │ cpu         │ FFMPEGH264Write │ 105.579     │ 398.7       │ 3.77633  │
│ 8   │ mem         │ DeepCopy        │ 0.000177585 │ 0.000242898 │ 1.36779  │
│ 9   │ diskio      │ DiskWrite1KB    │ 0.031872    │ 0.256999    │ 8.06347  │
│ 10  │ diskio      │ DiskWrite1MB    │ 0.650659    │ 0.62255     │ 0.956799 │
│ 11  │ diskio      │ DiskRead1KB     │ 0.00681275  │ 0.083599    │ 12.271   │
│ 12  │ diskio      │ DiskRead1MB     │ 0.144945    │ 0.2891      │ 1.99455  │
│ 13  │ loading     │ JuliaLoad       │ 91.1325     │ 293.288     │ 3.21826  │
│ 14  │ compilation │ compilecache    │ 110.3       │ 198.207     │ 1.79699  │

Your mid-2015 MacBook Pro seems to be consistently better than the 2019 16 inch model. This seems strange to me. Any idea what’s going on here?

(What do you get for peakflops()?)

Given that the 1MB tests aren’t too bad, maybe it’s not writing or reading speed, but file opening or closing

All my colleagues with newer MacBooks complain about their performance.

On ArchLinux (don’t ask me to reboot from macOS :weary:):

julia> using LinearAlgebra

julia> peakflops()
1.5939406029191907e11

On my 2018 MBP

julia> peakflops()
1.9714357685772952e11

Raspberry Pi 4 32 bit.

Julia Version 1.4.1
Commit 381693d3df* (2020-04-14 17:20 UTC)
Platform Info:
  OS: Linux (arm-linux-gnueabihf)
  CPU: ARMv7 Processor rev 3 (v7l)
  WORD_SIZE: 32
  LIBM: libopenlibm
  LLVM: libLLVM-8.0.1 (ORCJIT, cortex-a72)


14×5 DataFrames.DataFrame
│ Row │ cat         │ testname        │ ref_ms      │ test_ms     │ factor  │
│     │ String      │ String          │ Float64     │ Float64     │ Float64 │
├─────┼─────────────┼─────────────────┼─────────────┼─────────────┼─────────┤
│ 1   │ cpu         │ FloatMul        │ 1.134e-6    │ 5.852e-6    │ 5.16049 │
│ 2   │ cpu         │ FloatSin        │ 4.048e-6    │ 1.38978e-5  │ 3.43325 │
│ 3   │ cpu         │ VecMulBroad     │ 2.94935e-5  │ 0.000508159 │ 17.2295 │
│ 4   │ cpu         │ CPUMatMul       │ 0.018796    │ 0.240069    │ 12.7724 │
│ 5   │ cpu         │ MatMulBroad     │ 0.0042468   │ 0.027277    │ 6.42295 │
│ 6   │ cpu         │ 3DMulBroad      │ 0.0010416   │ 0.0087375   │ 8.38854 │
│ 7   │ cpu         │ FFMPEGH264Write │ 105.579     │ 570.853     │ 5.4069  │
│ 8   │ mem         │ DeepCopy        │ 0.000177585 │ 0.00363217  │ 20.4532 │
│ 9   │ diskio      │ DiskWrite1KB    │ 0.031872    │ 1.11163     │ 34.8778 │
│ 10  │ diskio      │ DiskWrite1MB    │ 0.650659    │ 95.9523     │ 147.469 │
│ 11  │ diskio      │ DiskRead1KB     │ 0.00681275  │ 0.10172     │ 14.9308 │
│ 12  │ diskio      │ DiskRead1MB     │ 0.144945    │ 3.46227     │ 23.8868 │
│ 13  │ loading     │ JuliaLoad       │ 91.1325     │ 489.25      │ 5.36856 │
│ 14  │ compilation │ compilecache    │ 110.3       │ 663.02      │ 6.01108 │

3 Likes

MacBook Pro 15’’ Late 2013

Julia Version 1.4.1
Commit 381693d3df* (2020-04-14 17:20 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-8.0.1 (ORCJIT, skylake)
  GPU: GeForce GTX 1650 with Max-Q Design

Test system ---------------------------
Julia Version 1.4.1
Commit 381693d3df* (2020-04-14 17:20 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin19.4.0)
  CPU: Intel(R) Core(TM) i7-4750HQ CPU @ 2.00GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-8.0.1 (ORCJIT, haswell)
Environment:
  JULIA_NUM_THREADS = 4

│ Row │ cat         │ testname        │ ref_ms      │ test_ms     │ factor  │
│     │ String      │ String          │ Float64     │ Float64     │ Float64 │
├─────┼─────────────┼─────────────────┼─────────────┼─────────────┼─────────┤
│ 1   │ cpu         │ FloatMul        │ 1.134e-6    │ 1.602e-6    │ 1.4127  │
│ 2   │ cpu         │ FloatSin        │ 4.048e-6    │ 5.999e-6    │ 1.48197 │
│ 3   │ cpu         │ VecMulBroad     │ 2.94935e-5  │ 6.61685e-5  │ 2.2435  │
│ 4   │ cpu         │ CPUMatMul       │ 0.018796    │ 0.042418    │ 2.25676 │
│ 5   │ cpu         │ MatMulBroad     │ 0.0042468   │ 0.0227712   │ 5.36196 │
│ 6   │ cpu         │ 3DMulBroad      │ 0.0010416   │ 0.00193075  │ 1.85364 │
│ 7   │ cpu         │ FFMPEGH264Write │ 105.579     │ 290.085     │ 2.74757 │
│ 8   │ mem         │ DeepCopy        │ 0.000177585 │ 0.000206825 │ 1.16466 │
│ 9   │ diskio      │ DiskWrite1KB    │ 0.031872    │ 0.118455    │ 3.71657 │
│ 10  │ diskio      │ DiskWrite1MB    │ 0.650659    │ 0.96338     │ 1.48062 │
│ 11  │ diskio      │ DiskRead1KB     │ 0.00681275  │ 0.035056    │ 5.14565 │
│ 12  │ diskio      │ DiskRead1MB     │ 0.144945    │ 0.686661    │ 4.73739 │
│ 13  │ loading     │ JuliaLoad       │ 91.1325     │ 313.414     │ 3.4391  │
│ 14  │ compilation │ compilecache    │ 110.3       │ 169.516     │ 1.53687 │
julia> peakflops()
1.3752326496114954e11

Cheers.

2 Likes

On the 16 inch I get

julia> peakflops()
2.201335462171481e11

So about 40% more. Completely inconsistent with the FloatMul benchmark above, or am I missing something?

I assume that’s because of bad thermal throttling? The 16 inch improved on this dramatically.

Is anyone using an iMac, just to compare the difference between a Macbook and an iMac? I’d be interested to see the difference I always feel that an iMac has better performance than a Macbook.

I mean, I have an iMac but it’s stuck in my office which I currently have no access to so I can’t test it (damn Covid19).

1 Like

NB. compilecache time was erroneously subtracting the JuliaLoad result. So old results (0.1.0) for compilecache should be adjusted to JuliaLoad + compilecache. It’s fixed in master (0.1.1)

I’m going to register this and do a few big changes as a 0.2.0. This testing has helped identify a few areas for improvement

1 Like