branch-prediction

    1热度

    1回答

    让我们假设一个简单的if这样的: if (something) // do_something else // do_else 假设这if-else声明是在不同的线程并行执行,每个线程产生不同的结果,而是通过自己的生命不断。例如,在线程1中,条件总是被评估为false,在线程2中为true;在线程3中也总是如此,等等。 分支预测是否考虑每个线程的执行上下文来进行统计?因为

    1热度

    1回答

    问题很简单 - 检查给函数的实际参数是否会导致性能损失? 导出的库函数通常倾向于以检查用户代码传递的实际参数: if (arg1 == NULL || arg2 == NULL) return -EINVAL; 这是否检查性能产生负面影响?我尝试通过从某些导出的函数中删除这些检查来优化某些库代码(依赖于我是一个行为良好的用户并始终传递有效参数),但我注意到没有真正的改进。 我的第一个

    -1热度

    2回答

    请考虑这个普通的一段代码: for j = 0 to (Array.length myArray) - 1 do if property.(id) then (* do a bunch of stuff*) done 这里,property是一个非常大的数组布尔的。 在这个实验中,我们有两种情况: 在第一 ,property.(id)总是真。 在第二,property.

    1热度

    2回答

    按我的理解,如果我有一个: if(case 1) { char x[] = "1"; printf("%s",x); } else if(case 2) { char x[] = "12"; printf("blah-blah-blah\n"); printf("%s",x); } 然后我的编译器将尝试预测分支代码将进入,这样一来,提

    1热度

    1回答

    我正在尝试创建一种安全缓冲区,可自动处理没有任何分支的溢出。缓冲区大小是2的幂,并且只应具有有效的正(即不包括零)索引。它还允许检查删除,如果存储在该索引处的元素等于搜索键,则在给定索引处删除该删除。 我基本上去为这样的事情 Element *buffer[256]; inline void buffer_insert(size_t index, Element *elem){ bu

    1热度

    2回答

    这是一个纯粹的概念问题。为什么OS没有切换任何时候从未被占用的分支?动态分支预测仅适用于过去采用的分支,而静态分支预测在某些情况下才是正确的。如果分支上没有数据,则操作系统和处理器似乎应该开始将单独的任务放入流水线,而不是盲目猜测分支。然后,您可以计算分支的结果,并在原始任务再次计划时执行该分支。下次遇到分支时,处理器可以使用动态预测。 这个方法没有被使用的原因吗?或者它被使用,我只是不知道?

    0热度

    1回答

    我有这样的代码: if (null == _priceComplianceSummaryList) { _priceComplianceSummaryList = new List<PriceComplianceSummary>(); } ReSharper的标志这是个问题,这表明,如果我默许“‘如果’与各自的分支语句替换”,上述变化的代码: _priceComplianceSu

    0热度

    1回答

    根据我所读的,似乎成本可能是0个周期。它真的是0循环吗?如果成本为0个周期,是否包括跳转指令本身,而不仅仅是CPU指令缓存中可能的刷新?我很欣赏任何CPU架构的答案。

    0热度

    1回答

    我想知道在较长的管道中是否有可行的场景,当年轻的分支指令已经被分支预测机制处理时,但是相应的lhr(或ghr,取决于实现)仍然没有由于管线长度的原因,未更新旧分支的实际结果。 它是一个可行的方案,它是如何解决的?

    5热度

    1回答

    有没有什么方法可以确定,或者我可以找到Haswell,Sandy Bridge,Ivy Bridge和Skylake Intel处理器的分支目标缓冲区大小的任何资源?