測驗環境介紹
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 - 1; } return crc; }
測驗耗時
old_tv tv_sec 4404 tv_usec 74838 tv tv_sec 4409 tv_usec 856335 tv_usec 5781497
優化方式一
編譯器優化選項
CFLAGS := -O2
測驗耗時
old_tv tv_sec 4450 tv_usec 352077 tv tv_sec 4451 tv_usec 489980 tv_usec 1137903
優化方式二
去掉指標判斷
__u16 gCrc16(__u16 crc, const __u8 *buffer, __u32 len) { while(len > 0) { crc = crc_itu_t_byte(crc, *buffer); buffer = buffer + 1; len = len - 1; } return crc; }
測驗耗時
old_tv tv_sec 4487 tv_usec 717217 tv tv_sec 4488 tv_usec 647959 tv_usec 930742
優化方式三
使用inline關鍵字
inline __u16 gCrc16(__u16 crc, const __u8 *buffer, __u32 len) { while(len > 0) { crc = crc_itu_t_byte(crc, *buffer); buffer = buffer + 1; len = len - 1; } return crc; }測驗耗時
old_tv tv_sec 4603 tv_usec 798503 tv tv_sec 4604 tv_usec 6208 tv_usec 207705
CRC采用64K查表法
WORD LibCrc16_2(const BYTE *pbyData, DWORD dwSize) { WORD wCRC = 0x0000; DWORD dwIndex; WORD wValue; DWORD dwLen = (dwSize >> 1) << 1; for(dwIndex = 0; dwIndex < dwLen; dwIndex += 2) { wValue = pbyData[dwIndex] << 8 | pbyData[dwIndex + 1]; wCRC = g_wLibCrc16_2_Table[wCRC ^ wValue]; } dwLen = dwSize % 2; if(dwLen == 1) { wCRC = (wCRC << 8) ^ g_wLibCrc16Table[((wCRC >> 8) & 0xff) ^ pbyData[dwSize - 1]]; } return wCRC; }
測驗耗時
old_tv tv_sec 4731 tv_usec 352502 tv tv_sec 4731 tv_usec 807167 tv_usec 454665
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/142612.html
標籤:嵌入式
上一篇:CRC計算性能分析
