我想知道英特尔i7处理器的分支预测是如何工作的?
Currenly,我知道预测器称为"动态分支预测".
对于1位预测器:硬件始终预测分支指令采取与上次执行时相同的方向.
在实践中更好地工作的精炼版本是2位预测器.为了进一步提高预测精度,引入了2比特预测方案.在这些方案中,预测在改变之前必须是错误的两次.
i7是否具有与上述相同的预测值?
CUDA编程指南介绍了warp投票功能的概念,"_ all"," _ any"和"__ballot".
我的问题是:哪些应用程序将使用这3个功能?
我在一篇论文中看到了一句话:"将分支转换为数据依赖关系以避免错误预测的分支".(第6页)
我想知道如何将代码从分支更改为数据依赖项.
这是一篇论文:http://www.adms-conf.org/p1-SCHLEGEL.pdf
更新:如何在二进制搜索中转换分支?
我问了一个关于减少未命中预测的问题。
Jerry Coffin 给了我一个令人印象深刻的答案。
二分搜索是无分支的,但是当我在我的集合交集算法中使用它时,我发现它比原始二分搜索慢得多。什么原因?
更新:
我使用以下事件来测试 i7 处理器的分支未命中预测数:BR_MISS_PRED_RETIRED。我发现无分支版本比原始版本少了大约一半的分支缺失。
对于缓存未命中:我使用 LLC_MISSES 来测试最后一级缓存未命中的次数,也是一半。
但时间是原来的2.5倍左右。
数据必须是16字节对齐的,以便SSE指令可以处理它而不会出现分段错误吗?我试过的编译器是带有选项的gcc -msse2.我想_mm_cmpgt_epi32用来比较一个大的int数组.我发现它不能在数组的任何位置执行,除了下标为4的倍数的位置.
algorithm ×2
branch ×2
architecture ×1
cuda ×1
gpgpu ×1
gpu ×1
optimization ×1
simd ×1
sse ×1
x86 ×1