各位专家:‘
我目前在C6678板上做VLFFT(无SYSBIOS),做了两次不同的测试:
测试1:在c6678MSRAM SL2上开辟两个地址空间,一个作为输入数据空间,一个作为输出结果空间,另外在每个核上 LL2上开辟两个临时缓存作为FFT计算临时缓存空间,计算过程中8核通过控制器0 的8个不同channel 搬移数据到LL2,内核收到数据后在两个LL2上进行数据运算,运算结果在通过 属于自己操作的控制器0 的channel将数据结果从 LL2写到 MSRAM上的输出结果空间。循环多次输入相同的数据放在(MSRAM SL2上),调用VLFFT模块,进行超大点数如128K点的FFT计算,FFT计算结果(不覆盖输入的数据空间)有时会出现处理结果中的个别点的数据出现不一致的现象。错误数据的位置在第二部进行行向FFT计算时core3,core4,core6,core7最后一次EDMA搬移数据的第一点位置。
测试2: 在c6678MSRAM SL2上开辟一个地址空间,输入数据和输出结果数据存储空间,另外在每个核上 LL2上开辟两个临时缓存作为FFT计算临时缓存空间,计算过程中8核通过控制器0 的8个不同channel 搬移数据到LL2,内核收到数据后在两个LL2上进行数据运算,运算结果在通过 属于自己操作的控制器0 的channel将数据结果从 LL2写到 MSRAM上的输出结果空间,最后再进行采用EDMA进行数据转置得到正确的输出。循环输入相同的数据放在(MSRAM SL2上),调用VLFFT模块,进行超大点数如128K点的FFT计算,FFT计算结果(覆盖输入的数据)有时会出现个别计算结果不正确的现象,不正确的数据位置集中在结果数据转置前的第一行数据上,最后一步转置是采用8核 同时启动控制器0 的不同channel 的EDMA从MSMRAM SL2搬数据到LL2,等所有核EDMA搬完之后采用信号量进行8核同步,之后再配置EDMA,8核 同时启动控制器0 的不同channel 的EDMA从LL2搬数据到MSMRAM SL2,在EDMA从MSMRAM SL2到LL2过程中, 发现0核搬移的数据的前256个点数据出现数据错误,且数据不知来自内存的什么位置。每次出错时,这256点的数据都不一样,但是位置很固定。
所以我的问题是:
1) 我的测试中会不会存在cache 问题?C6678的cache 使用要遵循什么规则?怎么使用?什么情况下要用户自己维护cache的一致性?
2) c6678 是否支持多EDMA同时工作?是否支持多个控制器同时工作?是否支持同一控制器的多个Channel同时工作?如果可以的话,多个EDMA同时传输的传输带宽跟单个EDMA传输带宽相比,会不会有总线竞争导致单个Channel的平均带宽下降?这样用有没有风险?比如说我上述测试中的数据错误问题是不是由于多个channel的 EDMA同时传输导致的?
本人是6678的菜鸟级入门者,最近为上述问题困扰得不行了,敬请各位路过的大侠给我指点迷津。。。不胜感激,谢谢!
hongzhu guo:
补充说明下上述测试的输入边界条件:
硬件环境:基于EVM6678评估板1.0
软件环境:CCS5.2
由于输入数据空间位于MSRAM SL2,输入数据由核0内核计算产生,产生完毕之后,核0进行了cache写回操作完毕之后,进行VLFFT计算,VLFFT实现函数模块里面没有显示的操作任何cache。期望尽早得到各位专家的回复,谢谢!
Andy Yin1:
1. C6678的cache分成两级,其中LL2与L1 cache的数据一致性由硬件维护,SL2及DDR与cache的一致性需要软件维护,所以一般在写SL2及DDR的数据后需要刷L2 cache之后保证其他master能够看到最新的数据;
2. C6678有3个EDMA控制器,这多个控制器是可以同时工作;每个控制器内部有多个传输控制器TC,每个channel可以配置映射到不同的TC,映射到不同TC的channel可以同时被调度并行工作;多个channel同时工作时,性能的影响取决于源地址及目的地址,如果源和目的地址不冲突则性能不会有所影响。
hongzhu guo:
回复 Andy Yin1:
Andy Yin1:
您好!
感谢您的指导,您帮忙看下我测试过程中对cache的操作是否符合一致性操作规则?我的使用是否还存在cache的一致性问题?非常期待您的回复!对于第二个问题,我们后续跟进查看下EDMA的操作的底层配置相关代码,谢谢