找回密码
 立即注册
查看: 469|回复: 0

乘除法运算比移位操作速度还快?

[复制链接]
  • TA的每日心情
    开心
    2024-4-29 09:18
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    8

    主题

    14

    回帖

    156

    积分

    注册会员

    积分
    156
    发表于 2023-10-22 12:14:49 | 显示全部楼层 |阅读模式
    在8位机中,对于部分乘除法是转换成移位操作来进行的,这样速度会快点。但对于32位的数据来说,移位操作依然比较慢。不过对于有MDU的STC8H和STC32系列芯片就不同了。可以使用MDU来计算移位或是使用乘除法替代移位操作,速度非常快啊,谁用谁知道。
    使用STC32F12K54芯片测试,频率使用24Mhz。
    使用移位操作计算CRC32操作,2K数据大概160ms。
    1. uint32_t crc32b(unsigned char code * addr, uint16_t l)
    2. {
    3.     uint16_t i, j;
    4.     uint32_t crc, msb;
    5.     uint32_t message;
    6.     crc = 0xFFFFFFFF;
    7.     for(i = 0; i < l; i++)
    8.     {
    9.         // xor next byte to upper bits of crc
    10.         message = addr[i];
    11.         crc ^= ((message)<<24);
    12.         for (j = 0; j < 8; j++)
    13.         {    // Do eight times.
    14.             msb = crc>>31;
    15.             crc <<= 1;
    16.             crc ^= (0 - msb) & 0x04C11DB7;
    17.         }
    18.     }
    19.     return crc;
    20. }
    复制代码

    使用STC32_MDU32_LARGE_V1.1库后,
    1. uint32_t crc32b(unsigned char code * addr, uint16_t l)
    2. {
    3.     uint16_t i, j;
    4.     uint32_t crc, msb;
    5.     uint32_t message;
    6.     crc = 0xFFFFFFFF;
    7.     for(i = 0; i < l; i++)
    8.     {
    9.         // xor next byte to upper bits of crc
    10.         message = addr[i];
    11.         crc ^= (message * 0x01000000);
    12.         for (j = 0; j < 8; j++)
    13.         {    // Do eight times.
    14.             msb = (crc / 0x80000000);
    15.             crc = crc * 2;
    16.             crc ^= (0 - msb) & 0x04C11DB7;
    17.         }
    18.     }
    19.     return crc;
    20. }
    复制代码

    同样的操作只要40ms,只有之前的1/4啊。另外不适用MDU,依然使用乘除法的话则需要288ms。
    所以对于32位的移位操作,在使用MDU的情况下,改成乘除法也是不错的选择。
    回复 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-16 08:31 , Processed in 0.058238 second(s), 28 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表