取整和内存对齐

举报
黄生 发表于 2026/05/17 21:47:53 2026/05/17
【摘要】 算子开发里经常会看到这些类似的代码。向上取整uint32_t coreNum = (totalElements + ubFormer - 1) / ubFormer;向下取整// 直接整数除法(C++中整数除法自动向下取整)uint32_t coreNum = totalElements / ubFormer;示例对比,假设 totalElements = 10, ubFormer = 3:...

算子开发里经常会看到这些类似的代码。

向上取整

uint32_t coreNum = (totalElements + ubFormer - 1) / ubFormer;

向下取整

// 直接整数除法(C++中整数除法自动向下取整)
uint32_t coreNum = totalElements / ubFormer;

示例对比,假设 totalElements = 10, ubFormer = 3

  • 向上取整(10+3-1)/3 = 12/3 = 4(需要4核)
  • 向下取整10/3 = 3(只需要3核,但最后余数未处理)

ubFormer 是每个核处理的数据量,向下取整意味着可能有些核完全空闲或未充分利用,通常切分时用向上取整更合理。

内存对齐:向下取整到对齐因子的整数倍,将 maxElemNum 向下对齐alignFactor 的整数倍。

ubFormer = (maxElemNum / alignFactor) * alignFactor;

假设 alignFactor = 32(常见的向量化对齐单位):

maxElemNum 计算过程 结果
100 (100 / 32) * 32 = 3 * 32 = 96 向下对齐到96
128 (128 / 32) * 32 = 4 * 32 = 128 正好对齐
129 (129 / 32) * 32 = 4 * 32 = 128 向下对齐到128
31 (31 / 32) * 32 = 0 * 32 = 0 对齐到0(需处理)

当然,也可以向上对齐。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。