From 2752ef35c2f8b00484a4d9af2a7ee8053f4584c0 Mon Sep 17 00:00:00 2001 From: Julio Gomez Diaz <28807086+juliojgd@users.noreply.github.com> Date: Fri, 29 Nov 2024 22:40:38 +0100 Subject: [PATCH 1/5] Add OCaml benchmark --- clean.sh | 1 + compile.sh | 1 + fibonacci/ocaml/code.cmi | Bin 0 -> 481 bytes fibonacci/ocaml/code.cmo | Bin 0 -> 901 bytes fibonacci/ocaml/code.ml | 17 +++++++++++++++++ loops/ocaml/code.cmi | Bin 0 -> 524 bytes loops/ocaml/code.cmo | Bin 0 -> 1220 bytes loops/ocaml/code.ml | 15 +++++++++++++++ run.sh | 1 + 9 files changed, 35 insertions(+) create mode 100644 fibonacci/ocaml/code.cmi create mode 100644 fibonacci/ocaml/code.cmo create mode 100644 fibonacci/ocaml/code.ml create mode 100644 loops/ocaml/code.cmi create mode 100644 loops/ocaml/code.cmo create mode 100644 loops/ocaml/code.ml diff --git a/clean.sh b/clean.sh index 3bbd66f5..c2eca61c 100755 --- a/clean.sh +++ b/clean.sh @@ -11,3 +11,4 @@ rm fortran/code rm zig/code rm lua/code rm -f swift/code +rm ocaml/code ocaml/code.cm* diff --git a/compile.sh b/compile.sh index 82d68d1a..e1a1c3ec 100755 --- a/compile.sh +++ b/compile.sh @@ -13,3 +13,4 @@ gfortran -O3 fortran/code.f90 -o fortan/code zig build-exe -O ReleaseFast -femit-bin=zig/code zig/code.zig luajit -b lua/code.lua lua/code swiftc -O -parse-as-library -Xcc -funroll-loops -Xcc -march=native -Xcc -ftree-vectorize -Xcc -ffast-math swift/code.swift -o swift/code +ocamlc ocaml/code.ml -o ocaml/code diff --git a/fibonacci/ocaml/code.cmi b/fibonacci/ocaml/code.cmi new file mode 100644 index 0000000000000000000000000000000000000000..030bb5279acb3a7b959f468267176b9a34b41a87 GIT binary patch literal 481 zcmZ=x%*`>hw6ydzFg9qJx@;c<14AYdO8{{s5Qi>Man4UkU9e$+W?E)aeqLg7awa1q z>xBac9S&@suvj@Wuf)+|f&&xl*M|%a41a)PENlq=Uzo%{hYbgG^OJ#g=_dn?)630q zc5*ww!sP7a@8GbIMcl!`0b)6$4$x9vAYK8)?F%5bPcT?G{msu+{kNI}4!oSi`1CyU zf(5$4B`Ghj)gRh5F|WwjvSi}@1q&>kfguL8Jhdnx xC^xahDX};+8R(xQTbq}wztQ-*XZGT(J1OUnL&J}O1sHBjK+Fol3nn-?006ia!W#ep literal 0 HcmV?d00001 diff --git a/fibonacci/ocaml/code.cmo b/fibonacci/ocaml/code.cmo new file mode 100644 index 0000000000000000000000000000000000000000..e9f024345b8862667121e737c4bfebd21403c650 GIT binary patch literal 901 zcmZ9JO-K}B7{}jNr&>wtkcUo1Vrtpis9?KY8Z|oXr48E<%7$rYcU|3&njI^HGSHxt zjgwN~OETxWB81n?hQghiVaaL#x1QsGY&W-R%_ z(nxIeU3q=`*uq4`l_v)Z^O19w9MFCI>RUB=t#m2yXjAugA^zKM$y?5j27ZMGC)-Dt zXZo+d9xNzn>4`=oxMCu0&vsA!^gJjZeqVNCv8&+DW_m(PZr>4F&ITSnesiyEyky}S zzNspIrzLwmRnfV==d(j8qtR~;eH20pS#tK)%G&)KANqsypKbmrS1g3D6%U9fi5Mv@ saU^XdHM2#_#KZW?7t{TBt5<4%JRKeDTGVqd6=6H$h14W$sa7HR2O$goGXMYp literal 0 HcmV?d00001 diff --git a/fibonacci/ocaml/code.ml b/fibonacci/ocaml/code.ml new file mode 100644 index 00000000..c15d1561 --- /dev/null +++ b/fibonacci/ocaml/code.ml @@ -0,0 +1,17 @@ + + +let fibonacci n = + let rec aux a b n = + if n = 0 then a + else aux b (a + b) (n - 1) + in + aux 0 1 n + + +let () = +let u = int_of_string Sys.argv.(1) in +let r = ref 0 in + for i = 1 to u - 1 do + r := !r + fibonacci i + done; + Printf.printf "%d" !r \ No newline at end of file diff --git a/loops/ocaml/code.cmi b/loops/ocaml/code.cmi new file mode 100644 index 0000000000000000000000000000000000000000..e79be4db997a0efc9845f85fc956072cc53dd38e GIT binary patch literal 524 zcmZ=x%*`>hw6ydzFg9qJx@;c<0|Pq{GXXIh5VI~&an4Ukb%01Q?gR=s0`XTMKC%EJ zH^G2!SALEA?5C1h&W%=YLb>iQSfCqRl9H2|6dxa&oRL^G!64uAL+RGyDONj;&Y$=b z{Wo^O0&SRz;L73&2IY^YrhmFBVi>Xb*gB=U-R8*hsf7~^yizO}8?MCXw(>mk+Q^fUP^xM1cS!)C)MuduvnL})I`~7Rs*eoD+wsd%qvL)y0c)m*Z0uA4H2_n z?`-Zk*SBDSARumB?w6wj<6ykLTZ0|1*b)f4~# literal 0 HcmV?d00001 diff --git a/loops/ocaml/code.cmo b/loops/ocaml/code.cmo new file mode 100644 index 0000000000000000000000000000000000000000..770abf9215690a33f3de3a12a54e37caf2dda7be GIT binary patch literal 1220 zcmb7CTSydP6rSIP)bbXI8Az1bx)rOV8@6i{>uy+zq$C?=+BEIW)!iMN9SzGeQKKgt zH|=E~`bFqMq9!b%g>4~r5%M9sJXnI%L+OJQW<;@_-`%m*o;vXHpZodFnK5uqN0wHr zEoRgVMIpb5q9_f3NCaRTzz(PaR04>c3_i=Y1MGzKzjZX&q>j|cF}X(e#Y28H#A5&# z07d|rTLB;(NZpOg=%1YAP|jL-Nv!~g10(?C8LluN3px=5AoH3+dLq1JKjJ?JAoITj z0s%66BY?!#0LTo|KfJf>`=8z~R`n)x*N64Z0iB3^dlF9t5H5rV;hr0^2{$c(NNd;4 z5nwwH>UG#=5#WoWC?%C<;LVm2ga$C~@MM&VW{3SW%O2%iX5M)i<7+Ate0kR0;AT0& zR(}dS>Lm{+2wVeevxqEbHVakY&tCG|T_Vd{S+^+IUA9_iN^hWa5Y1SMI=LDPTW>Lm zR0a6xctrVEb##Y1B5IOkBq5YS-bjQP@}?jpVk~v*aQ8thNxE==F_^l;Jm6RHWLTyN zHp_52iV;djNb9E~g4+H(oerVK75kO|ThWS8E5;rVU4&3Ca8}9JFq*13L1K9Ae4WqT znLCs{@$A=$-<25emNQBl+!AwkrpxyAbz)Xo&sbmT#Rq%C^m6z=pXUQy% zaH7550-H$8R*8SCkM~7;u(J96f|m~4robiU?2#Db=i?s(yZX0h=2!OrRE(yr%ur`b z%-e`aRIYsUV?1g6+jIfFDU6K1&T6&5N&0xtaLwTNsJn@s?_!TlRfjdnBR`15lx;E2 zb{F>Ee|0DJcJ$aI4aSNfU5QaeDXb$+Plh{Of?6wfOk+&9!G6Ph<00>-&DDnH+&SYq z@M;Y3HDN1@;Nl$lyx` Date: Fri, 29 Nov 2024 22:43:31 +0100 Subject: [PATCH 2/5] Remove unneeded binaries --- fibonacci/ocaml/code.cmi | Bin 481 -> 0 bytes fibonacci/ocaml/code.cmo | Bin 901 -> 0 bytes loops/ocaml/code.cmi | Bin 524 -> 0 bytes loops/ocaml/code.cmo | Bin 1220 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 fibonacci/ocaml/code.cmi delete mode 100644 fibonacci/ocaml/code.cmo delete mode 100644 loops/ocaml/code.cmi delete mode 100644 loops/ocaml/code.cmo diff --git a/fibonacci/ocaml/code.cmi b/fibonacci/ocaml/code.cmi deleted file mode 100644 index 030bb5279acb3a7b959f468267176b9a34b41a87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 481 zcmZ=x%*`>hw6ydzFg9qJx@;c<14AYdO8{{s5Qi>Man4UkU9e$+W?E)aeqLg7awa1q z>xBac9S&@suvj@Wuf)+|f&&xl*M|%a41a)PENlq=Uzo%{hYbgG^OJ#g=_dn?)630q zc5*ww!sP7a@8GbIMcl!`0b)6$4$x9vAYK8)?F%5bPcT?G{msu+{kNI}4!oSi`1CyU zf(5$4B`Ghj)gRh5F|WwjvSi}@1q&>kfguL8Jhdnx xC^xahDX};+8R(xQTbq}wztQ-*XZGT(J1OUnL&J}O1sHBjK+Fol3nn-?006ia!W#ep diff --git a/fibonacci/ocaml/code.cmo b/fibonacci/ocaml/code.cmo deleted file mode 100644 index e9f024345b8862667121e737c4bfebd21403c650..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 901 zcmZ9JO-K}B7{}jNr&>wtkcUo1Vrtpis9?KY8Z|oXr48E<%7$rYcU|3&njI^HGSHxt zjgwN~OETxWB81n?hQghiVaaL#x1QsGY&W-R%_ z(nxIeU3q=`*uq4`l_v)Z^O19w9MFCI>RUB=t#m2yXjAugA^zKM$y?5j27ZMGC)-Dt zXZo+d9xNzn>4`=oxMCu0&vsA!^gJjZeqVNCv8&+DW_m(PZr>4F&ITSnesiyEyky}S zzNspIrzLwmRnfV==d(j8qtR~;eH20pS#tK)%G&)KANqsypKbmrS1g3D6%U9fi5Mv@ saU^XdHM2#_#KZW?7t{TBt5<4%JRKeDTGVqd6=6H$h14W$sa7HR2O$goGXMYp diff --git a/loops/ocaml/code.cmi b/loops/ocaml/code.cmi deleted file mode 100644 index e79be4db997a0efc9845f85fc956072cc53dd38e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmZ=x%*`>hw6ydzFg9qJx@;c<0|Pq{GXXIh5VI~&an4Ukb%01Q?gR=s0`XTMKC%EJ zH^G2!SALEA?5C1h&W%=YLb>iQSfCqRl9H2|6dxa&oRL^G!64uAL+RGyDONj;&Y$=b z{Wo^O0&SRz;L73&2IY^YrhmFBVi>Xb*gB=U-R8*hsf7~^yizO}8?MCXw(>mk+Q^fUP^xM1cS!)C)MuduvnL})I`~7Rs*eoD+wsd%qvL)y0c)m*Z0uA4H2_n z?`-Zk*SBDSARumB?w6wj<6ykLTZ0|1*b)f4~# diff --git a/loops/ocaml/code.cmo b/loops/ocaml/code.cmo deleted file mode 100644 index 770abf9215690a33f3de3a12a54e37caf2dda7be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1220 zcmb7CTSydP6rSIP)bbXI8Az1bx)rOV8@6i{>uy+zq$C?=+BEIW)!iMN9SzGeQKKgt zH|=E~`bFqMq9!b%g>4~r5%M9sJXnI%L+OJQW<;@_-`%m*o;vXHpZodFnK5uqN0wHr zEoRgVMIpb5q9_f3NCaRTzz(PaR04>c3_i=Y1MGzKzjZX&q>j|cF}X(e#Y28H#A5&# z07d|rTLB;(NZpOg=%1YAP|jL-Nv!~g10(?C8LluN3px=5AoH3+dLq1JKjJ?JAoITj z0s%66BY?!#0LTo|KfJf>`=8z~R`n)x*N64Z0iB3^dlF9t5H5rV;hr0^2{$c(NNd;4 z5nwwH>UG#=5#WoWC?%C<;LVm2ga$C~@MM&VW{3SW%O2%iX5M)i<7+Ate0kR0;AT0& zR(}dS>Lm{+2wVeevxqEbHVakY&tCG|T_Vd{S+^+IUA9_iN^hWa5Y1SMI=LDPTW>Lm zR0a6xctrVEb##Y1B5IOkBq5YS-bjQP@}?jpVk~v*aQ8thNxE==F_^l;Jm6RHWLTyN zHp_52iV;djNb9E~g4+H(oerVK75kO|ThWS8E5;rVU4&3Ca8}9JFq*13L1K9Ae4WqT znLCs{@$A=$-<25emNQBl+!AwkrpxyAbz)Xo&sbmT#Rq%C^m6z=pXUQy% zaH7550-H$8R*8SCkM~7;u(J96f|m~4robiU?2#Db=i?s(yZX0h=2!OrRE(yr%ur`b z%-e`aRIYsUV?1g6+jIfFDU6K1&T6&5N&0xtaLwTNsJn@s?_!TlRfjdnBR`15lx;E2 zb{F>Ee|0DJcJ$aI4aSNfU5QaeDXb$+Plh{Of?6wfOk+&9!G6Ph<00>-&DDnH+&SYq z@M;Y3HDN1@;Nl$lyx` Date: Sat, 30 Nov 2024 10:49:03 +0100 Subject: [PATCH 3/5] Don't use tail call recursive version --- fibonacci/ocaml/code.ml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/fibonacci/ocaml/code.ml b/fibonacci/ocaml/code.ml index c15d1561..7bd2190c 100644 --- a/fibonacci/ocaml/code.ml +++ b/fibonacci/ocaml/code.ml @@ -1,12 +1,9 @@ -let fibonacci n = - let rec aux a b n = - if n = 0 then a - else aux b (a + b) (n - 1) - in - aux 0 1 n - +let rec fibonacci n = + if n < 2 then n + else fibonacci (n-1) + fibonacci (n-2) + let () = let u = int_of_string Sys.argv.(1) in From f31d51a6f532036a770ecb12e80d26ebe44d8b02 Mon Sep 17 00:00:00 2001 From: Julio Gomez Diaz <28807086+juliojgd@users.noreply.github.com> Date: Sat, 30 Nov 2024 13:17:25 +0100 Subject: [PATCH 4/5] OCaml Proper native cmpiler --- compile.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compile.sh b/compile.sh index 72798c57..1df644a0 100755 --- a/compile.sh +++ b/compile.sh @@ -15,4 +15,4 @@ gfortran -O3 fortran/code.f90 -o fortan/code zig build-exe -O ReleaseFast -femit-bin=zig/code zig/code.zig luajit -b lua/code.lua lua/code swiftc -O -parse-as-library -Xcc -funroll-loops -Xcc -march=native -Xcc -ftree-vectorize -Xcc -ffast-math swift/code.swift -o swift/code -ocamlc ocaml/code.ml -o ocaml/code +ocamlopt ocaml/code.ml -o ocaml/code From d7888520a00dc6d82127efbab2338fb6f9739cc6 Mon Sep 17 00:00:00 2001 From: Julio Gomez Diaz <28807086+juliojgd@users.noreply.github.com> Date: Sat, 30 Nov 2024 13:18:56 +0100 Subject: [PATCH 5/5] remove .o object intermediate file --- clean.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clean.sh b/clean.sh index d2c1d226..3e357dfe 100755 --- a/clean.sh +++ b/clean.sh @@ -13,4 +13,4 @@ rm fortran/code rm zig/code rm lua/code rm -f swift/code -rm ocaml/code ocaml/code.cm* +rm ocaml/code ocaml/code.cm* ocaml/code.o