OCaml VS C# benchmarks

Current benchmark data was generated on Thu Jul 13 2023, full log can be found HERE

CONTRIBUTIONS are WELCOME!

[x86_64][2 cores] Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz (Model 106)

* -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 1238ms 15ms 384.0MB 1173ms 167ms dotnet/aot 7.0.306
csharp 1.cs 1474ms 24ms 397.6MB 1343ms 190ms dotnet 7.0.306
csharp 1.cs 2201ms 41ms 104.3MB 2517ms 157ms mono 6.12.0
ocaml 1.ml 4948ms 10ms 153.4MB 4887ms 43ms ocaml 5.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 126ms 4.3ms 72.0MB 100ms 23ms dotnet/aot 7.0.306
csharp 1.cs 153ms 0.8ms 44.0MB 137ms 3ms mono 6.12.0
csharp 1.cs 237ms 4.4ms 95.5MB 180ms 33ms dotnet 7.0.306
ocaml 1.ml 341ms 3.5ms 22.9MB 323ms 3ms ocaml 5.0.0

fannkuch-redux

Input: 11

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 3984ms 14ms 2.8MB 3973ms 0ms ocaml 5.0.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 2.ml 331ms 1.3ms 2.9MB 320ms 0ms ocaml 5.0.0

fasta

Input: 2500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5-m.cs 366ms 49ms 57.8MB 560ms 127ms dotnet/aot 7.0.306
ocaml 6.ml 425ms 0.3ms 22.7MB 407ms 3ms ocaml 5.0.0
csharp 5-m.cs 482ms 25ms 68.6MB 743ms 127ms dotnet 7.0.306
csharp 5-m.cs 482ms 6.9ms 38.3MB 823ms 80ms mono 6.12.0

Input: 250000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 6.ml 47ms 2.4ms 4.9MB 37ms 0ms ocaml 5.0.0
csharp 5-m.cs 60ms 1.7ms 28.3MB 77ms 17ms dotnet/aot 7.0.306
csharp 5-m.cs 97ms 6.4ms 38.3MB 113ms 37ms mono 6.12.0
csharp 5.cs 108ms 2.9ms 39.9MB 93ms 20ms dotnet 7.0.306

helloworld

Input: QwQ

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 2.7ms 0.6ms 3.1MB 0ms 0ms ocaml 5.0.0
csharp 1.cs 6.8ms 0.8ms 12.1MB 0ms 0ms dotnet/aot 7.0.306
csharp 1.cs 19ms 0.6ms 25.6MB 10ms 0ms mono 6.12.0
csharp 1.cs 59ms 1.9ms 28.8MB 26ms 2ms dotnet 7.0.306

lru

Input: 1000 1000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 136ms 0.9ms 10.3MB 130ms 0ms dotnet/aot 7.0.306
csharp 2.cs 185ms 0.6ms 22.1MB 167ms 3ms mono 6.12.0
csharp 2.cs 200ms 5.5ms 29.6MB 163ms 10ms dotnet 7.0.306
ocaml 1.ml 264ms 2.8ms 6.7MB 250ms 0ms ocaml 5.0.0
csharp 1.cs 1284ms 2.6ms 73.3MB 1247ms 33ms dotnet/aot 7.0.306
csharp 1.cs 1624ms 6.4ms 90.7MB 1563ms 40ms dotnet 7.0.306
csharp 1.cs 3045ms 55ms 49.5MB 3013ms 23ms mono 6.12.0

Input: 1000 3000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 394ms 2.2ms 10.2MB 383ms 0ms dotnet/aot 7.0.306
csharp 2.cs 414ms 2.1ms 29.4MB 383ms 7ms dotnet 7.0.306
csharp 2.cs 504ms 3.4ms 23.4MB 487ms 0ms mono 6.12.0
ocaml 1.ml 781ms 8.1ms 6.7MB 767ms 0ms ocaml 5.0.0
csharp 1.cs 3944ms 317ms 71.6MB 3903ms 40ms dotnet/aot 7.0.306
csharp 1.cs 4542ms 37ms 89.6MB 4480ms 37ms dotnet 7.0.306
csharp 1.cs timeout 0.0ms 45.7MB 4957ms 37ms mono 6.12.0

Input: 100 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 73ms 3.2ms 10.1MB 73ms 0ms dotnet/aot 7.0.306
csharp 2.cs 105ms 1.2ms 25.2MB 90ms 3ms mono 6.12.0
ocaml 1.ml 118ms 1.6ms 6.0MB 110ms 0ms ocaml 5.0.0
csharp 2.cs 129ms 9.9ms 29.4MB 100ms 3ms dotnet 7.0.306
csharp 1.cs 2812ms 8.4ms 64.7MB 2783ms 17ms dotnet/aot 7.0.306
csharp 1.cs 3014ms 39ms 80.1MB 2957ms 33ms dotnet 7.0.306
csharp 1.cs 3185ms 2.8ms 31.4MB 3170ms 0ms mono 6.12.0

merkletrees

Input: 17

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 804ms 26ms 369.6MB 673ms 170ms dotnet/aot 7.0.306
csharp 1.cs 841ms 7.8ms 384.6MB 710ms 183ms dotnet/aot 7.0.306
csharp 2.cs 1026ms 11ms 413.9MB 847ms 167ms dotnet 7.0.306
csharp 1.cs 1047ms 13ms 441.4MB 860ms 210ms dotnet 7.0.306
ocaml 1.ml 1524ms 6.3ms 69.4MB 1483ms 23ms ocaml 5.0.0
csharp 1.cs 1681ms 23ms 145.1MB 2023ms 143ms mono 6.12.0
ocaml 2.ml 3227ms 33ms 74.1MB 3187ms 23ms ocaml 5.0.0

Input: 15

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 2.cs 158ms 3.1ms 77.3MB 133ms 20ms dotnet/aot 7.0.306
ocaml 1.ml 229ms 7.2ms 25.6MB 213ms 3ms ocaml 5.0.0
csharp 1.cs 229ms 11ms 197.7MB 147ms 77ms dotnet/aot 7.0.306
csharp 1.cs 309ms 7.0ms 72.1MB 280ms 37ms mono 6.12.0
csharp 1.cs 346ms 2.7ms 200.9MB 237ms 90ms dotnet 7.0.306
csharp 2.cs 369ms 0.4ms 101.9MB 313ms 37ms dotnet 7.0.306
ocaml 2.ml 576ms 3.7ms 30.2MB 557ms 3ms ocaml 5.0.0

nbody

Input: 5000000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 9.cs 407ms 0.4ms 29.8MB 380ms 0ms dotnet 7.0.306
ocaml 1.ml 470ms 0.5ms 2.9MB 460ms 0ms ocaml 5.0.0
csharp 8.cs 498ms 4.0ms 10.1MB 497ms 0ms dotnet/aot 7.0.306
csharp 8.cs 538ms 1.3ms 25.7MB 503ms 0ms dotnet 7.0.306
csharp 8.cs 1108ms 0.6ms 24.9MB 1093ms 0ms mono 6.12.0

Input: 500000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
ocaml 1.ml 50ms 0.6ms 2.9MB 40ms 0ms ocaml 5.0.0
csharp 8.cs 57ms 2.2ms 10.1MB 53ms 0ms dotnet/aot 7.0.306
csharp 9.cs 101ms 3.9ms 29.3MB 70ms 3ms dotnet 7.0.306
csharp 8.cs 120ms 8.5ms 29.8MB 77ms 3ms dotnet 7.0.306
csharp 8.cs 133ms 3.3ms 24.9MB 120ms 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 620ms 16ms 69.7MB 600ms 13ms dotnet/aot 7.0.306
csharp 1.cs 762ms 8.7ms 86.6MB 740ms 10ms mono 6.12.0
csharp 2.cs 767ms 3.1ms 21.7MB 757ms 0ms dotnet/aot 7.0.306
csharp 2.cs 942ms 5.1ms 38.8MB 900ms 7ms dotnet 7.0.306
csharp 1.cs 1381ms 38ms 86.3MB 1333ms 23ms dotnet 7.0.306
ocaml 1.ml 1999ms 32ms 550.5MB 1893ms 87ms ocaml 5.0.0
ocaml 2.ml 2424ms 16ms 19.0MB 2410ms 0ms ocaml 5.0.0
csharp 2.cs 2479ms 43ms 34.3MB 2460ms 3ms mono 6.12.0

Input: 10

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 1.cs 146ms 4.5ms 29.8MB 140ms 0ms dotnet/aot 7.0.306
csharp 1.cs 185ms 0.9ms 40.7MB 163ms 7ms mono 6.12.0
csharp 2.cs 190ms 2.0ms 15.3MB 187ms 0ms dotnet/aot 7.0.306
csharp 2.cs 272ms 2.7ms 28.1MB 233ms 7ms dotnet 7.0.306
csharp 1.cs 336ms 2.1ms 44.3MB 293ms 13ms dotnet 7.0.306
ocaml 1.ml 339ms 11ms 140.3MB 307ms 17ms ocaml 5.0.0
csharp 2.cs 605ms 1.1ms 25.5MB 583ms 7ms mono 6.12.0
ocaml 2.ml 609ms 28ms 9.1MB 590ms 0ms ocaml 5.0.0

regex-redux

Input: 2500000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 5.cs 3416ms 65ms 527.1MB 3323ms 220ms dotnet 7.0.306
csharp 6.cs 3599ms 14ms 460.5MB 3483ms 167ms dotnet/aot 7.0.306
csharp 6.cs 3887ms 42ms 517.4MB 3740ms 203ms dotnet 7.0.306
csharp 5.cs timeout 0.0ms 182.6MB 4977ms 67ms dotnet/aot 7.0.306
ocaml 2.ml timeout 0.0ms 181.9MB 4927ms 47ms ocaml 5.0.0

Input: 250000_in

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 6.cs 376ms 0.7ms 72.6MB 353ms 23ms dotnet/aot 7.0.306
csharp 5.cs 473ms 8.1ms 90.9MB 417ms 37ms dotnet 7.0.306
csharp 6.cs 563ms 2.8ms 89.0MB 510ms 30ms dotnet 7.0.306
csharp 5.cs 688ms 3.6ms 69.6MB 667ms 17ms dotnet/aot 7.0.306
ocaml 2.ml 705ms 2.8ms 52.5MB 683ms 10ms ocaml 5.0.0

spectral-norm

Input: 8000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 2524ms 7.5ms 13.7MB 4930ms 0ms dotnet/aot 7.0.306
csharp 3-m.cs 4435ms 37ms 34.9MB 8597ms 10ms dotnet 7.0.306
csharp 3.cs timeout 0.0ms 26.5MB 9777ms 7ms mono 6.12.0
ocaml 2.ml timeout 0.0ms 4.1MB 4987ms 0ms ocaml 5.0.0

Input: 4000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 651ms 2.8ms 8.3MB 1233ms 10ms dotnet/aot 7.0.306
csharp 3-m.cs 1230ms 6.9ms 31.6MB 2307ms 3ms dotnet 7.0.306
ocaml 2.ml 1639ms 5.6ms 3.7MB 1623ms 0ms ocaml 5.0.0
csharp 3-m.cs 3185ms 152ms 27.8MB 6040ms 0ms mono 6.12.0

Input: 2000

lang code time stddev peak-mem mem time(user) time(sys) compiler compiler/runtime
csharp 3-m.cs 179ms 2.9ms 12.2MB 310ms 7ms dotnet/aot 7.0.306
ocaml 2.ml 412ms 0.4ms 3.3MB 400ms 0ms ocaml 5.0.0
csharp 3.cs 433ms 78ms 29.7MB 567ms 13ms dotnet 7.0.306
csharp 3-m.cs 802ms 3.6ms 29.7MB 1520ms 7ms mono 6.12.0