Performance Comparison Report

Table of Contents

Platform Details

This table shows the hardware and software details for each platform in the benchmarks. Note that the Intel parts list their base clock rate but they turbo boost too much higher rates when thermally possible.

Platform HW CPU macOS
M4-Max MacBookPro-16 Apple M4 Max 15.5
M1-Max MacBookPro-16 Apple M1 Max 15.5
i9 Late 2019
MacBookPro-16
Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz 15.5
i7 Late 2013
MacBookPro-15
Intel(R) Core(TM) i7-4960HQ CPU @ 2.60GHz 11.7.10

Benchmark Details

Each test was run on the computer when it was at idle stable temperature such that it could instantly burst to full clock rate. The benchmark was run over a fixed set of test files that were repeated in a number of directories in order to get the total to be reasonably useful. This is a synthetic test set rather than a personal music library, which would be both much larger (taking significantly longer to run) and would change over time as new content is added or existing content is re-encoded.

Number of MP3 Files Total Size of MP3 files (bytes)
3,116 21,412,291,984

Wall Clock Time (Real Time)

This metric represents the actual elapsed time from start to finish. It includes all computation, I/O operations, and scheduling delays. Lower values indicate faster overall completion.

Platform Version Wall Clock Time (seconds)[shorter is better]
M4-Max rust 33.17
|
M4-Max c 42.14
|
M4-Max rust-x86 45.52
|
M4-Max swift-x86 51.20
|
M4-Max swift 56.56
|
M4-Max c-x86 56.78
|
M1-Max rust 71.84
|
M1-Max rust-x86 91.94
|
M1-Max c 94.62
|
M1-Max swift-x86 102.02
|
i9 swift-x86 104.59
|
i9 rust-x86 116.92
|
M1-Max c-x86 125.28
|
M1-Max swift 134.03
|
i9 c-x86 169.18
|
i7 rust-x86 233.82
|
i7 swift-x86 234.26
|
i7 c-x86 380.84
|

User CPU Time

This metric represents the total CPU time spent in user-mode code summed across all cores. It will exceed wall clock time on multi-core systems. Lower values indicate less total CPU usage.

Platform Version User CPU Time (seconds)[shorter is better]
M4-Max rust 506.54
|
M4-Max c 656.71
|
M1-Max rust 699.45
|
M4-Max rust-x86 704.26
|
M4-Max swift-x86 762.12
|
M1-Max rust-x86 866.67
|
M4-Max c-x86 876.39
|
M4-Max swift 880.25
|
M1-Max c 921.21
|
M1-Max swift-x86 965.71
|
M1-Max c-x86 1210.13
|
M1-Max swift 1291.98
|
i9 swift-x86 1600.08
|
i7 swift-x86 1809.88
|
i9 rust-x86 1814.10
|
i7 rust-x86 1831.12
|
i9 c-x86 2639.31
|
i7 c-x86 2991.32
|

Maximum Resident Set Size

This metric shows the maximum amount of physical memory used by the process. Lower values indicate more memory-efficient code.

Platform Version Maximum Resident Set Size (MB)[shorter is better]
i7 rust-x86 7.08
|
M1-Max rust 21.33
|
M1-Max rust-x86 22.23
|
i9 rust-x86 31.35
|
M4-Max rust-x86 33.66
|
M4-Max rust 34.28
|
i7 c-x86 120.46
|
M1-Max c-x86 437.74
|
M1-Max c 442.89
|
M4-Max c-x86 703.58
|
M4-Max c 736.98
|
i9 c-x86 744.14
|
M1-Max swift 1560.16
|
i9 swift-x86 2425.97
|
M4-Max swift-x86 3050.23
|
i7 swift-x86 3103.19
|
M1-Max swift-x86 3165.58
|
M4-Max swift 3202.09
|

Instructions Retired

This metric counts the total number of CPU instructions executed to complete the task. Lower values can indicate less computational work.

Platform Version Instructions Retired (billions)[shorter is better]
M1-Max rust 7546.22
|
M4-Max rust 7548.15
|
i7 swift-x86 7585.56
|
i9 swift-x86 7715.32
|
i9 rust-x86 7978.48
|
i7 rust-x86 7983.54
|
M1-Max c 11450.33
|
M4-Max c 11453.92
|
M4-Max rust-x86 11941.89
|
M1-Max rust-x86 11951.00
|
i7 c-x86 12543.85
|
i9 c-x86 12552.53
|
M4-Max swift 12693.00
|
M1-Max swift 12699.92
|
M4-Max swift-x86 12738.43
|
M1-Max swift-x86 12745.50
|
M4-Max c-x86 20017.47
|
M1-Max c-x86 20020.31
|

CPU Cycles

This metric counts the total number of CPU cycles used to complete the task. Lower values indicate less computational work or better CPU efficiency.

Platform Version CPU Cycles (billions)[shorter is better]
M4-Max rust 1827.85
|
M1-Max rust 2014.34
|
M4-Max c 2316.65
|
M4-Max rust-x86 2488.38
|
M1-Max rust-x86 2510.44
|
M1-Max c 2646.46
|
M4-Max swift-x86 2689.17
|
M1-Max swift-x86 2787.87
|
M4-Max c-x86 3032.01
|
M4-Max swift 3143.68
|
M1-Max c-x86 3487.63
|
M1-Max swift 3726.11
|
i7 swift-x86 5147.90
|
i9 swift-x86 5171.81
|
i7 rust-x86 5679.25
|
i9 rust-x86 5882.56
|
i9 c-x86 8719.05
|
i7 c-x86 9201.45
|

Parallelism Factor

This metric is calculated as User Time / Real Time. It reflects how well the program utilizes multiple CPU cores. Higher values indicate better utilization and typically correlate with the number of CPU cores available. The M1/M4 have efficiency and performance cores, which may affect this value.

Platform Version Parallelism Factor (ratio)[higher is better]
i9 c-x86 15.60
|
M4-Max c 15.58
|
M4-Max swift 15.56
|
i9 rust-x86 15.52
|
M4-Max rust-x86 15.47
|
M4-Max c-x86 15.43
|
i9 swift-x86 15.30
|
M4-Max rust 15.27
|
M4-Max swift-x86 14.89
|
M1-Max rust 9.74
|
M1-Max c 9.74
|
M1-Max c-x86 9.66
|
M1-Max swift 9.64
|
M1-Max swift-x86 9.47
|
M1-Max rust-x86 9.43
|
i7 c-x86 7.85
|
i7 rust-x86 7.83
|
i7 swift-x86 7.73
|

Effective Clock Rate

This metric is calculated as Cycles Elapsed / User Time. It shows the average CPU frequency during execution. Higher values indicate the CPU is running at higher clock speeds. Thermal throttling may reduce this value in longer-running programs.

Platform Version Effective Clock Rate (GHz)[higher is better]
M4-Max rust 3.61
|
M4-Max swift 3.57
|
M4-Max rust-x86 3.53
|
M4-Max swift-x86 3.53
|
M4-Max c 3.53
|
M4-Max c-x86 3.46
|
i9 c-x86 3.30
|
i9 rust-x86 3.24
|
i9 swift-x86 3.23
|
i7 rust-x86 3.10
|
i7 c-x86 3.08
|
M1-Max rust-x86 2.90
|
M1-Max swift-x86 2.89
|
M1-Max swift 2.88
|
M1-Max c-x86 2.88
|
M1-Max rust 2.88
|
M1-Max c 2.87
|
i7 swift-x86 2.84
|

Instructions Per Cycle (IPC)

This metric is calculated as Instructions Retired / Cycles Elapsed. Higher values indicate better CPU efficiency, with more instructions executed per cycle. Modern CPU architectures with better instruction-level parallelism achieve higher IPC values.

Platform Version Instructions Per Cycle (ratio)[higher is better]
M4-Max c-x86 6.60
|
M1-Max c-x86 5.74
|
M4-Max c 4.94
|
M4-Max rust-x86 4.80
|
M1-Max rust-x86 4.76
|
M4-Max swift-x86 4.74
|
M1-Max swift-x86 4.57
|
M1-Max c 4.33
|
M4-Max rust 4.13
|
M4-Max swift 4.04
|
M1-Max rust 3.75
|
M1-Max swift 3.41
|
i9 swift-x86 1.49
|
i7 swift-x86 1.47
|
i9 c-x86 1.44
|
i7 rust-x86 1.41
|
i7 c-x86 1.36
|
i9 rust-x86 1.36
|

Peak Memory Footprint

This metric shows the peak memory usage of the process. It is influenced by two main factors: (1) code efficiency in handling ‘live’ data and streaming processing, and (2) degree of parallelism. Higher parallelism typically requires more memory as multiple instances of the same code run concurrently. This explains why the M4-Max uses more memory than the M1-Max (due to higher parallelism) and why the i7 uses significantly less memory (due to fewer cores).

Platform Version Peak Memory Footprint (MB)[shorter is better]
i7 rust-x86 6.00
|
M1-Max rust-x86 20.49
|
M1-Max rust 20.50
|
i9 rust-x86 26.94
|
M4-Max rust 30.11
|
M4-Max rust-x86 32.71
|
i7 c-x86 77.16
|
M1-Max c 88.42
|
i9 c-x86 143.21
|
M4-Max c 160.03
|
M1-Max c-x86 437.63
|
M4-Max c-x86 704.61
|
M1-Max swift 1531.82
|
i9 swift-x86 2377.90
|
M4-Max swift-x86 3054.65
|
i7 swift-x86 3097.75
|
M4-Max swift 3164.89
|
M1-Max swift-x86 3169.61
|

Memory Efficiency (Memory per Parallelism Unit)

This metric shows peak memory footprint divided by parallelism factor, indicating how efficiently memory is used regardless of the degree of parallelism. Lower values suggest better memory efficiency per unit of parallelism. This helps compare memory usage more fairly across platforms with different core counts.

Platform Version Memory Efficiency (MB/unit)[shorter is better]
i7 rust-x86 0.77
|
i9 rust-x86 1.74
|
M4-Max rust 1.97
|
M1-Max rust 2.11
|
M4-Max rust-x86 2.11
|
M1-Max rust-x86 2.17
|
M1-Max c 9.08
|
i9 c-x86 9.18
|
i7 c-x86 9.82
|
M4-Max c 10.27
|
M1-Max c-x86 45.31
|
M4-Max c-x86 45.65
|
i9 swift-x86 155.43
|
M1-Max swift 158.91
|
M4-Max swift 203.36
|
M4-Max swift-x86 205.21
|
M1-Max swift-x86 334.85
|
i7 swift-x86 400.95
|

Output Size

This metric shows the total size of PNG files produced by the benchmark. Swift produces significantly larger output files due to its dependence on macOS media libraries, which don’t support generating indexed 4-color (2-bit) images. In contrast, the Rust and C implementations use custom PNG encoding that creates more compact indexed-color images.

Platform Version Output Size (KB)[shorter is better]
M4-Max c 12728.74
|
M4-Max c-x86 12728.74
|
M1-Max c 12728.74
|
M1-Max c-x86 12728.74
|
i9 c-x86 12728.74
|
i7 c-x86 12728.74
|
M4-Max rust 13221.70
|
M4-Max rust-x86 13221.70
|
M1-Max rust 13221.70
|
M1-Max rust-x86 13221.70
|
i9 rust-x86 13221.70
|
i7 rust-x86 13221.70
|
M4-Max swift 45318.93
|
M1-Max swift 45318.93
|
M4-Max swift-x86 45321.22
|
M1-Max swift-x86 45321.22
|
i9 swift-x86 45321.22
|
i7 swift-x86 45321.22
|

Executable Size

This shows the file size of the compiled program executable. The Swift executables should have been significantly smaller due to leveraging macOS system libraries for media and image processing but it is the C executables that are the most compact, utilizing only a few shared C, math, and threading libraries while natively implementing all of the media code. In contrast, the Rust executables were expected to be larger because they are fully statically linked and don’t offload functionality to shared libraries (other than kernel OS calls).

Platform Version Executable Size (KB)[shorter is better]
M4-Max c-x86 87.60
|
M1-Max c-x86 87.60
|
i9 c-x86 87.60
|
i7 c-x86 87.60
|
M4-Max c 100.43
|
M1-Max c 100.43
|
M4-Max swift 726.68
|
M1-Max swift 726.68
|
M4-Max swift-x86 752.45
|
M1-Max swift-x86 752.45
|
i9 swift-x86 752.45
|
i7 swift-x86 752.45
|
M4-Max rust 1444.90
|
M1-Max rust 1444.90
|
M4-Max rust-x86 1601.80
|
M1-Max rust-x86 1601.80
|
i9 rust-x86 1601.80
|
i7 rust-x86 1601.80
|