有什么方法可以更快地处理"predictable branches"?
Any way to handle "predictable branches" faster?
我有一些代码,其中有两到三个分支,你不知道它们会朝哪个方向发展,但在第一次被击中后,可以100%确定或接近于此,相同的路径将再次发生。我注意到,使用__builtin_likely在避免分支未命中方面并没有起到多大作用。尽管当我的函数在短时间内被重复调用时,分支预测做得很好。。一旦在对我的函数的调用之间发生了其他事情,性能就会显著下降。有什么方法可以解决这个问题,或者我可以研究一些技术?有没有办法以某种方式"标记"这些树枝,以备流浪后再次到达?
您可以使用模板为每个代码路径生成不同版本的函数,然后在运行时使用函数指针来选择一个,当您发现条件的发展方向时。
分支预测器和编译器内部函数就是您所拥有的全部。充其量,你可以查看组装,并尝试自己手动进行一些优化,但你不会发现太多。
相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何用数字处理log(0)
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- 错误处理.将系统错误代码映射到泛型
- 从文本文件中读取时钟时间和事件时间并进行处理
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 用于矢量处理的多个线程
- 对字符串进行排序时,在c++中处理sort()
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 处理除以零会导致<csignal>意外行为
- 是否可以在c++中处理字符串流中的各个元素
- 有什么方法可以更快地处理"predictable branches"?