OCaml VS C# benchmarks

Current benchmark data was generated on Mon Apr 14 2025, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][4 cores] AMD EPYC 7763 64-Core Processor (Model 1)

* -m in a file name stands for multi-threading or multi-processing

* -i in a file name stands for direct intrinsics usage. (Usage of simd intrinsics via libraries is not counted)

* -ffi in a file name stands for non-stdlib FFI usage

* (You may find time < time(user) + time(sys) for some non-parallelized programs, the overhead is from GC or JIT compiler, which are allowed to take advantage of multi-cores as that's more close to real-world scenarios.)

binarytrees

Input: 18

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 959ms 8.6ms 205.9MB 957ms 147ms dotnet 9.0.203
csharp 1.cs 974ms 8.9ms 178.1MB 980ms 130ms dotnet/aot 9.0.203
csharp 1.cs 1663ms 23ms 105.5MB 1877ms 200ms mono 6.12.0
ocaml 1.ml 3140ms 30ms 157.0MB 3057ms 70ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 122ms 4.1ms 33.2MB 90ms 30ms dotnet/aot 9.0.203
csharp 1.cs 143ms 1.7ms 42.2MB 120ms 13ms mono 6.12.0
csharp 1.cs 195ms 2.0ms 49.9MB 157ms 40ms dotnet 9.0.203
ocaml 1.ml 226ms 2.6ms 19.2MB 210ms 0ms ocaml 5.3.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 2917ms 2.7ms 4.9MB 2907ms 0ms ocaml 5.3.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 249ms 3.0ms 4.9MB 240ms 0ms ocaml 5.3.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5-m.cs 131ms 0.3ms 26.3MB 350ms 103ms dotnet/aot 9.0.203
csharp 5-m.cs 189ms 3.4ms 39.1MB 467ms 123ms dotnet 9.0.203
csharp 5-m.cs 241ms 13ms 51.4MB 660ms 123ms mono 6.12.0
ocaml 6.ml 345ms 0.4ms 24.9MB 333ms 0ms ocaml 5.3.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5-m.cs 25ms 0.4ms 15.4MB 37ms 10ms dotnet/aot 9.0.203
ocaml 6.ml 39ms 0.6ms 7.5MB 30ms 0ms ocaml 5.3.0
csharp 5-m.cs 60ms 1.1ms 36.9MB 80ms 20ms dotnet 9.0.203
csharp 5-m.cs 70ms 2.0ms 30.9MB 103ms 20ms mono 6.12.0

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 1.9ms 0.0ms 5.1MB 0ms 0ms ocaml 5.3.0
csharp 1.cs 9.0ms 3.9ms 6.8MB 0ms 0ms dotnet/aot 9.0.203
csharp 1.cs 31ms 0.6ms 21.3MB 20ms 0ms mono 6.12.0
csharp 1.cs 35ms 1.3ms 26.1MB 20ms 2ms dotnet 9.0.203

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 94ms 1.9ms 9.8MB 80ms 0ms dotnet/aot 9.0.203
csharp 2.cs 147ms 3.1ms 22.7MB 133ms 0ms mono 6.12.0
ocaml 1.ml 188ms 1.5ms 6.4MB 180ms 0ms ocaml 5.3.0
csharp 2.cs 251ms 4.8ms 29.4MB 233ms 7ms dotnet 9.0.203
csharp 1.cs 1050ms 13ms 13.3MB 1033ms 3ms dotnet/aot 9.0.203
csharp 1.cs 1311ms 11ms 32.9MB 1293ms 20ms dotnet 9.0.203
csharp 1.cs 3329ms 33ms 43.6MB 3287ms 33ms mono 6.12.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 262ms 0.8ms 9.6MB 250ms 0ms dotnet/aot 9.0.203
csharp 2.cs 362ms 2.4ms 22.7MB 350ms 0ms mono 6.12.0
csharp 2.cs 402ms 3.7ms 29.5MB 387ms 7ms dotnet 9.0.203
ocaml 1.ml 542ms 24ms 6.6MB 530ms 0ms ocaml 5.3.0
csharp 1.cs 3120ms 25ms 13.6MB 3103ms 10ms dotnet/aot 9.0.203
csharp 1.cs 3611ms 58ms 32.8MB 3597ms 17ms dotnet 9.0.203
csharp 1.cs timeout 0.0ms 45.7MB 4947ms 47ms mono 6.12.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 52ms 1.4ms 9.6MB 40ms 0ms dotnet/aot 9.0.203
ocaml 1.ml 78ms 1.1ms 5.9MB 70ms 0ms ocaml 5.3.0
csharp 2.cs 96ms 2.2ms 23.0MB 83ms 0ms mono 6.12.0
csharp 2.cs 164ms 4.7ms 29.3MB 143ms 7ms dotnet 9.0.203
csharp 1.cs 1615ms 6.7ms 32.6MB 1600ms 13ms dotnet 9.0.203
csharp 1.cs 1819ms 4.9ms 28.8MB 1803ms 0ms mono 6.12.0
csharp 1.cs 1826ms 3.1ms 13.1MB 1810ms 0ms dotnet/aot 9.0.203

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 540ms 13ms 119.9MB 497ms 83ms dotnet/aot 9.0.203
csharp 1.cs 601ms 11ms 145.0MB 553ms 110ms dotnet/aot 9.0.203
csharp 2.cs 682ms 13ms 136.3MB 630ms 93ms dotnet 9.0.203
csharp 1.cs 702ms 20ms 168.5MB 643ms 127ms dotnet 9.0.203
ocaml 1.ml 1141ms 35ms 70.2MB 1100ms 30ms ocaml 5.3.0
csharp 1.cs 1284ms 31ms 144.0MB 1490ms 167ms mono 6.12.0
ocaml 2.ml 2156ms 13ms 91.8MB 2103ms 37ms ocaml 5.3.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 132ms 3.0ms 57.9MB 107ms 30ms dotnet/aot 9.0.203
csharp 1.cs 155ms 2.9ms 73.8MB 123ms 50ms dotnet/aot 9.0.203
ocaml 1.ml 161ms 4.4ms 21.6MB 143ms 7ms ocaml 5.3.0
csharp 2.cs 264ms 3.0ms 73.1MB 230ms 37ms dotnet 9.0.203
csharp 1.cs 267ms 2.8ms 69.3MB 240ms 33ms mono 6.12.0
csharp 1.cs 277ms 3.0ms 89.8MB 247ms 53ms dotnet 9.0.203
ocaml 2.ml 362ms 1.5ms 27.7MB 343ms 3ms ocaml 5.3.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 9.cs 360ms 2.9ms 27.6MB 340ms 7ms dotnet 9.0.203
csharp 8.cs 371ms 1.0ms 9.9MB 360ms 0ms dotnet/aot 9.0.203
ocaml 1.ml 374ms 1.4ms 5.3MB 363ms 0ms ocaml 5.3.0
csharp 8.cs 419ms 1.8ms 27.4MB 400ms 3ms dotnet 9.0.203
csharp 8.cs 1254ms 9.8ms 22.8MB 1240ms 0ms mono 6.12.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 41ms 1.6ms 5.2MB 30ms 0ms ocaml 5.3.0
csharp 8.cs 46ms 1.4ms 9.9MB 30ms 0ms dotnet/aot 9.0.203
csharp 9.cs 93ms 4.5ms 27.6MB 70ms 7ms dotnet 9.0.203
csharp 8.cs 99ms 8.1ms 27.6MB 80ms 3ms dotnet 9.0.203
csharp 8.cs 162ms 0.8ms 20.9MB 150ms 0ms mono 6.12.0

nsieve

Input: 12

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 316ms 7.0ms 78.7MB 300ms 3ms dotnet/aot 9.0.203
csharp 1.cs 340ms 5.0ms 96.2MB 313ms 13ms dotnet 9.0.203
csharp 2.cs 395ms 3.2ms 17.6MB 380ms 0ms dotnet/aot 9.0.203
csharp 2.cs 398ms 8.9ms 35.5MB 377ms 10ms dotnet 9.0.203
csharp 1.cs 556ms 7.3ms 83.9MB 533ms 10ms mono 6.12.0
ocaml 1.ml 1018ms 5.8ms 550.4MB 963ms 40ms ocaml 5.3.0
csharp 2.cs 1871ms 22ms 31.1MB 1857ms 0ms mono 6.12.0
ocaml 2.ml 1884ms 9.4ms 17.2MB 1867ms 0ms ocaml 5.3.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 64ms 0.5ms 24.9MB 50ms 0ms dotnet/aot 9.0.203
csharp 1.cs 96ms 1.4ms 42.5MB 73ms 10ms dotnet 9.0.203
csharp 2.cs 102ms 2.1ms 11.9MB 90ms 0ms dotnet/aot 9.0.203
csharp 2.cs 128ms 1.1ms 30.0MB 110ms 10ms dotnet 9.0.203
csharp 1.cs 146ms 2.8ms 38.1MB 133ms 0ms mono 6.12.0
ocaml 1.ml 203ms 4.9ms 140.7MB 183ms 10ms ocaml 5.3.0
ocaml 2.ml 463ms 1.3ms 9.1MB 450ms 0ms ocaml 5.3.0
csharp 2.cs 483ms 2.6ms 21.1MB 470ms 0ms mono 6.12.0

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 1749ms 12ms 417.4MB 1647ms 160ms dotnet/aot 9.0.203
csharp 5.cs 2068ms 11ms 444.0MB 2113ms 183ms dotnet 9.0.203
csharp 6.cs 2696ms 1.7ms 441.1MB 2650ms 167ms dotnet 9.0.203
csharp 5.cs 4282ms 5.1ms 416.9MB 4190ms 147ms dotnet/aot 9.0.203
ocaml 2.ml timeout 0.0ms 462.9MB 4810ms 173ms ocaml 5.3.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 190ms 1.2ms 46.4MB 163ms 20ms dotnet/aot 9.0.203
csharp 5.cs 283ms 0.3ms 72.7MB 253ms 30ms dotnet 9.0.203
csharp 6.cs 387ms 3.0ms 69.6MB 357ms 30ms dotnet 9.0.203
csharp 5.cs 441ms 3.2ms 48.6MB 417ms 20ms dotnet/aot 9.0.203
ocaml 2.ml 551ms 8.1ms 57.1MB 517ms 23ms ocaml 5.3.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 1860ms 1.8ms 10.4MB 7253ms 10ms dotnet/aot 9.0.203
csharp 3-m.cs 1926ms 4.5ms 29.9MB 7353ms 23ms dotnet 9.0.203
ocaml 2.ml 4555ms 3.1ms 6.3MB 4543ms 0ms ocaml 5.3.0
csharp 3-m.cs 4693ms 178ms 25.5MB 17890ms 10ms mono 6.12.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 494ms 33ms 10.5MB 1787ms 3ms dotnet/aot 9.0.203
csharp 3-m.cs 657ms 23ms 30.0MB 1690ms 10ms dotnet 9.0.203
ocaml 2.ml 1144ms 2.0ms 6.1MB 1137ms 0ms ocaml 5.3.0
csharp 3-m.cs 1197ms 19ms 27.2MB 4503ms 13ms mono 6.12.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 128ms 1.5ms 10.4MB 450ms 0ms dotnet/aot 9.0.203
csharp 3-m.cs 248ms 8.5ms 28.6MB 463ms 10ms dotnet 9.0.203
ocaml 2.ml 294ms 3.8ms 5.2MB 287ms 0ms ocaml 5.3.0
csharp 3-m.cs 352ms 13ms 24.8MB 1190ms 10ms mono 6.12.0