CANN数据预处理中的尺寸对齐

CANN数据预处理中的对齐,是个比较琐碎的事情,但是在预处理中,又不得不关注,因为对齐是个有约束性的要求,也直接影响到数据存储的内存分配,还是从头说起。
CANN数据预处理,实际上就是 图像/视频数据处理 ,具体内容如下:

image.png

这个列表里的功能可以分为2类:

  1. VPC(缩放/色域转换、抠图等)
  2. 图片编解码(JPEGD/E PNGD) 以及衍生的视频编解码(VDEC/ENC)

而这些功能的使用,以 缩放 为例,流程和主干代码(关键步骤的代码示例) 在文档里都描述的非常清楚。

至于对齐之类的细节,则是在 API参考文档 里有说明。
比如 VPC 功能,输入输出、对齐以及内存大小,这些约束如下:
image.png

image.png

可以看到,对于同样的图片格式,输入和输出的约束是一样的。
并且通过对比可以发现,昇腾310P(2022年将全面推广,最终名称到时见分晓)和之前的昇腾310和910,约束的要求是一样的。

但是,

JPEGD 功能的API参考的话,就会发现有区别了,原来要求是宽stride为128对齐,现在是缩小了颗粒度,要求是64对齐。其他一样。这样对于内存的占用在某些情况下就减少了。

image.png

image.png

最后看一下CANN里的对齐代码,就是通过一个简单的宏定义来实现,这里将代码拿出来方便的看一下某个尺寸是否要对齐:

#include <stdio.h>

#define ALIGN_UP(x, a) ( (((x) + ((a) - 1U)) / (a)) * (a) )

int main(){
        int len,align;
        printf("input an integer to be aligned:");
        scanf("%d",&len);
        printf("input align with:");
        scanf("%d",&align);
        printf("after ALIGN:%d\n", ALIGN_UP(len,align));
}

可以看到高是1080时,按16对齐,是对不齐的,差8。所以对齐操作后是1088

[root@ecs-d589 ~]# ./a.out
input an integer to be aligned:1080
input align with:16
after ALIGN:1088
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值