TI中文支持网
TI专业的中文技术问题搜集分享网站

SECDEVTOOL-OMAPL138C6748: 大内存数据cache_Inv耗时比较大的问题

Part Number:SECDEVTOOL-OMAPL138C6748

OMapL138的DSP6748核中,使用了几个20MB以上的buffer传输数据,这些数据由外部的器件更新到ddr中;目前每次使用这个些buffer时,都需要进行cache_Inv操作;发现cache_Inv操作,每次最大只能无效64KB*4这么大的一块,此时对于20MB以上的内存空间使无效时,需要分片多次操作,经测试耗时会达到6ms左右;请问由没有什么办法提高效率?或者是否有必要需要所有的内存都无效?还是说只需要无效一定范围就可以达到清空该内存块有可能的cache?

Nancy Wang:

如果buffer大于cache一次能操作的范围,就必须多次执行cache操作。

以L2cache说明为例:

. Note that the maximum byte count that can be specified is 4 × 65 535 bytes (on some C674x devices the maximum is 4 × 65 408 bytes, see your device-specific data manual), that is, one L2 cache operation can operate on at most 256K bytes. If the external memory buffer to be operated on is larger, multiple cache operations have to be issued.

https://www.ti.com.cn/cn/lit/ug/sprug82a/sprug82a.pdf

,

Kevin Le82:

你好,我看编译后的map文件中包含以下段

MEMORY CONFIGURATION

name origin length used unused attr fill———————- ——– ——— ——– ——– —- ——– IROM 11700000 00100000 00000000 00100000 R X L3_CBA_RAM 80000000 00020000 00000000 00020000 RW X SR_0 c2000000 00010000 00010000 00000000 RW X SR_1 c2010000 00020000 00000000 00020000 RW X DSP_PROG c2100000 00100000 00091820 0006e7e0 RW X DSP_DATA c2200000 01d00000 01590f2c 0076f0d4 RW

其中:IROM、L3_CBA_RAM程序的bld、cfg文件都是没有定义的,这两片内存地址是真实存在的吗?可以被程序使用,可以placement代码或数据进去吗?L3_CBA_RAM会被ARM核的linux系统控制吗,还是说只有dsp核可以控制?

,

Kevin Le82:

你好,你提供的sprug82a.pdf文档中,2.7.2 Changing Cache Sizes During Run-Time这一节提到的task-A,task-B的例子,有完整的实现参考代码吗?

,

Nancy Wang:

Kevin Le82 说:IROM、L3_CBA_RAM程序的bld、cfg文件都是没有定义的,这两片内存地址是真实存在的吗?

您是使用的omapl138吗?内存部分可以查看 3.5 Memory Map Summary

https://www.ti.com.cn/cn/lit/ds/symlink/omap-l138.pdf

例如 L3_CBA_RAM 80000000开始的地址是shared ram,是可以被arm访问的。

IROM 11700000 开始的地址属于 DSP L2 ROM(1),无法被用户使用。

,

Nancy Wang:

Kevin Le82 说:,2.7.2 Changing Cache Sizes During Run-Time这一节提到的task-A,task-B的例子,有完整的实现参考代码吗?

没有。

,

Kevin Le82:

你好,Nancy Wang,我在sprug82a.pdf文件中的3.1.2 C674x Pipelining of L1D Read Misses,这一节里面的举例touch函数,我的理解是可以将一片内存快速加载到cache中,不知道我的理解是否有误?这个看说明是c674x的,不知道能否在其他器件如am57x系列上正常运行吗?

,

Kevin Le82:

Kevin Le82 说:
,2.7.2 Changing Cache Sizes During Run-Time这一节提到的task-A,task-B的例子,有完整的实现参考代码吗?

没有。

这个没有一个完整的例子太可惜了,主要问题点是,程序中怎么获取一个函数的地址及大小、或者某一个段的大小如.external?这样才方便进行cache和内存之间进行数据转移,也才能写转移代码吧

,

Nancy Wang:

我仔细看一下再给您回复。

,

Nancy Wang:

Kevin Le82 说:我在sprug82a.pdf文件中的3.1.2 C674x Pipelining of L1D Read Misses,这一节里面的举例touch函数,我的理解是可以将一片内存快速加载到cache中

是的,miss会导致大量的延时stall

我找了一篇博客有相关的详细的讲解,可以参考理解一下。

https://blog.csdn.net/lcydhr/article/details/41203963

Kevin Le82 说:am57x系列上正常运行吗?

原理应该是可以参考的吧

,

Kevin Le82:

我看了那个博客文章,里面的内容基本都是sprup82a的意思。

我有一个想法,如果使用touch函数,touch程序中的代码,这样会对代码有加速作用吗;touch代码之后,代码会被cache到L1D和L2,当访问代码时,是否会在L2中命中然后加载到L1D;touch代码会对L1D造成影响

,

Nancy Wang:

Kevin Le82 说:如果使用touch函数,touch程序中的代码,这样会对代码有加速作用吗;touch代码之后,代码会被cache到L1D和L2,当访问代码时,是否会在L2中命中然后加载到L1D;touch代码会对L1D造成影响

建议您另起新帖,方便其它客户查看。

,

Kevin Le82:

已开新贴

(+) PROCESSOR-SDK-OMAPL138: touch的应用

,

Nancy Wang:

好的,我会将此贴关闭。

赞(0)
未经允许不得转载:TI中文支持网 » SECDEVTOOL-OMAPL138C6748: 大内存数据cache_Inv耗时比较大的问题
分享到: 更多 (0)