5 ms·
How does one do intrinsics (SSE / AVX) in Rust - I guess they're just the exposed functions from emmintrin.h and the compiler calls them directly? How do you d
by berkut 13y ago
How does one do intrinsics (SSE / AVX) in Rust - I guess they're just the exposed functions from emmintrin.h and the compiler calls them directly?
How do you do ASM in Rust?
Can you align memory in rust?
- masklinn 13y ago> How do you do ASM in Rust? There's an asm! macro: http://static.rust-lang.org/doc/0.10/guide-unsafe.html#inline-assembly http://static.rust-lang.org/doc/0.10/guide-unsafe.html#inlin... > Can you align memory in rust? I think that's an open problem for now, e.g. https://github.com/mozilla/rust/issues/4578 https://github.com/mozilla/rust/issues/4578
- berkut 13y agoAligning memory is pretty important for high-performance apps using SSE/AVX (archs after SB don't need alignment any more, but still benefit from it) - and generally anyway - cacheline alignement, etc, and while it's often possible to force structs / classes to be aligned by padding them, this doesn't always work. Does Rust allow using memory allocated by specific external allocators? i.e. libnuma or something?
- masklinn 13y ago> Aligning memory is pretty important for high-performance apps using SSE/AVX Er… yes? Did I say it was unimportant anywhere? (also please note that I'm not a Rust developer) > Does Rust allow using memory allocated by specific external allocators? i.e. libnuma or something? I'm not quite sure what you're asking * if you're asking if it's possible to use arbitrary memory returned by a third party? Then yes. * if you're asking whether user-defined allocators or boxes are supported and you can ask the runtime to put its stuff in memory you get from e.g. a bundled jemalloc, then that's planned but not in I believe: https://github.com/mozilla/rust/issues/12038 https://github.com/mozilla/rust/issues/12038
- berkut 13y ago> Er… yes? Did I say it was unimportant anywhere? No, but that link seemed to indicate it wasn't being planned for the first release and pcwalton seems to think it's possible to get Rust programs to run as fast as C++ programs in most cases.
- dbaupp 12y agoIt can easily be added backward-compatibly, so could appear in, e.g., a 1.1 release. Or... someone who really wants it scratches their itch and gets it implemented. :) (The speed of a language isn't determined by the speed of it's "first release".)
- twic 12y agoI would imagine that "most cases" don't require this kind of alignment, because most cases don't involve vector instructions. There is certainly a set of performance-critical problems where making optimal use of vector instructions is essential. It does seem that Rust is unlikely to be competitive for those today. But i think it's a minority of all problems.
- pcwalton 12y ago> How does one do intrinsics (SSE / AVX) in Rust - I guess they're just the exposed functions from emmintrin.h and the compiler calls them directly? It uses the LLVM support. > How do you do ASM in Rust? With the asm! macro. > Can you align memory in rust? Yes. Write an allocator that does this and use it. The language doesn't have an allocator "built-in" and has full support for custom allocators.
- berkut 12y ago> It uses LLVM support. What do you mean by this? 1. Any scaler code might get vectorised by the LLVM if you're luckly. or 2. You can write the instrinsics yourself in inline code, and the compiler will (almost) obey them verbatim? In my experience, LLVM's vectorisation is behind GCC and quite a way behind ICC...