Rust versus C gcc
How the programs are written matters! Always look at the source code.
If the fastest programs are flagged * possible hand-written vector instructions or "unsafe" or naked ffi, does the host language matter? You might be more interested in the less optimised programs — more seconds, less gz source code.
fannkuch-redux | |||||
---|---|---|---|---|---|
elapsed | Mean or 95% CI | ||||
source | secs | cpu secs | mem | gz | make |
* C gcc #6 | 2.14 | 8.44 | 2,712 | 1582 | 2.68 |
* C gcc #4 | 14.05 | 14.06 | 2,351 | 1190 | 2.31 |
* Rust #6 | 3.81 | 15.06 | 3,985 | 1260 | 11.92 |
Rust #4 | 6.94 | 27.12 | 3,985 | 1026 | 11.71 |
C gcc #5 | 7.28 | 28.32—28.45 | 2,949 | 917 | 2.17 |
Rust #5 | 7.41 | 28.89 | 3,990 | 1023 | 11.79 |
Rust #2 | 9.19 | 36.04—36.08 | 3,723 | 1198 | 11.14 |
C gcc #3 | 36.84 | 36.84—36.89 | 2,343 | 574 | 2.19 |
C gcc #8 | 39.34 | 39.52—40.22 | 2,343 | 483 | 2.20 |
C gcc | 39.65 | 39.64—40.07 | 2,343 | 514 | 2.12 |
* C gcc #2 | 10.18 | 39.98—40.15 | 2,695 | 1563 | 2.51 |
n-body | |||||
elapsed | Mean or 95% CI | ||||
source | secs | cpu secs | mem | gz | make |
* C gcc #9 | 2.10 | 2.10 | 2,482 | 1639 | 2.99 |
* Rust #9 | 2.19 | 1.90—3.09 | 3,023 | 1881 | 11.01 |
* Rust #7 | 3.24 | 3.24 | 2,937 | 1759 | 10.53 |
Rust #3 | 3.46 | 3.46 | 2,937 | 1774 | 10.62 |
Rust #2 | 3.65 | 3.65 | 3,031 | 1809 | 10.49 |
* C gcc #4 | 4.06 | 4.06 | 2,499 | 1398 | 2.98 |
Rust #6 | 4.37 | 4.36—4.49 | 3,031 | 1796 | 10.86 |
C gcc #6 | 4.98 | 4.99 | 2,482 | 1186 | 2.33 |
* Rust #5 | 5.02 | 5.03 | 3,035 | 2224 | 10.61 |
Rust #4 | 5.13 | 4.99—5.53 | 3,039 | 1810 | 10.50 |
C gcc #2 | 5.20 | 5.20 | 2,490 | 1270 | 2.43 |
C gcc | 5.23 | 5.23 | 2,486 | 1179 | 2.58 |
C gcc #3 | 5.24 | 5.24 | 2,482 | 1214 | 2.42 |
* C gcc #5 | 5.44 | 5.44 | 2,494 | 1436 | 2.31 |
Rust | 5.52 | 5.50—5.60 | 3,027 | 1483 | 10.84 |
C gcc #8 | 5.54 | 5.54 | 2,486 | 1195 | 2.52 |
C gcc #7 | 6.89 | 6.90 | 2,490 | 1250 | 2.32 |
spectral-norm | |||||
elapsed | Mean or 95% CI | ||||
source | secs | cpu secs | mem | gz | make |
* C gcc #6 | 0.40 | 1.60 | 3,199 | 1203 | 3.38 |
* C gcc #5 | 0.72 | 2.86 | 3,858 | 576 | 2.52 |
* Rust #6 | 0.72 | 2.85 | 3,981 | 1132 | 12.60 |
Rust #4 | 0.72 | 2.85 | 4,047 | 823 | 12.00 |
* C gcc #7 | 0.72 | 2.86 | 4,067 | 906 | 3.21 |
Rust #5 | 0.72 | 2.86 | 4,018 | 1062 | 11.30 |
* C gcc #4 | 0.72 | 2.86 | 3,719 | 1145 | 2.49 |
* Rust #2 | 0.72 | 2.86 | 4,145 | 1117 | 11.00 |
* Rust | 0.72 | 2.86 | 4,104 | 1262 | 11.75 |
* Rust #3 | 0.74 | 2.94 | 4,121 | 1060 | 10.92 |
C gcc #8 | 5.41 | 5.41 | 3,219 | 389 | 2.42 |
C gcc #3 | 1.43 | 5.71 | 4,080 | 470 | 2.42 |
Rust #7 | |||||
* C gcc #2 | |||||
mandelbrot | |||||
elapsed | Mean or 95% CI | ||||
source | secs | cpu secs | mem | gz | make |
Rust #4 | 0.95 | 3.78 | 35,598 | 1301 | 12.26 |
Rust #6 | 1.08 | 4.21 | 36,426 | 1338 | 12.65 |
Rust #7 | 1.10 | 4.34 | 35,906 | 763 | 12.32 |
Rust #2 | 1.10 | 4.36—4.52 | 35,754 | 770 | 12.80 |
Rust #5 | 1.12 | 4.38 | 36,311 | 725 | 12.27 |
Rust #3 | 1.15 | 4.57 | 14,615 | 1013 | 12.66 |
* C gcc #6 | 1.29 | 5.11 | 35,578 | 1147 | 2.64 |
C gcc #5 | 1.64 | 6.32 | 35,582 | 788 | 2.38 |
Rust | 2.01 | 7.90 | 42,631 | 874 | 10.94 |
* C gcc #4 | 3.50 | 13.91 | 35,197 | 805 | 2.16 |
* C gcc #7 | 3.51 | 13.94 | 35,447 | 1000 | 2.60 |
* C gcc | 3.50 | 13.94 | 35,017 | 828 | 2.23 |
* C gcc #3 | 3.55 | 14.12 | 34,873 | 769 | 2.26 |
C gcc #9 | 4.07 | 15.72 | 35,394 | 700 | 2.47 |
C gcc #8 | 25.17 | 25.18 | 2,355 | 412 | 2.29 |
fasta | |||||
elapsed | Mean or 95% CI | ||||
source | secs | cpu secs | mem | gz | make |
C gcc #3 | 0.79 | 0.79 | 2,236 | 1469 | 2.26 |
C gcc #5 | 1.24 | 1.25 | 2,154 | 1286 | 2.42 |
* Rust #7 | 0.78 | 1.55 | 4,772 | 2533 | 11.68 |
Rust #3 | 2.03 | 2.03 | 3,199 | 1235 | 10.95 |
C gcc #2 | 2.77 | 2.77 | 2,204 | 1299 | 2.25 |
C gcc #6 | 0.95 | 2.77—2.81 | 3,748 | 1936 | 2.44 |
Rust #9 | 0.94 | 3.20—3.33 | 5,534 | 1952 | 11.24 |
C gcc #7 | 0.83 | 3.28 | 4,514 | 2276 | 2.39 |
Rust #2 | 0.95 | 3.46—3.50 | 5,554 | 1910 | 11.45 |
Rust #5 | 0.94 | 3.48—3.53 | 5,554 | 1963 | 12.19 |
Rust #4 | 3.52 | 3.53 | 128,217 | 944 | 10.63 |
Rust #6 | 3.53 | 3.53 | 128,381 | 959 | 10.62 |
C gcc | 3.71 | 3.71 | 2,421 | 1213 | 2.25 |
Rust | 4.45 | 4.54—4.61 | 3,113 | 1240 | 11.09 |
C gcc #8 | 8.27 | 8.31—8.37 | 2,195 | 839 | 2.20 |
C gcc #4 | |||||
k-nucleotide | |||||
elapsed | Mean or 95% CI | ||||
source | secs | cpu secs | mem | gz | make |
Rust #7 | 2.57 | 8.13—8.39 | 139,088 | 1585 | 13.43 |
Rust #3 | 3.28 | 9.72—10.13 | 142,631 | 1549 | 11.91 |
Rust #6 | 2.79 | 10.06—10.15 | 165,048 | 1697 | 14.10 |
Rust #5 | 3.88 | 11.66—11.92 | 143,155 | 1745 | 12.40 |
C gcc | 3.58 | 12.06—12.40 | 135,234 | 1512 | 2.82 |
Rust #2 | 6.00 | 15.71—16.24 | 142,946 | 1350 | 11.85 |
Rust #9 | 6.33 | 17.72—18.82 | 141,099 | 1850 | 14.41 |
Rust #4 | 6.69 | 18.00—18.74 | 142,090 | 1755 | 13.13 |
Rust | 21.08 | 64.42—65.12 | 161,219 | 1086 | 12.16 |
reverse-complement | |||||
elapsed | Mean or 95% CI | ||||
source | secs | cpu secs | mem | gz | make |
* C gcc #7 | 0.44 | 0.62 | 514,208 | 1899 | 3.13 |
C gcc #9 | 0.49 | 0.78 | 514,159 | 1551 | 2.20 |
* Rust | 0.55 | 0.85 | 512,963 | 2762 | 11.72 |
C gcc #6 | 0.97 | 1.37 | 693,969 | 828 | 2.26 |
C gcc #5 | 1.54 | 1.54 | 1,020,662 | 654 | 2.05 |
C gcc #2 | 1.07 | 1.59 | 1,021,755 | 757 | 2.15 |
Rust #2 | 1.01 | 1.61 | 1,022,128 | 1332 | 11.04 |
Rust #3 | 1.02 | 1.72 | 1,022,034 | 1105 | 11.45 |
* C gcc #4 | 3.70 | 3.71 | 514,077 | 716 | 2.22 |
binary-trees [ Contentious. Different approaches. ] | |||||
elapsed | Mean or 95% CI | ||||
source | secs | cpu secs | mem | gz | make |
Rust #5 | 1.07 | 3.84—4.01 | 139,121 | 771 | 1.28 |
Rust #2 | 1.17 | 4.16—4.25 | 140,157 | 729 | 12.50 |
C gcc #2 | 1.56 | 4.30—4.45 | 174,780 | 816 | 3.21 |
C gcc #3 | 1.96 | 4.79—4.93 | 138,711 | 842 | 2.94 |
Rust #4 | 1.38 | 4.98—5.02 | 202,686 | 765 | 12.32 |
Rust #3 | 1.40 | 5.15—5.26 | 172,392 | 762 | 11.90 |
Rust | 2.10 | 7.44 | 137,417 | 760 | 11.36 |
C gcc | 21.21 | 21.39—21.70 | 272,065 | 660 | 2.37 |
C gcc #5 | 8.71 | 31.85—32.27 | 361,587 | 914 | 2.34 |
pidigits [ Contentious. Different libraries. ] | |||||
elapsed | Mean or 95% CI | ||||
source | secs | cpu secs | mem | gz | make |
Rust #4 | 0.71 | 0.72 | 4,055 | 804 | 11.82 |
C gcc #2 | 0.74 | 0.74 | 4,006 | 422 | 2.25 |
* Rust #2 | 0.75 | 0.75 | 4,387 | 1312 | 10.44 |
* Rust | 0.75 | 0.75 | 4,243 | 1426 | 10.19 |
C gcc | 0.75 | 0.75 | 3,727 | 459 | 2.30 |
* Rust #3 | 0.75 | 0.75 | 4,510 | 1373 | 10.10 |
regex-redux [ Contentious. Different libraries. ] | |||||
elapsed | Mean or 95% CI | ||||
source | secs | cpu secs | mem | gz | make |
Rust #6 | 1.21 | 1.46 | 159,846 | 994 | 13.12 |
Rust #5 | 1.35 | 1.58 | 209,863 | 777 | 12.67 |
Rust | 1.35 | 1.59—1.63 | 159,793 | 811 | 12.22 |
Rust #3 | 1.38 | 1.63 | 210,379 | 726 | 13.51 |
Rust #4 | 1.38 | 1.64 | 206,811 | 771 | 12.41 |
Rust #2 | 1.38 | 1.64 | 159,937 | 707 | 11.67 |
* Rust #7 | 0.78 | 2.00 | 157,442 | 2464 | 12.48 |
C gcc #5 | 0.81 | 2.05 | 157,463 | 1403 | 2.47 |
C gcc #2 | 3.22 | 3.22 | 106,713 | 1121 | 2.14 |
C gcc #4 | 0.97 | 3.30 | 157,417 | 1237 | 2.18 |
C gcc #3 | 1.73 | 3.32 | 107,401 | 1273 | 2.27 |
Rust | |||||
C gcc |