匯編中ldr和str訪問內存速度的問題


我在VxWorks下測試i.mx6開發板內存讀寫速度時,利用ldr和str兩指令,分別測試16MB、64MB、256MB大小的內存塊,測試出的結果總是讀的速度比寫的速度要慢,感覺有問題,讀寫程序不同之處只有上述兩條指令處,注釋掉這兩個指令,則訪問時間是相同的。。。。

9 个解决方案

#1


跟這個沒有關系吧,都是偽指令,編輯器會自動轉換成mov兩條指令,你看下是不是別的原因

#2


讀比寫慢是再正常不過了。讀指令如果未命中緩存,那么指令會停在那,一直等到數據從內存返回才繼續。所以瓶頸在延遲。
而寫指令可以直接把數據丟到緩沖,指令繼續往下走。所以瓶頸在帶寬。

可以多看看處理器微構架的書,我的博客上也有一些說明。

#3


引用 1 樓 qq_21792169 的回復:
跟這個沒有關系吧,都是偽指令,編輯器會自動轉換成mov兩條指令,你看下是不是別的原因


ldr和str在讀寫內存時不是偽指令吧

#4


引用 2 樓 jdygrdzh 的回復:
讀比寫慢是再正常不過了。讀指令如果未命中緩存,那么指令會停在那,一直等到數據從內存返回才繼續。所以瓶頸在延遲。
而寫指令可以直接把數據丟到緩沖,指令繼續往下走。所以瓶頸在帶寬。

可以多看看處理器微構架的書,我的博客上也有一些說明。


但是一般像存儲設備都是讀的比較快啊,並且同樣的程序(ldr和str改為mov)在電腦上試過,卻是讀的比較快,跟網上下載的一些軟件測得的結果相差不是特別大,我在懷疑會不會跟硬件有關。

#5


你說的存儲設備是閃存和硬盤,並且指的是在設備端的延遲。
我和你說的是處理器上的讀寫指令提交。寫指令提交和外設,緩存,內存延遲沒有關系。只有讀指令才受影響,

#6


你讀比寫快的時候,是不是關掉緩存了?有沒有打開cpu計數器做過統計?

#7


當然我也不是說所有的寫都比讀快,這和微構架息息相關。如果深究那需要花很多功夫。如果不想深究,粗略看看可能越看越糊塗。
http://zhuanlan.zhihu.com/datou/20263750

#8


引用 7 樓 jdygrdzh 的回復:
當然我也不是說所有的寫都比讀快,這和微構架息息相關。如果深究那需要花很多功夫。如果不想深究,粗略看看可能越看越糊塗。
http://zhuanlan.zhihu.com/datou/20263750


緩存沒有關閉,我也試過關閉緩存,讀取的時間明顯長了很多,但是還是寫的快。你說的是不是可以這樣理解,由於讀的時候存在緩存命中問題,這就造成了執行該指令的時間會長,但是總時間還包括設備端的操作,這樣總的時間哪個長哪個短就不好說了

#9



這只是一種可能。除了緩存命中,處理器內的數據預取,outstanding stransaction數量,都會有影響。
另外一種可能是,在linux下,讀一個從沒被寫入過的內存,最終會被指向同一個4k頁,從而相當於一直訪問緩存。
而寫會引起分配新的頁。

所以猜測的意義不大,需要具體情況具體分析,而一個好的方法是打開處理器的緩存命中率,指令統計等內置計數器幫助判斷。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: