汇编中ldr和str访问内存速度的问题

ainolike 2016-02-24 10:14:36
我在VxWorks下测试i.mx6开发板内存读写速度时,利用ldr和str两指令,分别测试16MB、64MB、256MB大小的内存块,测试出的结果总是读的速度比写的速度要慢,感觉有问题,读写程序不同之处只有上述两条指令处,注释掉这两个指令,则访问时间是相同的。。。。
...全文
397 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdygrdzh 2016-02-26
  • 打赏
  • 举报
回复
这只是一种可能。除了缓存命中,处理器内的数据预取,outstanding stransaction数量,都会有影响。 另外一种可能是,在linux下,读一个从没被写入过的内存,最终会被指向同一个4k页,从而相当于一直访问缓存。 而写会引起分配新的页。 所以猜测的意义不大,需要具体情况具体分析,而一个好的方法是打开处理器的缓存命中率,指令统计等内置计数器帮助判断。
ainolike 2016-02-26
  • 打赏
  • 举报
回复
引用 7 楼 jdygrdzh 的回复:
当然我也不是说所有的写都比读快,这和微构架息息相关。如果深究那需要花很多功夫。如果不想深究,粗略看看可能越看越糊涂。 http://zhuanlan.zhihu.com/datou/20263750
缓存没有关闭,我也试过关闭缓存,读取的时间明显长了很多,但是还是写的快。你说的是不是可以这样理解,由于读的时候存在缓存命中问题,这就造成了执行该指令的时间会长,但是总时间还包括设备端的操作,这样总的时间哪个长哪个短就不好说了
jdygrdzh 2016-02-25
  • 打赏
  • 举报
回复
当然我也不是说所有的写都比读快,这和微构架息息相关。如果深究那需要花很多功夫。如果不想深究,粗略看看可能越看越糊涂。 http://zhuanlan.zhihu.com/datou/20263750
jdygrdzh 2016-02-25
  • 打赏
  • 举报
回复
你读比写快的时候,是不是关掉缓存了?有没有打开cpu计数器做过统计?
ainolike 2016-02-25
  • 打赏
  • 举报
回复
引用 2 楼 jdygrdzh 的回复:
读比写慢是再正常不过了。读指令如果未命中缓存,那么指令会停在那,一直等到数据从内存返回才继续。所以瓶颈在延迟。 而写指令可以直接把数据丢到缓冲,指令继续往下走。所以瓶颈在带宽。 可以多看看处理器微构架的书,我的博客上也有一些说明。
但是一般像存储设备都是读的比较快啊,并且同样的程序(ldr和str改为mov)在电脑上试过,却是读的比较快,跟网上下载的一些软件测得的结果相差不是特别大,我在怀疑会不会跟硬件有关。
ainolike 2016-02-25
  • 打赏
  • 举报
回复
引用 1 楼 qq_21792169 的回复:
跟这个没有关系吧,都是伪指令,编辑器会自动转换成mov两条指令,你看下是不是别的原因
ldr和str在读写内存时不是伪指令吧
jdygrdzh 2016-02-25
  • 打赏
  • 举报
回复
你说的存储设备是闪存和硬盘,并且指的是在设备端的延迟。 我和你说的是处理器上的读写指令提交。写指令提交和外设,缓存,内存延迟没有关系。只有读指令才受影响,
jdygrdzh 2016-02-25
  • 打赏
  • 举报
回复
读比写慢是再正常不过了。读指令如果未命中缓存,那么指令会停在那,一直等到数据从内存返回才继续。所以瓶颈在延迟。 而写指令可以直接把数据丢到缓冲,指令继续往下走。所以瓶颈在带宽。 可以多看看处理器微构架的书,我的博客上也有一些说明。
HeroKern 2016-02-24
  • 打赏
  • 举报
回复
跟这个没有关系吧,都是伪指令,编辑器会自动转换成mov两条指令,你看下是不是别的原因

2,179

社区成员

发帖
与我相关
我的任务
社区描述
xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧