13 ms·
It seems the Rust team is really optimizing the language for ARM chips.
by higherpurpose 12y ago
It seems the Rust team is really optimizing the language for ARM chips.
- logicchains 12y agoThey use the LLVM as the backend, which is quite well optimised. The relatively poorer performance of that program on x86 may just be a bug (as the x86 version is compiled with a slightly different version of the Rust compiler); the program uses recursion, which may not be a Rust idiom and hence may not be well tested for performance regressions.
- dbaupp 12y agoIt doesn't actually use recursion; it is tail recursion and LLVM optimises it to a loop: .LBB0_77: movq %rax, %rbx movq %rcx, %rax addq %rbx, %rax incq %rdx movq %rbx, %rcx jne .LBB0_77 The difference on x64-64 is the Rust is using 64-bit integers (`int` is pointer sized), while the C is only using 32-bit ones; changing them to the 32-bit `i32` to match the C makes Rust super-fast: 75699 LANGUAGE Rust 2167 75699 LANGUAGE C 2220 # gcc 75699 LANGUAGE C 2271 # clang I opened https://github.com/logicchains/armfib/pull/1 https://github.com/logicchains/armfib/pull/1 .
- logicchains 12y agoThanks. The tables have been updated to use the new values; I'm really surprised how much of a difference changing from int to int32 made.