從模型到部署,FPGA該怎樣加速廣告推薦算法?

darva叫西林


首先,利用傳統的軟件技巧來優化算法,然後將其轉向定製指令以加速算法。我們將討論不同實現方法的性能比較和折衷。CRC算法可用來校驗數據在傳輸過程中是否被破壞。這些算法很流行,因為它們具有很高的檢錯率,而且不會對數據吞吐量造成太大影響,因為CRC校驗位被添加進數據信息中。但是,CRC算法比一些簡單的校驗和算法有更大的計算量要求。儘管如此,檢錯率的提高使得這種算法值得去實施。一般說來,發送端對要被髮送的消息執行CRC算法,並將CRC結果添加進該消息中。消息的接收端對包括CRC結果在內的消息執行同樣的CRC操作。如果接收端的結果與發送端的不同,這說明數據被破壞了。CRC算法是一種密集的數學運算,涉及到二元模數除法(modulo-2 division),即數據消息被16或32位多項式(取決於所用CRC標準)除所得的餘數。這種操作一般通過異或和移位的迭代過程來實現,當採用16位多項式時,這相當於每數據字節要執行數百條指令。如果發送數百個字節,計算量就會高達數萬條指令。因此,任何優化都會大幅提高吞吐量。代碼列表1中的CRC函數有兩個自變量(消息指針和消息中的字節數),它可返回所計算的CRC值(餘數)。儘管該函數的自變量是一些字節,但計算要逐位來執行。該算法並不高效,因為所有操作(與、移位、異或和循環控制)都必須逐位地執行。列表1:逐位執行的CRC算法C代碼。/** The width of the CRC calculation and result.* Modify the typedef for a 16 or 32-bit CRC standard.*/typedef unsigned char crc;#define WIDTH (8 * sizeof(crc))#define TOPBIT (1 0; "bit){/** Try to divide the current data bit.*/if (remainder & TOPBIT){remainder = (remainder 0; "bit){/** Try to divide the current data bit.*/if (remainder & TOPBIT){remainder = (remainder > (WIDTH - 8));remainder = crcTable[data] ^ (remainder


分享到:


相關文章: