NEON_7

爲什麼要依靠編譯器進行自動矢量化?
編寫經過手動優化的彙編內核或包含Neon內部函數的C代碼,可以對軟件中的Neon代碼進行高度控制。 但是,這些方法可能導致大量的可移植性和工程複雜性成本。

在許多情況下,高質量的編譯器可以生成同樣好的代碼,但是所需的設計時間卻少得多。 允許編譯器自動識別代碼中使用Advanced SIMD指令的機會的過程稱爲自動向量化。

 

在特定的編譯技術方面,自動向量化包括:

循環矢量化:展開循環以減少迭代次數,同時在每個迭代中執行更多操作。
超字級並行(SLP)矢量化:將標量運算捆綁在一起,以使用全寬Advanced SIMD指令。
自動向量化編譯器包括Arm編譯器6,Arm C / C ++編譯器,LLVM-clang和GCC。

 

依靠編譯器自動向量化的好處包括:

只要沒有特定於體系結構的代碼元素(如內聯彙編或內部函數),就可以使用高級語言實現的程序是可移植的。
現代編譯器能夠自動執行高級優化。
以給定的微體系結構爲目標就像設置單個編譯器選項一樣容易,而優化彙編程序則需要對目標硬件有深入的瞭解。

 

使用編譯器生成Neon代碼適合大多數項目。 僅當生成的代碼無法提供必要的性能時,或者高級語言不支持特定的硬件功能時,其他利用Neon的方法纔有必要。 例如,必須在彙編代碼中配置系統寄存器以控制浮點功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章