performance - 如何禁用 Rust 中的循环展开?

标签 performance loops rust

我正在研究 Rust 以重写 C++ 代码库,我想知道如何禁用循环展开/矢量化并控制展开计数。在 Clang 中我们会使用:

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

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

最佳答案

您无法控制给定循环的展开方式/不展开方式。它has been proposed ,但在考虑这样的 RFC 方面没有取得真正的进展,更不用说接受和实现它了。


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

从实用的角度来说,我鼓励您获得 walking skeleton在 Rust 中检查你的代码,看看性能是否可以接受。我的个人经验表明,“通用”Rust 代码性能更高,因为

  • 借用检查器可以安全地积极使用引用而不是副本
  • 相对容易使用多线程
  • 有助于避免多次执行工作的强类型系统

关于performance - 如何禁用 Rust 中的循环展开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57183573/

相关文章:

ios - 内存不足时性能低下 - Swift

c - 在 Linux 上使用共享内存进行低延迟数据包处理?

JavaScript setInterval 问题

struct - 如何将来自不同 HashMap 的字段合并为一个?

rust - 了解 &* 以访问 Rust Arc

rust - 为什么在使用非文字模式时无法访问此匹配模式?

c++ - memcmp - 是否有更快的方法来按位比较两个缓冲区

Eclipse PyDev 完成挂起(再次)

C# 暂停循环并在单击按钮后继续

javascript - 如何将具有旧日期的对象保留在我的数组之外