---
# System prepended metadata

title: 用硬體加速軟體的概念

---

# 用硬體加速軟體的概念

>有些程序非常耗CPU運算，無論CPU怎麼進步，還是永遠覺得不夠快，如影像方面的程式，隨著解析度越來越高，運算量就越來越大，再如資料備份的壓縮解壓縮，當資料量很大時，運算量也是非常大，要改進執行速度，通常會用以下幾種方式著手。

>1.**修改程式碼寫法** : 一些不當的程式寫法，的確會影響速度，如**使用pointer或reference**可加速，卻使用copy的方式。這點好好閱讀Scott Meyers的Effective C++，More Effective C++, Effective STL就可寫出有效率的程式碼。

>2.**演算法的改進**：演算法的好壞對於效率影響很大，這也是最經濟的方式，是純軟體的方法。

>3.**將關鍵部份改用組合語言撰寫**：如某個關鍵程式需要回圈重複執行上萬次，將這段關鍵的程式改用組合語言撰寫，就可加快速度，也是軟體的方法，算是軟體的極限了。

>4.**將關鍵部份改用硬體**：常常聽到用硬體加速軟體，但到底硬體是怎麼加速軟體呢?今天做了Altera DE2 SOPC的實驗，總算知道硬體是怎麼加速軟體了。

>一般CPU都會提供組合語言，讓軟體使用，但DE2上的FPGA晶片，讓我們可以設計自己的組合語言，也就是說，我們可以自己將軟體很耗時很關鍵的部份，用Verilog寫RTL，**自訂一個組合語言指令，然後Load進FPGA，然後用軟體直接call自己建立的組合語言指令**，為什麼這樣比較快呢?本來某些動作，須靠多個組合語言指令才能完成，但現在因為自訂了一個新的組合語言指令，且是為某**特定要求量身訂做的指令**，必定比原本的組合語言指令快，這樣就可以透過硬體的方式來加速軟體了。

硬體加速軟體的流程
1.用verilog寫RTL 做出可以執行自訂指令的硬體
2.自己客製化一個組合語言指令
3.軟體呼叫自己客製化的組合語言指令

所以感覺計組真的滿重要的? 雖然我在組語那邊學的很痛苦QQ

reference:
https://www.cnblogs.com/oomusou/archive/2006/12/08/586527.html