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

12

我正在考虑使用Rust来重写一个C++代码库,我想知道如何禁用循环展开/向量化并控制展开次数。在Clang中,我们会这样使用:

#pragma clang loop unroll(disable)
#pragma clang loop unroll(disable) vectorize(disable)
#pragma clang loop unroll_count(2)

这是高度依赖性能的代码,无法控制循环代码生成可能会成为一个阻碍。

1个回答

9

您无法控制给定循环是否展开。已有人提出这种想法,但在考虑此类RFC方面没有取得实质性进展,更不用说接受和实施了。


如果你想要非常广泛的功能,可以将-C llvm-args=...传递给编译器以影响LLVM。如果有一种完全禁用循环展开的方法,那么可能会达到你想要的效果。
实际上,我建议你在Rust中获得代码的walking skeleton,看看性能是否可接受。我的个人经验表明,“通用”的Rust代码更具性能优势,因为它具备以下特点:
  • 借用检查器使得可以大胆地使用引用而不是副本
  • 相对容易使用多线程
  • 强类型系统可以帮助避免重复执行工作

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接