c – 如何优化循环?
发布时间:2020-12-16 03:34:11 所属栏目:百科 来源:网络整理
导读:我有以下瓶颈功能. typedef unsigned char byte;void CompareArrays(const byte * p1Start,const byte * p1End,const byte * p2,byte * p3){ const byte b1 = 128-30; const byte b2 = 128+30; for (const byte * p1 = p1Start; p1 != p1End; ++p1,++p2,++p3
我有以下瓶颈功能.
typedef unsigned char byte; void CompareArrays(const byte * p1Start,const byte * p1End,const byte * p2,byte * p3) { const byte b1 = 128-30; const byte b2 = 128+30; for (const byte * p1 = p1Start; p1 != p1End; ++p1,++p2,++p3) { *p3 = (*p1 < *p2 ) ? b1 : b2; } } 我想用SSE2内部函数替换C代码.我尝试了_mm_cmpgt_epi8,但它使用了签名比较.我需要无符号比较. 是否有任何技巧(SSE,SSE2,SSSE3)来解决我的问题? 注意: 解决方法
而不是抵消您的签名值以使其无符号,更有效的方法是执行以下操作:
>使用_mm_min_epu8获取p1,p2的无符号最小值 请注意,这是总共4条指令,而使用偏移符号比较方法则为5条指令. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |