Linux   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了CRC计算性能分析大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

测试环境介绍CPU型号:MPC8548MGHATGB,工作频率为1GHz相机数据:280Mbps以10W次CRC计算为例#define COUNT 100000#define SIZE 1024原始计

测试环境介绍@H_772_17@

cpu型号:MPC8548MGHATGB,工作频率为1GHz@H_772_17@

相机数据:280Mbps@H_772_17@

以10W次CRC计算为例@H_772_17@

#define COUNT 100000
#define SIZE 1024

原始计算方法@H_772_17@

__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@

4450 tv_usec 3520774451 tv_usec 4899801137903

优化方式二@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;
}
测试耗时
4603 tv_usec 7985034604 tv_usec 6208207705

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@

4731 tv_usec 352502807167454665
@H_616_221@

大佬总结

以上是大佬教程为你收集整理的CRC计算性能分析全部内容,希望文章能够帮你解决CRC计算性能分析所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: