這是筆者去年某個時間節點的感悟,由于工作繁忙,寫完后擱置一邊了。而對于“設計最優化”這個議題,筆者也一直深感功力不夠,不敢多做闡釋。但是,不管怎樣,若能每隔幾年都好好做些反思回顧,讓自己對“設計最優化”的認知再做一些提升,也算是給當下的自己一個“設計最優化”吧。基于此,把去年的文章略作梳理,分享給大家。
之所以想寫點什么,是基于近期的一些工作觸動。兩年前,由于公司人力資源的需要,筆者從當時基本穩定的FPGA設計中抽出身來,大部分的精力投入到了產品的算法開發中。而在那個當兒,正好做了一個算法的FPGA實現評估,整個設計,包括代碼、仿真基本做完了。在當時,目標是用有限的FPGA資源實現一個復雜的圖像處理算法,可以說是絞盡腦汁做了很多實際的FPGA設計優化。
時過境遷,經過兩年算法的學習研究和工程實踐后,基于系統最優化的一些考慮,又重新回到原點,需要再次評估和實現當年那個圖像處理算法的FPGA版本。而當重新審查當年的那些設計代碼時,忽然感受到當時一些設計細節做得尤為精妙,雖然大多數方法其實是一些經典的通用的優化方法——用加法和流水線設計減少乘法器數量;用移位比較以及流水線的方式定制化一個資源占用率極低的除法器;用查找表實現指數運算;甚至嘗試過自己實現開根號的邏輯源碼……當然,我并不是覺得這些設計已經登峰造極,做到設計最佳了。反而,讓我重新思考FPGA的設計最優化問題。做算法的經歷,讓我感受到了CPU的強大算力;但是一些實時應用場景下,又讓我感受到了CPU在面對一個復雜和大計算量的算法時的力不從心。做FPGA的經歷,讓我即便是在寫著跑在CPU上的代碼,也處心積慮的考慮速度性能問題——能用加法或移位就絕不用乘法、能用乘法就絕不用除法、能查表的就絕不直接進行指數或根號等復雜的運算……總而言之,不做一次多余的或不必要的復雜的運算。
對于FPGA的工程實現而言,設計本身并沒有絕對的最優化。對于一些沒有實用性要求的研究或評估,對于FPGA的器件資源、實時的速度性能或許不會太在意。但是對于必須產品化的工程實現來說,目標通常是在FPGA器件的資源有限制、吞吐量有要求的情況下完成既定功能。FPGA的資源,通常包括FPGA內部的邏輯資源、乘法器資源、片內存儲器資源、布局布線資源以及其它諸如時鐘、高速接口等專用資源。FPGA的數據吞吐量,通常表現為FPGA在單位時間內的平均處理能力或瞬時最大處理能力,這可能涉及FPGA片內或片外存儲器的讀寫訪問速度、滿足必須的并行運算處理所需的資源可用性、達到設計目標的最低FPGA時鐘頻率的時序性能等。
由此看來,FPGA的設計最優化,并不意味著最高的絕對精度、最快的處理速度或最大的數據吞吐量,也不意味著最高的資源利用率或最低的實現資源……純粹的研究或評估,或許可以只關注某一方面的最佳性能;但對于FPGA的產品實現而言,在眾多的限制條件下,各方面性能達到一個動態平衡,讓我們的目標FPGA器件物盡其用,或許才是我們這些務實的工程師所追求的“最優化設計”。
責任編輯:彭菁
-
FPGA設計
+關注
關注
9文章
428瀏覽量
26553 -
存儲器
+關注
關注
38文章
7514瀏覽量
163997 -
圖像處理
+關注
關注
27文章
1295瀏覽量
56803
原文標題:設計最優化
文章出處:【微信號:FPGA快樂學習,微信公眾號:FPGA快樂學習】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論