完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
Jp chao您好:
cache的direct映射和2way等映射方式在一定程度上决定了cache的性能的。 cache的作用就是将低端的内存(如DDR等)暂时保存到核内buffer中,提高访问效率。但是通常来说低端内存很大,比如DDR就有256MB或者更大,而cache通常很小,比如C6000的32K的L1D和L1P。这样就无法做到一一对应,只能说根据一定规则将许多的低端内存的地址映射到同一个cache地址,这就是cache的地址映射。 direct映射方式就是多个DDR的地址只能映射到1个cache地址;2way就是多个DDR地址可以映射到2个cache地址。同样3way和4way分别就是3个cache地址和4个cache地址。 direct映射的好处就是地址映射关系简单,地址转换快,但是缺点就是对cache利用率不高,即数据进cache时发生冲突的可能性很大。 多way的映射就是当一个低端内存地址就能选择多个cache地址(这种选择通常是一种算法),它的好处就是能够提高cache利用率,避免频繁的刷出cache(也就是数据冲突),缺点就是地址转换比direct复杂。 现在数据cache通常是用多way的方式。 谢谢! |
|
|
|
jiaolesu 发表于 2018-6-21 02:11 谢谢解答。这样的话,多WAY方式在非连续数据访问中比同等容量的direct方式效率高,如果是连续数据的访问,两者效率一样,这样理解对不对? 另外我看资料上写的决定多路CACHE中使用哪一路,是用的“最近使用的最少地址位”,没搞明白。 |
|
|
|
dasa1111 发表于 2018-6-21 02:25 jp chao 您好: 连续访问也是多way的效率要好。其实cache的效率可以理解为cache miss的概率和cache conflict的概率。假如是cold cache的连续数据,那么多way和direct的cache miss率是一样的,但是cache conflict的概率是direct的要高。如果发生了冲突,那么dirty的cache line需要被刷回内存,这也会引起CPU的stall。 关于“最近使用的最小地址位”(也称为LRU),则是cache替换的一种方法。它的意思是,系统每隔一段时间自动记录每个way中的每行cache line的访问次数。当某一行cache line需要被替换时,它就会找使用次数最少的那个way进行替换。 |
|
|
|
jiaolesu 发表于 2018-6-21 02:44 同问King Wang ,我使用的是6437。我测试发现数据(20000byte)全部放在L2中运行的效率只是全部放在DDR2(设置了MAR cacheability)的1.3倍左右,这样我使用EDMA的pingpong结构将数据搬到L2中去运算,可想而知效率也没得大幅提升。 是不是我的与测试代码有关系,只是简单的for()[ dst = src[0]/src[1]; dst = dst/2; dst = dst*2; ] 按照这样形式访问数据,是不是在开了cacheability DDR2中的cache命中率本身就比较高。 另外片外DDR2的cacheability片区设置为多大才好呢? |
|
|
|
wenxueshu 发表于 2018-6-21 02:56 Jason 你好: 这个与测试代码有些关系,比如你的代码如果从优化的角度来说,只有src会进入到cache中,因此cache的miss次数可以估算出来,即用总得src长度去除以每个cache line的长度。 DDR的效率一般为1个cache miss 需要stall 90-100 cycle,L2的cache miss 需要stall 10cycle的样子,所以差别就可以理论推算出来。 至于DDR的cache片区,一般由用户自己确定。我们推荐针对连续的大块数据有规则的访问的可以进行cache操作,而且特别是连续的数据我们建议在使用之前先用touch函数将数据块导入cache。另外,DDR的cache设置还需要考虑cache一致性问题,所以需要综合考虑具体情况确定。 谢谢! |
|
|
|
jiaolesu 发表于 2018-6-21 03:03 感谢King Wang 的指导,不知道能否告诉我您的工作邮箱,我的是kehuicat@126.com,希望能得到您的来访,谢谢! |
|
|
|
jiaolesu 发表于 2018-6-21 03:03 再问King Wang,你说的:DDR的效率一般为1个cache miss 需要stall 90-100 cycle,L2的cache miss 需要stall 10cycle的样子,所以差别就可以理论推算出来。 首先我想问你下你说的这个是在不开DDR2 cacheability还是开DDR2 cacheability的效率比较。 我通过测试在不开DDR2 cacheability情况下,其片内L2的效率的确可达到DDR2中的9-10倍,但是开DDR2 cacheability会提升很小(如上述提到的1.3倍)。开了DDR2 cacheability与L2效率相比理论上有几倍?难道是你说的这个意思?不知道我有没理解错,我想问下开DDR2 cacheability与不开DDR2 cacheability在数据访问上到底有什么区别,难道不开DDR2 cacheability不会被L1D cache、 L2 cache(我的是64x+)cache到,其读取速度是如此的缓慢。 谢谢! |
|
|
|
wenxueshu 发表于 2018-6-21 03:28 Jason你好: 你的问题分两步来解释: 1)DDR开启Cache和不开启Cache的区别: DDR如果开启了Cache,那么DSP就直接从Cache(L1Cache,L2Cache)里面取数,如果不开Cache,那么DSP就从DDR里面取数。 关于效率可以用实例来说明: 读取4个byte的DDR数据如果在开启Cache时,那么第一次访问会有cache miss,导致90~100cycle的stall,但是如果以后还用这个数据,DSP就直接从Cache里面获取,也就是不会再有stall。 如果不开Cache,DDR的第一次访问也会有90~100cyle的stall,与开启cache类似。但是后面的访问每一次DSP都会有90~100的stall,也就是说,后面的读取会很低效。 从另一个角度来说,如果连续64byte的数据,每次使用4byte,总共读16次,如果不开启Cache,那么会有16个90~100的stall,如果开启了Cache,在读取第一个4byte的同时,cache就会一次把全部64byte都读入cache中(cache line是64byte,这里假设数据地址按照Cache Line对齐),那么16次读取就只会有1个90~100的stall。 因此我们通常建议频繁使用、连续的memory设置为cache,使用越频繁,Cache提升效率越明显。 2)DDR开启Cache和数据放在L2的区别 这里设定一个前提,Cache只开启了L1 Cache,方便分析说明。 这时效率就像我上面提到的,每一次cache miss都分别会有90~100cycle(DDR),10cycle(L2)的stall。这时的效率就取决于应用。比如代码主要就是完成数据读取操作,那么这时差别就比较大,因为每多一次cache miss,DDR就需要更多的时间来等待数据;但是有时候代码不仅仅完成读取操作,而主要是计算操作(加减乘除等),这时L2的高效性就不会那么明显。所以这时跟代码关系比较大。 对于你的代码,你要看编译后的汇编情况如何。不过有个地方比较明显,比如你使用了除法,除法会有很大的消耗。因为定点里面做除法是很复杂的,如果是仅仅测试,建议使用其他操作。 另外,我的邮箱king-wang@ti.com,在德州仪器我们有一整个团队来支持产品在各个领域的应用!谢谢! |
|
|
|
谢谢King 详尽的解释,基本上明白了它们的区别。谢谢! |
|
|
|
只有小组成员才能发言,加入小组>>
326 浏览 1 评论
524 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
767 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
645 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1120 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
17浏览 28评论
49浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
242浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
192浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
52浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 13:17 , Processed in 1.029062 second(s), Total 93, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号