龙芯LoongArch指令集计算CRC32的速度是MIPS的4倍以上

本文介绍了龙芯LoongArch指令集在计算CRC32时的显著性能提升,相比于MIPS,LoongArch的CRC32计算速度达到4倍以上。即使不使用专用指令,LoongArch的C/C++代码编译后性能也比MIPS快20%。文章通过对比编译后的指令数量和实际测试,展示了LoongArch指令集的优势,并探讨了如何通过优化汇编代码进一步提高CRC32编码速度。
摘要由CSDN通过智能技术生成

        相信凡是与编程或通信相关的技术人员都知道CRC32,这是一种常用的数据校验编码。因为CRC32编码的算法很简单,所以用于计算CRC32值的C/C++代码写法基本上固定,很难有优化的余地。通常大家都通过手写汇编,调用特定指令集用于CRC32计算的专用指令来达到计算加速的目的。龙芯以前使用的MIPS以及龙芯自己的扩展指令中都没有CRC32计算指令,现在全新的LoongArch指令集中提供了计算CRC32的专用指令,使计算CRC32的速度达到原来的4倍以上。

        使用专用指令达到提速的目的其实没什么可说的,但如果不使用专用指令,而仅仅是把C/C++代码编译为LoongArch的二进制,就能比MIPS快20%以上呢?是不是就比较有意思了!

        下面是一段计算CRC32值的C程序,大多数计算CRC32的代码都应该和它相似。函数CrcGenerateTable用于初始化计算多项式表,只需要调用一次。函数CrcUpdate用于计算数据的CRC32值,只有短短的几行。

#include "stdlib.h"
#include "stdio.h"
#include "time.h"
typedef unsigned char Byte;
typedef unsigned int UInt32;
typedef unsigned long long UInt64;
#define kCrcPoly 0xEDB88320
#define CRC_INIT_VAL 0xFFFFFFFF
UInt32 g_CrcTable[256];

void CrcGenerateTable()
{
    UInt32 i;
    for (i = 0; i < 2
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值