CANN数据预处理中的尺寸对齐
【摘要】 CANN数据预处理中的对齐,是个比较琐碎的事情,但是在预处理中,又不得不关注,因为对齐是个有约束性的要求,也直接影响到数据存储的内存分配,还是从头说起。CANN数据预处理,实际上就是 图像/视频数据处理 ,具体内容如下:这个列表里的功能可以分为2类:VPC(缩放/色域转换、抠图等)图片编解码(JPEGD/E PNGD) 以及衍生的视频编解码(VDEC/ENC)而这些功能的使用,以 缩放 为例...
CANN数据预处理中的对齐,是个比较琐碎的事情,但是在预处理中,又不得不关注,因为对齐是个有约束性的要求,也直接影响到数据存储的内存分配,还是从头说起。
CANN数据预处理,实际上就是 图像/视频数据处理 ,具体内容如下:
这个列表里的功能可以分为2类:
- VPC(缩放/色域转换、抠图等)
- 图片编解码(JPEGD/E PNGD) 以及衍生的视频编解码(VDEC/ENC)
而这些功能的使用,以 缩放 为例,流程和主干代码(关键步骤的代码示例) 在文档里都描述的非常清楚。
至于对齐之类的细节,则是在 API参考文档 里有说明。
比如 VPC 功能,输入输出、对齐以及内存大小,这些约束如下:
可以看到,对于同样的图片格式,输入和输出的约束是一样的。
但是,
看 JPEGD 功能的API参考的话,就会发现有区别了,原来要求是宽stride为128对齐,现在是缩小了颗粒度,要求是64对齐。其他一样。这样对于内存的占用在某些情况下就减少了。
最后看一下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
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)