簡體   English   中英

關於ARM的預取指令

[英]Prefetch instructions on ARM

較新的ARM處理器包括PLD和PLI指令。

我正在編寫緊密的內部循環(在C ++中),它具有非順序的內存訪問模式,但是我的代碼完全理解的模式。 如果我可以在處理當前內存位置的同時預取下一個位置,我預計會有大幅加速,我希望這很快就足以嘗試值得實驗!

我正在使用來自ARM的新的昂貴的編譯器,它似乎沒有在任何地方包含PLD指令,更不用說在我關心的這個特定循環中了。

如何在C ++代碼中包含顯式預取指令?

應該有一些編譯器特有的功能。 C / C ++沒有標准的方法。 看看編譯器編譯器參考指南。 對於RealView編譯器,請參閱

如果您試圖從這些循環中提取真正的最大性能,那么我建議在匯編程序中編寫整個循環結構。 您應該能夠使用內聯匯編,具體取決於循環中涉及的數據結構。 如果你可以展開任何一個循環(比如使訪問非順序訪問所涉及的部分),那就更好了。

冒着明顯的問題:你有沒有驗證過編譯器的目標架構? 例如(幽默我),如果默認編譯器是針對ARM7的,那么你永遠不會看到PLD指令。

軟件流水線循環展開之類的其他優化可能會達到與預取想法相同的效果(通過將負載與有用計算重疊來隱藏負載的延遲),但不會產生額外的指令緩存壓力。通過額外的指示。 我甚至會說這種情況經常發生,因為緊密的內環往往只有很少的指令和很少的控制流。 您的編譯器是否正在執行這些類型的傳統優化。 如果是這樣,可能值得查看管道圖,以開發更詳細的成本模型,了解處理器的工作方式,並更加定量地評估預取是否有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM