0%

Core Bound

概念

Core Bound 指 CPU 核心计算能力受限。包括两种:

  1. 硬件的计算资源不足(吞吐量受限)
  • port 冲突:例如 Intel Skylake 架构上,除法和平方根运算都会被分配到 port 0 上,如果大量的类似耗时操
    作排队,那么就会体现为硬件算力的限制。

Port 指的是 CPU 内部的 执行端口(execution ports)。

现代 CPU(尤其是 Intel、AMD 的 x86-64 架构)采用 超标量、乱序执行,有多个功能单元可以并行执行不同
类型的指令。

每个功能单元挂在一个 端口 (port) 上,负责特定类型的操作,比如:

  • 整数运算端口(加减、逻辑运算)
  • 浮点运算端口(乘法、除法、加法)
  • 加载端口(从内存读取数据)
  • 存储端口(写数据到内存)

CPU 的调度器会把指令分配到合适的端口执行。

如果某类端口资源不足,就会出现 port bound(端口受限),性能瓶颈来自于某个端口的拥塞。

👉 举例: Intel Skylake 架构有 8 个端口:

  • Port 0/1:整数和浮点运算
  • Port 2/3:加载(Load)
  • Port 4:存储地址计算
  • Port 5:存储数据
  • Port 6:分支预测
  • Port 7:整数运算
  1. 指令间的依赖(增加延迟)

例如链表的遍历,CPU 无法对其并行。

1
2
3
while (n) {
n = n->next;
}

优化方法

第 1 种计算能力受限的问题,最好的办法是升级 CPU,换成具有更多除数的型号,或者将计算任务卸载到加速器
上。

第 2 种数据依赖链的问题,可能需要重写算法。下面介绍一些有名的优化方法:

  1. 向量化
  2. 函数 inline 化
  3. 循环转换
  4. 编译器内建函数
  5. 其他

目的是减少执行的指令或用更好的汇编指令替代。