首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存复制: ARM STM与ARM霓虹灯

内存复制: ARM STM与ARM霓虹灯
EN

Stack Overflow用户
提问于 2022-08-22 17:49:44
回答 1查看 104关注 0票数 0

我需要复制大量内存(按47k的顺序)(例如,从USB缓冲区复制到更永久的缓冲区)。

这是使用手臂皮质A8。

(手臂上有霓虹灯代码。)

ARM霓虹灯指令一次可以复制4个32位元素(每条指令).

ARM、LDM和STM指令一次可以加载和存储超过4个寄存器(每条指令)。

问题:

  1. 哪一种更有效地复制大量内存(例如47k)、ARM霓虹灯指令或ARM LDM和STM指令?(我没有可用的基准测试工具;这是在嵌入式系统上使用的)。

  1. 用于复制内存的ARM霓虹灯指令的优点是什么?

  1. 的项目主要是C语言,但也有一些汇编语言。是否有方法建议编译器使用ARM NEON或LDM/STM指令,而不进行优化?(我们在没有优化的情况下启动代码,所以在返回产品时没有区别。有可能优化可以对产品中的问题负责。)

工具:

ARM皮质A8处理器

IAR电子工作台IDE和编译器。

在Windows 10 PC上开发,到远程嵌入式ARM处理器(通过JTAG)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-22 23:00:34

霓虹灯具有负载和存储不对齐的优点,但耗能更大。

而且,由于您正在将USB缓冲区复制到对齐和大小完全控制的缓冲区,因此没有霓虹灯会更好,因为内存速度是相同的。

标准的memcpy很可能已经使用了neon (它依赖于BSP),因此我会编写一个使用ldrdstrd的迷你版本,它比ldmstm略快一些。

代码语言:javascript
复制
.balign 64
    push    {r4-r11}
    sub     r1, r1, #8
    sub     r0, r0, #8
    b       1f
    
.balign 64
1:
    ldrd    r4, r5, [r1, #8]
    ldrd    r6, r7, [r1, #16]
    ldrd    r8, r9, [r1, #24]
    ldrd    r10, r11, [r1, #32]!
    subs    r2, r2, #32
    
    strd    r4, r5, [r0, #8]
    strd    r6, r7, [r0, #16]
    strd    r8, r9, [r0, #24]
    strd    r10, r11, [r0, #32]!
    bgt     1b

.balign 16
    pop     {r4-r11}
    bx      lr  

我认为使缓冲区大小乘以32没有问题,这两个缓冲区对齐为64字节(缓存行长度),甚至更好的是4096字节(页面大小)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73449153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档