您好:
最近在测试C6678多核同时访问DDR3时传输带宽,使用EDMA访问。
EDMA每次传输20000*8Byte,传输256次,测试传输时间。用传输字节数除以传输时间即为传输带宽。
当用单核访问时,测得传输带宽为8.5GB/s,基本接近DDR3的访问速率10GB/s。
当用多核访问时,使用core1、core2、core3传输,EDMA每次传输20000*8Byte,每个核传输256/3次,这样测得的core1的速率为7.5GB/s,core2速率为3.2GB/s,core3速率为3.2GB/s。三个核合计带宽为13GB/s,超过了DDR3的最大传输带宽10GB/s,请问,这是正常的吗?如果不正常,可能的原因是什么呢?
已知三个核的EDMA通道分别为1、2、3,队列为0、1、1,每个通道对应不同的param set。
当改变三个核的队列号时,测得会传输带宽会发生改变
Shine:
应该不会超过DDR3总宽,请看附件throughput performance文档。
5.6 Scenario 6: EDMA Transfer From Different CorePac L2 to DDR3Throughput Performance Guide for C66x KeyStone Devices (Rev. A).pdf
xiaoyan Bian:
回复 Shine:
非常感谢您,但是我不清楚我的测试代码有什么问题导致这样的结果,能帮忙看一下吗?
下面是三个核同时运行以下代码,得到传输时间,再用传输数据量/传输时间得到带宽。
prt_eachcore = PRT_NUM/corenum;
add_addr = (DNUM-1)*prt_eachcore*disdot*8;
start_time_Ali = C6678_Timer8_SystemTime_Get(); //开始计时
//core1,core2,core3同时读取,通道号分别为1,2,3,队列号为0,1,1
for(j=0;j<prt_eachcore;j++)
{
EDMA_2D(DNUM>>1, DNUM,\
1, 0, DNUM+1,\
1, 0, 4,\
(unsigned int)(DDR_OrigData1+add_addr+j*disdot*8), (unsigned int)MSMC_ADDR_CORE,\
disdot, 8,\
disdot, disdot);
EDMA_wait_over(DNUM); //等待传输结束
}
end_time_Ali = C6678_Timer8_SystemTime_Get() ; //结束计时
end_time_Ali = (end_time_Ali – start_time_Ali);
timeuse = end_time_Ali/1e6;
Shine:
回复 xiaoyan Bian:
请用TSCL, TSCH寄存器计算指令执行时间比较准。
xiaoyan Bian:
回复 Shine:
您好,感谢您的回复,我用TSC测试了,结果和timer测试结果一样,应该不是这个时间测试的问题,而且测试过程中发现有的时候测试时间基本平均分配,总带宽正常,有的时候又不正常,搞不懂了,还有点随机性