我正在看ReST来重写C++代码库,我想知道如何禁用循环展开/矢量化和控制展开计数.在叮当声中,我们将使用:

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

它是对性能高度敏感的代码,不控制循环codegen可能会成为一个阻碍.

推荐答案

无法控制给定循环的展开方式.它有has been proposed个,但在考虑这样一个RFC方面没有取得实际进展,更不用说接受和实施它了.


如果您正在寻找非常广泛的功能,可以将-C llvm-args=...传递给编译器以影响LLVM.如果有一种方法可以完全禁用循环展开,那么might就可以随心所欲了.

务实地说,我鼓励您对代码进行walking skeleton次测试,看看性能是否可以接受.我的个人经验表明,"通用"防 rust 代码更有效,因为

  • 借阅判断器确保在使用参考资料而非副本时保持安全
  • 多线程的使用相对简单
  • 一个强大的类型系统,可以帮助避免多次执行工作

Rust相关问答推荐

什么样的 struct 可以避免使用RefCell?

将内部类型作为参数的泛型 struct 上的方法

为什么std repeat trait绑定在impl块和关联函数之间?

在使用#[NO_STD]时,如何在Rust中收到紧急消息?

如何删除Mac Tauri上的停靠图标?

避免在Collect()上进行涡鱼类型的涂抹,以产生<;Vec<;_>;,_>;

如何go 除多余的(0..)在迭代中,当它不被使用时?

rust 蚀生命周期 不匹配-不一定超过此处定义的生命周期

UnsafeCell:它如何通知 rustc Select 退出基于别名的优化?

当锁被释放时,将锁包装到作用域中是否会发生变化?

返回优化后的标题:返回异步块的闭包的类型擦除

如何将 &[T] 或 Vec<T> 转换为 Arc<Mutex<[T]>>?

‘&T as *const T as *mut T’ 在 ‘static mut’ 项目中合适吗?

错误:将自定义 proc_macro 与用Rust 的宝贝编写的属性一起使用时,无法在此范围内找到属性

在线程中运行时,TCPListener(服务器)在 ip 列表中的服务器实例之前没有从客户端接受所有客户端的请求

为什么1..=100返回一个范围而不是一个整数?

为什么会出现无法移出可变引用后面的 `self.x`错误?

有没有更好的方法来为拥有 DIsplay 事物集合的 struct 实现 Display?

如何在宏中的多个参数上编写嵌套循环?

将 reqwest bytes_stream 复制到 tokio 文件中