核间切分

需要核心数 = CeilDiv(总长度, 每个核心目标处理x个) 使用核心数 = min(需要核心数, 实际物理核数) 每个核心处理的个数 = CeilDiv(总长度, 使用核心数) 尾核处理的个数 = 总长度 - 每个核心处理的个数 * (使用核心数 - 1)

核内切分

一次L0能装多少个 = FloorDiv(L0级缓存大小, 元素大小) 正常核心循环次数 = CeilDiv(核心处理的个数, 一次L0能装多少个) 最后一次要处理的个数 = 核心处理的个数 - 一次L0能装多少个 * (正常核心循环次数 - 1) 尾核心循环次数和尾核心最后一次处理个数同理

基础对齐运算

  • CeilDiv(a, b) = (a + b - 1) / b:向上整除
  • FloorDiv(a, b) = a / b:向下整除
  • CeilAlign(a, b) = CeilDiv(a, b) * b:向上对齐
  • FloorAlign(a, b) = FloorDiv(a, b) * b:向下对齐