出於低功耗、封裝限制等種種原因,之前的一些arm架構處理器因為內部資源寶貴,加入浮點運算單元是十分奢侈的,因為需要額外的軟體實現。隨著技術發展,目前高階的arm處理器已經具備了硬體執行浮點操作的能力。這樣新舊兩種架構之間的差異,就產生了兩個不同的嵌入式應用程式二進位制介面(eabi)——軟浮點與向量浮點(vfp)。但是軟浮點(soft float)和硬浮點(hard float)之間有向前相容卻沒有向後相容的能力,也就是軟浮點的二進位制介面(eabi)仍然可以用於當前的高階arm處理器。
在arm體系架構核心中,有些有浮點運算單元(fpu),有些沒有。對於沒有fpu核心,是不能使用armel和armhf的。在有fpu的情況下,就可以通過gcc的選項-mfloat-abi來指定使用哪種,有如下三種值:
使用softfp模式,會存在不必要的浮點到整數、整數到浮點的轉換。而使用hard模式,在每次浮點相關函式呼叫時,平均能節省20個cpu週期。對arm這樣每個週期都很重要的體系結構來說,這樣的提公升無疑是巨大的。
在完全不改變原始碼和配置的情況下,在一些應用程式上,雖然armhf比armel硬體要求(確切的是指fpu硬體)高一點,但是armhf能得到20-25%的效能提公升。對一些嚴重依賴於浮點運算的程式,更是可以達到300%的效能提公升。
之前eabi中,armel(低端arm硬體,支援armv4以上版本),在執行浮點運算之前,浮點引數必須首先通過整數暫存器,然後傳遞到浮點運算單元。新的eabi ,也就是armhf,通過直接傳遞引數到浮點暫存器優化了浮點運算的呼叫約定。
相比我們熟悉的armel,armhf代表了另一種不相容的二進位制標準。在一些社群的支援下,armhf目前已經得到了很大的發展。像ubuntu,已經計畫在之後的發行版中放棄armel,轉而支援armhf編譯的版本。正如目前依然很火熱的raspberry pi(arm11),由於ubuntu只支援armv7架構的編譯,raspberry pi將不能直接安裝ubuntu系統。而bb black(cortex-a8)和cubietruct(cortex-a7)則同時支援ubuntu的armel與armhf的編譯。
以上就是armel與armhf的比較。相信大家也應該有個大概的了解了。在ubuntu系統下,如何根據需求分別實現兩種交叉編譯器的安裝呢?
sudo apt-get install gcc-arm-linux-gnueabi兩種方法,
然後就是解壓到自定義目錄中,並新增bin環境變數。
armhf的開啟需要硬體的支援,在debian的wiki上要求armv7 cpu、thumb-2指令集以及vfp3d16浮點處理器。
在gcc的編譯引數上,使用-mfloat-abi=hard -mfpu=vfp即可。
在工具上,codesourcery最早支援hard模式。或者,也可已自己編譯工具鏈。
冒泡和選擇排序的區別
冒泡和快速排序的區別在於 冒泡演算法,每次比較如果發現較小的元素在後面,就交換兩個相鄰的元素。將待排序的元素看作是豎著排列的 氣泡 較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確...
氣泡排序和選擇排序區別
氣泡排序法 相鄰元素兩兩比較,大的往後放,第一次完畢,最大值出現在了最大索引處 分析 第一次比較排序的結果 會把其中最大的資料排到最大的索引處 第二次比較排序後的結果 因為第一次已經把最大的乙個資料放到了最大的索引的地方,所以這次要進行比較的資料比陣列裡面的元素的資料個數 1個,而第二大的資料也會排...
氣泡排序和選擇排序區別
原理上 冒泡是兩兩相鄰的比較,遇到最大的就交換,把最大的沉到後面。選擇排序是假設第乙個為最小,然後不斷和後面的進行比較,遇到更小的就交換位置,把最小的換到前面。author zzk coding utf 8 氣泡排序 data set 9,1,22,31,45,3,6,2,11 for i in r...