标签:
杂谈 |
_nassert作用:告知编译器首地址已经边界对齐,可以进行按字运算。比如对于两个16位数据进行运算时,使用_nassert可将其放入一个字(32位)中进行运行,提升了效率
例:求数组的点积(假设pArray_A和pArray_B分配内存时已经按照前述方法进行过字边界对齐),假设arrayLen == 20
(1) 未优化的代码.
int dotProductFun(short *pArray_A, short *pArray_B,int arrayLen)
{
return resultSum;
}
(2) 使用_nassert和#pragma MUST_INTERATE进行优化的代码
int dotProductFun(short *pArray_A, short *pArray_B,int arrayLen)
{
return resultSum;
}
原(1)中的代码经过_nassert和#pragma MUST_INTERATE优化后的代码等效于下面使用的intrinsics函数代码,可见这一下子就节省了一半的循环开销(打包操作)。
int dotProductFun(short *pArray_A, short *pArray_B,int arrayLen)
{
int *A = (int *) pArray_A;
int *B = (int *) pArray_B;
int resultSum_L = 0;
int resultSum_H = 0;
for(i = 0;i < (arrayLen>>1);i )//(arrayLen >> 1)即(arrayLen /2)
{
//取A[i]和B[i]的低16位的乘积并求和
resultSum_L = _mpy(A[i],B[i]);
//取A[i]和B[i]的低高位的乘积并求和
resultSum_H = _mpyh(A[i],B[i]);
}
return (resultSum_L resultSum_H);
额外知识点:
_nassert(((int)(buf) & 0x3) == 0);//表示告知编译器buf为4字节对齐
_nassert(((int)(buf) & 0x7) == 0);//表示告知编译器buf为8字节对齐
===============
大嘴只说最基础、最简单和最通俗易懂的,面向所有人而并非只针对图像专业人士(比如业内的产品经理、市场运营、项目工程人员、公司管理等非图像算法的朋友以及各行业对图像感兴趣的朋友都可以看懂),走的是广度路线,这里只给您指出知识的一个方向,至于深度上,还请大家根据感兴趣的文章多搜集资料,大嘴也在不断学习中。
明确目的:广泛交友、并为大家提供彼此认识的平台,有机会一起项目合作、解决问题,而并非仅文章内容本身。
===============
声明:
本微信公众号(本微博)所发表的内容均为非营利性,不用于任何商业用途。大嘴所发文章中的部分文字及大多数图片均来自互联网,如果您认为大嘴侵犯到了您的版权,请联系大嘴,大嘴会及时删除相关内容。
「大嘴说图像」 内容涵盖计算机图像处理、模式识别、计算机视觉、智能交通、安防等领域的相关知识。其中,既有大嘴的原创,也有大嘴多年来收集和整理的资料。在创作、筛选文章的同时,大嘴也得以再一次巩固、沉淀上述知识。自娱自乐之外,如果能为您打开一扇了解计算机图像处理相关知识的大门,大嘴将不胜荣幸!对本公众号如有任何意见或建议,请直接发微信与大嘴联系。
欢迎关注同名微信公众号"大嘴说图像",头像为微信二维码。
(1)我的新浪微博http://weibo.com/cvchina2dazuiimage
(2)新浪博客http://blog.sina.com.cn/cvchina2dazuiimage
(3)微信公众号“大嘴说图像”
尽可能保证每天至少一篇文章,希望和大家一起努力,并通过网络结识更多的业内朋友和图像爱好者。感谢您对大嘴的支持和信任!
大嘴QQ:2091589652,QQ群:179042731(北京图像视觉技术交友),招募全国各地的业内爱好者以及志同道合的朋友中!本QQ群宗旨:图形学/图像处理/机器视觉/模式识别行业爱好者交流、交友及聚会。