gpt4 book ai didi

javascript - 循环是否会导致分支预测

转载 作者:行者123 更新时间:2023-11-29 16:02:22 25 4
gpt4 key购买 nike

我试图更好地理解导致 branch prediction 的原因要计算的,什么都没有。

例如,我有一个包含 1 和 0 的数组。我想遍历这个数组,如果它读到 0 就做一些事情,但如果它读到 1 就做其他事情。

使用 JavaScript 看起来像这样:

var array = [0, 1, 1, 1, 0, 0, 0];

for(i=0; i < array.length; i++){
if(array[i] == 0){
// Do The 0 Instruction

}else{
// Do The 1 Instruction

}
}

我知道这会导致进行分支预测,因为程序在从数组中读取数据之前不知道需要采取什么步骤。

但是,如果我对数组进行预处理以将多个连续的 1 或 0 组合成一个数字会怎样。因此,例如数组将更改为:

var array = [0, 1, 1, 1, 0, 0, 0];
var condensedArray = [1, 3, 3];

现在我可以使用这样的循环,而不是使用 if 语句来分支我的指令:

var condensedArray = [1, 3, 3];

for(i=0; i < condensedArray.length; i+=2){

for(j=0; j < condensedArray[i]; j++)
//Do The 0 Instruction

for(j=0; j < condensedArray[i+1]; j++)
//Do The 1 Instruction

}

这是否仍然导致分支预测被计算和错过?如果是这样,使用 if 语句测试原始数组的每个索引是否至少更有效?

编辑: 在评论中有人问我如何知道数组是以 0 还是 1 开头?为简单起见,我将其排除在外,并且不想编辑上面的代码以使其更长,但我会在程序开头有一个 if 语句,说明数组是否以 0 或 1 开头。然后那个单一的branch 会将循环按正确的顺序排列。

最佳答案

基准测试可以判断 CPU 是否对此类代码进行分支预测。当您创建两个退出条件相当容易预测的循环时,CPU 可能能够在那里进行分支预测。

关于javascript - 循环是否会导致分支预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50959874/

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