加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

CRC计算性能分析

发布时间:2020-12-13 22:32:20 所属栏目:Linux 来源:网络整理
导读:测试环境介绍 CPU型号:MPC8548MGHATGB,工作频率为1GHz 相机数据:280Mbps 以10W次CRC计算为例 #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 ) ^ d

测试环境介绍

CPU型号:MPC8548MGHATGB,工作频率为1GHz

相机数据:280Mbps

以10W次CRC计算为例

#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;
}

测试耗时

old_tv tv_sec 4404 tv_usec 74838
tv tv_sec 4409 tv_usec 856335
tv_usec 5781497

优化方式一

编译器优化选项

CFLAGS := -O2

测试耗时

4450 tv_usec 3520774451 tv_usec 4899801137903

优化方式二

去掉指针判断

__u16 gCrc16(__u16 crc,1)">while(len > 0)
   {
      crc = crc_itu_t_byte(crc,1)">4487 tv_usec 7172174488 tv_usec 647959930742

优化方式三

使用inline关键字

inline __u16 gCrc16(__u16 crc,1)"> crc;
}
测试耗时
4603 tv_usec 7985034604 tv_usec 6208207705

CRC采用64K查表法

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;
}

测试耗时

4731 tv_usec 352502807167454665

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读