gpt4 book ai didi

c++ - 使用 __builtin_expect() 或 Linux 内核的 likely 和 unlikely 时 "very likely"是多少

转载 作者:搜寻专家 更新时间:2023-10-31 00:55:52 25 4
gpt4 key购买 nike

你应该只使用 __builtin_expect() 或 Linux 内核的 likely()unlikely() 如果你的代码将遵循预测的分支。 “很有可能”是多少?

我正在研究数据包嗅探器程序。我的程序从 2 个 NIC 捕获数据包并将它们保存在 2 个独立的缓冲区中。我希望在从 NIC 1 收到 25 个数据包后,从 NIC2 收到一个数据包。

所以,我需要使用如下 if 语句:

if (_received_from_nic1) {
_Connection_Number++;
} else {
_Session_Number++;
}

那么,这种情况是使用 __builtin_expect() 还是 Linux 内核的 likely() 好呢?这种情况是否满足“很有可能”的条件?

最佳答案

很难相信网络代码中会存在 CPU 性能瓶颈。
即使有,分支预测器也没有理由在这里失败,分支预测器现在真的很好。
即使有这种优化的原因,执行配置文件引导 (PGO) 而不是用一些特定于平台且难以阅读的代码阻塞源代码会更聪明。

一般来说,“帮助编译器”通常不是一个好主意。在某些情况下它可能会有用,但真的很难想出这些。
likely()/unlikely() 的情况下,如果你知道你的确切目标平台并且你知道它是一些完全没有分支预测的特定 CPU,那么也许你可以一些事情,否则可能是在浪费时间。

关于c++ - 使用 __builtin_expect() 或 Linux 内核的 likely 和 unlikely 时 "very likely"是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41083333/

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