You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

探究分支预测惩罚的影响因素:两种数组对比方法性能差异解析

问题背景

我有两个数组x和y。x中的值是随机的,而y已被划分为正数和负数子数组。x的元素数量从数千到数百万不等,而y的元素数量通常不超过几十到几百个。我仅在元素符号相同时对比两个数组中的值。我可以通过两种方法实现此操作,其中方法2的速度要快得多(我认为几乎快一倍)。

方法1

Loop over x
  If negative, loop over negative y and compare
  If positive, loop over positive y and compare

方法2

对x进行分区,以便可以轻松确定负数和正数元素的索引。这将方法1从单个循环转换为两个双重嵌套for循环(除分区伪代码中的if语句外,无分支)。

Partition x by sign

Loop over negative x
  Loop over negative y
    Compare x and y

Loop over positive x
  Loop over positive y
    Compare x and y

按符号分区(先负数,后正数):

N = length(x)
j = 1
for (i in 1:N)
  if (x[i] < 0)
    swap(x[i], x[j])    // modify x in place
    j = j + 1

// j will be the index of the first positive element, 
// or N + 1 if all elements were negative.

核心问题

哪些因素会影响分支预测惩罚,使得方法2的速度远快于方法1?

每个分支中的指令数量是否重要?方法2仅包含一个执行元素交换的分支,比方法1中包含循环的分支简单得多;但方法2需要对较长的数组x多做一次遍历以完成分区。


内容的提问来源于stack exchange,提问作者Tyler Sagendorf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 16:03:27