如何在Rust中禁用循环展开?

Str*_*ger 9 performance loops rust

我正在寻找Rust来重写C ++代码库,并且我想知道如何禁用循环展开/向量化以及控制展开计数。在Clang中,我们将使用:

#pragma clang loop unroll(disable)
#pragma clang loop unroll(disable) vectorize(disable)
#pragma clang loop unroll_count(2)
Run Code Online (Sandbox Code Playgroud)

它是对性能高度敏感的代码,无法控制循环代码生成可能会成为热门。

She*_*ter 6

您无法控制给定循环的展开方式。已经提出了建议,但是在考虑这样的RFC方面并没有取得真正的进展,更不用说接受和实现了。


如果您正在寻找非常广泛的功能,则可以传递-C llvm-args=...给编译器以影响LLVM。如果有一种方法可以完全禁用循环展开,那可能会做您想要的。

从务实角度来说,我会鼓励你得到一个很瘦拉斯特你的代码,看看表现尚可。我的个人经验表明,由于以下原因,“通用” Rust代码的性能更高:

  • 借阅检查器使您可以放心使用参考而不是副本
  • 比较容易使用多线程
  • 一个强大的类型系统,可以帮助避免多次执行工作