gpt4 book ai didi

rust - 翻转 boolean 值的最快方法

转载 作者:行者123 更新时间:2023-12-05 08:45:08 32 4
gpt4 key购买 nike

我正在尝试找到翻转 Rust 中 boolean 值的最快方法?即

false => true
true => false

对于我的应用程序,我不关心 boolean 值的当前值,只关心它被翻转了。对于我的应用程序(阿特金筛分法——埃拉托色尼筛分法的改进版本),这将需要执行很多次,因此最好让它尽可能快地运行。目前我的代码是:

item[i] = !item[i]

因为,(如前所述)item[i] 的当前值是无关紧要的,我确信有一种更快(可能是按位)的方法可以做到这一点。但是,我有点使用rust ,一直找不到它,谁能告诉我更好的方法?

谢谢,

最佳答案

没关系。编译器会在这方面比你聪明,并选择它知道的最快的方法。您使用的确切语法并不重要。 然而,只有当您记得打开优化时才会出现这种情况。您可能认为这是显而易见的,但这是一个极其常见的错误。这是在使用 cargo 构建或运行项目时使用 --release 完成的。如果您忘记了这一步,编译器甚至不会尝试加速您的代码,并且计时代码执行变得毫无意义。

更重要的是如何访问 boolean 值所在的内存。如果您一次对一个值或一个小区域进行大量工作,请尝试将您正在处理的内存保留在堆栈中。缓存局部性还意味着读取相邻的缓存行比在内存中的不同位置之间跳转更快。如果您最近访问过内存或 CPU 猜测您将要访问它,则内存更有可能在缓存中。

还有像 bit-vecbitvec 这样的 crate ,它们将每个 boolean 值减少到使用一个位。这对于提高内存使用率非常有用(准确地说是 8 倍的提高),但性能成本非常低。不过,我会避免使用 bitvec crate。大约一个月前,我做了一些基准测试,性能非常糟糕。

您需要一次处理一个 boolean 值吗?如果可能,请尝试使用完整的内存单词。 u64 上的位运算可能会花费完全相同的时间,但您的工作效率是原来的 64 倍。

关于rust - 翻转 boolean 值的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74075117/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com