2013-07-11 41 views
1

我正在使用包含i.MX6 ARM處理器的Wandboard-Quad。這個處理器有一個我想要使用的FPU。在我做之前,我想測試我會得到多少改善。我有一個基準算法,並嘗試過沒有優化,並與-mfpu = vfp,似乎沒有改善 - 我得到改進優化= 3.在ARM處理器上測試FPU

我使用arm-linux-gnueabi庫 - 關於什麼是不正確的,以及如何判斷我是否在使用FPU?

謝謝, 亞當

+0

可能是默認情況下采用vfp支持。檢查工具鏈構建選項'gcc -v'。關於優化寫的東西也是如此,但可能只是您的基準很差。 – auselen

回答

1

看具有-S標誌彙編輸出和查看是否有被生成的任何FPU的指令。這可能是最簡單的事情。

除此之外,您的算法有可能使用的浮點很少,以至於通過加載和卸載FPU寄存器來屏蔽任何用途。在這種情況下,在代碼的其他部分進行O3優化會顯示您獲得單獨的FPU使用情況。

1

-mfpu選項僅在GCC執行矢量化時有效。向量化本身需要合理的優化級別(最低爲-O2-ftree-vectorize選項開啓)。因此,請嘗試-O3 -ftree-vectorize -mfpu=vfp以利用FPU並根據簡單的-O3級別測量差異。

另請參閱ARM GCC docs適用於可能需要-funsafe-math-optimizations的情況。

0

沒有任何優化,GCC的輸出效率太低,以至於您實際上可能無法測量軟件和硬件浮點之間的差異。

要查看FPU添加的好處,您需要使用一致的優化級別進行測試,然後使用-msoft-float-mhard-float

這將強制編譯器針對不同的庫進行鏈接,並對浮點操作進行函數調用,而不是使用本機指令。底層庫仍然有可能使用硬件浮點,但我不會擔心太多。

您可以使用-mfpu=來選擇不同的FP指令集。對於i.MX6,我認爲你需要-mfpu=neon,因爲它應該啓用所有適用的浮點指令(不僅僅是NEON指令)。