使用 __builtin_expect() 或 Linux 内核时可能和不太可能时"very likely"多少
How much is "very likely" when using __builtin_expect() or Linux kernel's likely and unlikely
如果您的代码将遵循预测的分支,则应仅使用__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,而没有分支机构预测,那么也许您可以从中做出一些东西,否则可能是浪费时间。
这里不需要/不太可能。分支预测器将为您处理。但是,如果您渴望知道是否存在差异,请遵循此范式:进行测量,不要只是猜测。
相关文章:
- p0083中"very efficient factories for elements"的目的
- 'coerceToReal' 中未实现的类型 'builtin' [Rcpp]
- 使用 __builtin_expect() 或 Linux 内核时可能和不太可能时"very likely"多少
- 在eclipse CDT GCC Builtin编译器上,处的std矢量无法解析
- 铛。如何克服"unknown builtin"错误消息
- 有没有办法在调试中设置断点"at this very moment"?它是关于任何编程语言或IDE的
- 如何让Very Sleepy分析器识别c++二进制文件中的函数名?
- 带有-fno-builtin的GCC似乎不起作用
- pow(NAN) is very slow
- Very Sleepy分析器中花括号附近的时间测量值表示什么?
- count3's in cuda is very slow
- Very Quick global .h Question(有了它,有些项目仍然没有定义)