新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > FAE講堂:如何加快處理器的正弦計算

FAE講堂:如何加快處理器的正弦計算

作者: 時間:2011-05-06 來源:電子產(chǎn)品世界 收藏

 

本文引用地址:http://butianyuan.cn/article/119301.htm

  圖 2 — d 值的正弦與余弦表,范圍介于0到360/16度之間

  實際上, 我們在每個表格中都使用了1 , 0 2 4 個值。X的最小值為360/1024=0.3515625 度。d 的所有值都將小于等于該值。該方法可以減少存儲的占用,因為完整的查找表需要 4,096個條目(每條目 4 個字節(jié))。

  使用這種方案,我們能夠?qū)崿F(xiàn)的自變量總體精度為:

  360/(1024*1024) = 0,000343 degree

  而且這個精度非常好。計算充分利用了MicroBlaze FPU。

  真正的計算會占用一些時鐘周期,具體來說,需要進行兩次fmul運算和一次fadd運算。不過,我們還需要進行一些其它計算。首先,我們必須把自變量 xi拆分成兩個值,對應(yīng)x和d;然后,我們將這兩個值從表格中讀出;最后,我們必須使用新的算法才能計算結(jié)果。

  我們在軟件中實現(xiàn)算法并對其進行測試時,我們耗用的時鐘周期總數(shù)為6,520個。

  為了進一步提高分辨率,我們可以使用下列的象限關(guān)系:

  第一象限

  sin(x) = sin(x)

  第二象限

  sin(x) = sin(π - x)

  第三象限

  sin(x) = -sin(π + x)

  第四象限:

  sin(x) = -sin(2* π - x)

  這在保持表格大小不變的同時還可將總體分辨率提高4倍。另一方面,我們需要進行更多的計算才能找出我們必須進行計算的象限是哪一個。仍然需要改進算法或縮小表格的大小(縮小四分之幾)。我們還沒有進行到這一步。

  步驟三:優(yōu)化算法

  由于我們的解決方案到目前為止,速度還不能滿足我們客戶的需要,因而我們需要稍做算法優(yōu)化,不過仍然完全采用運行在 MicroBlaze 上的軟件。這是一種簡單的優(yōu)化方案,不過會降低部分精度。因此,我們創(chuàng)建了軟件模型(在PC上運行以提升運行速度)以運行所有可能的值,同時使用 sin()計算出的原始雙精度值與使用我們的軟件算法計算出的正弦值進行比較。我們決定在標(biāo)準(zhǔn)的PC上運行算法,因為在MicroBlaze上進行比較和計算需要花較長的時間(注意,我們的MicroBlaze運行速度遠(yuǎn)低于PC)。

  現(xiàn)在我們開始優(yōu)化計算以獲得正弦值:

  sin(x+d) = sin(x)*cos(d) +cos(x)*sin(d)

  由于在每個表格中我們都使用了1,024個值,這意味著d始終小于360度/1,024個步進,即:

  cos(2* π /1024) = 0.99998

  而且該值約等于1.0。對較小的d值,適用下列等式:

  cos(d) = ~1.0

  這樣可以將我們的公式簡化為如下等式:

  sin(x+d) = sin(x) + cos(x)*sin(d)

  在我們在MicroBlaze上實現(xiàn)新等式之前,我們使用PC模式對新等式的精度進行了檢驗,發(fā)現(xiàn)最大誤差仍然低于我們客戶的目標(biāo)。

  現(xiàn)在我們將該算法當(dāng)作軟件算法在MicroBlaze上實現(xiàn),仍然使用每張帶有1,024個條目的表。新的算法只需要三個表,比之前的實現(xiàn)方案少一個。這樣既節(jié)省了存儲空間,也為更多的計算留出了時間。

  我們在我們的硬件上測量了算法。一次正弦計算需要6,180個周期。

  步驟四:進一步優(yōu)化

  另一種看似可行的優(yōu)化方式是轉(zhuǎn)換正弦計算的浮點值,并在此使用整數(shù)自變量。我們使用的算法使我們能夠創(chuàng)建~1E6 個不同的值 (1,024*1,024)。整數(shù)自變量足以處理這個數(shù)量的值。

  這種優(yōu)化方式使我們能夠使用簡單得多的計算來將 xi 值拆分為 x 和 d。拆分只是一種簡單的“與”運算加上部分10 位的移位。我們參數(shù)角的上10位是xi,下10位是 d。

  我們再次在PC上創(chuàng)建了一個軟件模型,并對其進行檢驗,然后在MicroBlaze系統(tǒng)上實現(xiàn)模型,這需要5,460個周期才能完成一次正弦計算。

  步驟五:考慮硬件實現(xiàn)

  雖然與數(shù)學(xué)庫的原始計算相比,算法的速度有了明顯的改善,但客戶需要的是速度快得多的實現(xiàn)。不過前文所述的最后一步給我們提供了一種能夠輕松轉(zhuǎn)向硬件實現(xiàn)的方法。

  這種實現(xiàn)方法需要某些用于拆分 xi值的運算。要在硬件中做到這一點,只需將所需的位進行連接即可。然后我們需要三個表;我們使用以我們的PC模型計算出的預(yù)定義值推導(dǎo)出ROM,然后將其轉(zhuǎn)入IP的VHDL代碼中。該IP能夠一次讀取所有三個表,從而能夠再度節(jié)省時間。最后,我們需要進行一次浮點MUL和一次浮點ADD運算。

  對于該任務(wù),我們發(fā)現(xiàn)用于浮點運算的CORE GeneratorTM模塊非常適合。

  

 

  圖 3 — 無流水線功能的加速器 IP



關(guān)鍵詞: Xilinx 處理器 FAE

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉