大佬教程收集整理的这篇文章主要介绍了CRC计算性能分析,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
测试环境介绍@H_772_17@
cpu型号:MPC8548MGHATGB,工作频率为1GHz@H_772_17@
相机数据:280Mbps@H_772_17@
以10W次CRC计算为例@H_772_17@
#define COUNT 100000 #define SIZE 1024
__u16 crc_itu_T_Byte(__u16 crc,const __u8 data) { return (crc << 8) ^ crc_itu_t_table[((crc >> 8) ^ data) & 0xff]; } __u16 gCrc16(__u16 crc,const __u8 *buffer,__u32 len) { while((len > 0) && (buffer != NULL)) { crc = crc_itu_T_Byte(crc,*buffer); buffer = buffer + 1; len = len - ; } return crc; }
测试耗时@H_772_17@
old_tv tv_sec 4404 tv_usec 74838 tv tv_sec 4409 tv_usec 856335 tv_usec 5781497
优化方式一@H_772_17@
编译器优化选项@H_772_17@
CFLAGS := -O2
测试耗时@H_772_17@
优化方式二@H_772_17@
去掉指针判断@H_772_17@
__u16 gCrc16(__u16 crc,1)">while(len > 0) { crc = crc_itu_T_Byte(crc,1)">4487 tv_usec 7172174488 tv_usec 647959930742
优化方式三@H_772_17@
使用inline关键字@H_772_17@
inline __u16 gCrc16(__u16 crc,1)"> crc; }
CRC采用64K查表法@H_772_17@
WORD LibCrc16_2(const BYTE *pbyData,DWORD dwSizE) { WORD wCRC = 0x0000; DWORD dwIndex; WORD wValue; DWORD dwLen = (dwSize >> 1) << ; for(dwIndex = 0; dwIndex < dwLen; dwIndex += 2) { wValue = pbyData[dwIndex] << 8 | pbyData[dwIndex + ]; wCRC = g_wLibCrc16_2_Table[wCRC ^ wValue]; } dwLen = dwSize % if(dwLen == ) { wCRC = (wCRC << 8) ^ g_wLibCrc16Table[((wCRC >> 8) & 0xff) ^ pbyData[dwSize - ]]; } wCRc; }
测试耗时@H_772_17@
以上是大佬教程为你收集整理的CRC计算性能分析全部内容,希望文章能够帮你解决CRC计算性能分析所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。