This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 66AK2H12:DDR3至 L2 memcpy 吞吐量

Guru**** 1997655 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/858977/66ak2h12-ddr3-to-l2-memcpy-throughput

器件型号:66AK2H12

大家好、

我对 memcpy 的吞吐量有疑问。

我测量了具有可变大小(从16字节到1 MB)和不同内存位置(DDR 到 L2、L2到 DDR、MSMC 到 L2、L2到 MSMC)的 memcpy 的吞吐量。

我注意到 DDR 到 L2的吞吐量非常糟糕(饱和大约85-90MB/s)、而其他存储器情况远高于此结果(对于 exp)。 L2到 DDR 的速率最高可达2.4GB/s)。 此外、当我使用 DMA 时、没有问题、速度最高可达6.6GB/s

原因可能是什么? 这些结果是否错误?

在我的设置中,CPU 具有1.22Ghz,DDR GEL 文件设置为 ddr3A_64BI_DDR1600_setup()。

最棒的

senseytani

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sam、

    请通过 Put 应用手册查看我们在 Keystone II 中发布的器件的预期内存吞吐量数字:

    http://www.ti.com/lit/an/sprabk5b/sprabk5b.pdf

    85-90 Mb/s 看起来相当低、但我可以在内部检查是否有可能导致数字更慢的东西。 如果您可以分享测量这些数据的方式并共享代码、以便我们可以查看是否存在任何问题、这可能会很好。

    此致、

    Rahul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我附加了该项目、并提供了一些示例结果:

    对于 DDR 至 L2 memcpy:

    59.041393 Mb/s、大小为16字节
    81.242905 MB/s、大小为32字节
    87.869431 Mb/s、大小为64字节
    92.466942 MB/s、大小为128字节
    70.690460 MB/s、大小为256字节
    94.707977 Mb/s,大小为512字节
    95.188004 Mb/s、大小为1024字节
    91.792397 MB/s,大小为2048字节
    89.014740 MB/秒,容量为4096字节
    91.251534 MB/s、大小为8192字节
    90.612068 MB/s、大小为16384字节
    90.640015 MB/s、大小为32768字节
    90.045395 MB/s、大小为65536字节
    89.969650 MB/s、大小为131072字节
    89.973618 Mb/s、大小为262144字节
    90.096855 MB/s,大小为524288字节
    85.062866 Mb/s、大小为1048566字节

    对于 L2到 DDR memcpy:

    333.233612 Mb/s、大小为16字节
    624.151855 MB/s、大小为32字节
    1139.755615 Mb/s、大小为64字节
    1655.644897 Mb/s、大小为128字节
    2296.149902 Mb/s、大小为256字节
    2808.683594 Mb/s、大小为512字节
    757.549744 Mb/s、大小为1024字节
    1792.436279 Mb/s、大小为2048字节
    1691.818726 Mb/s、大小为4096字节
    1609.066772 Mb/s、大小为8192字节
    1473.623535 Mb/s、大小为16384字节
    1602.662231 Mb/s、大小为32768字节
    1565.432983 Mb/s、大小为65536字节
    1579.464478 Mb/s,大小为131072字节
    1533.411865 Mb/s、大小为262144字节
    1497.515381 MB/秒,大小为524288字节
    752.195862 MB/s、大小为1048566字节

    对于 MSMC 至 DDR memcpy:


    132.843140 MB/s、大小为16字节
    538.651611 Mb/s、大小为32字节
    995.482788 Mb/s、大小为64字节
    1299.886475 Mb/s、大小为128字节
    2016.490723 MB/s、大小为256字节
    2557.500488 Mb/s、大小为512字节
    2905.981934 Mb/s、大小为1024字节
    3141.798340 MB/s、大小为2048字节
    大小为4096字节的3278.932129 MB/s
    3345.404297 MB/s、大小为8192字节
    3381.932129 Mb/s、大小为16384字节
    3401.358887 Mb/s、大小为32768字节
    3351.390869 MB/秒,大小65536字节
    2753.982178 Mb/s、大小为131072字节
    2756.668945 MB/s、大小为262144字节
    2758.061768 Mb/s、大小为524288字节
    2096.768555 Mb/s、大小为1048566字节

    对于 L2到 MSMC memcpy:


    139.438187 Mb/s、大小为16字节
    504.122681 Mb/s、大小为32字节
    936.227905 MB/秒,大小为64字节
    1442.993408 Mb/s、大小为128字节
    2097.150146 MB/秒,大小为256字节
    2688.654297 MB/s、大小为512字节
    3069.000488 Mb/s,大小为1024字节
    3391.617676 MB/秒,大小为2048字节
    3574.688232 Mb/s、大小为4096字节
    3649.863037 Mb/s、大小为8192字节
    3687.297363 Mb/s、大小为16384字节
    3709.718750 MB/s、大小为32768字节
    3725.507813 Mb/s、大小为65536字节
    3139.532471 Mb/s、大小为131072字节
    3142.625977 Mb/s、大小为262144字节
    3144.205811 Mb/s、大小为524288字节
    3019.879395 MB/s、大小为1048566字节

    对于 DDR 至 L2 DMA
    33.379936 Mb/s、大小为16字节
    86.611382 MB/s、大小为32字节
    173.222763 Mb/s、大小为64字节
    311.457977 Mb/s、大小为128字节
    622.915955 Mb/s、大小为256字节
    1131.556030 Mb/s、大小为512字节
    1912.295166 Mb/s、大小为1024字节
    2919.466797 MB/s、大小为2048字节
    4128.926270 MB/秒,容量为4096字节
    5073.750977 Mb/s、大小为8192字节
    5729.266602 Mb/s、大小为16384字节
    6077.778809 MB/s、大小为32768字节
    5828.790527 MB/s、大小为65536字节
    6169.270508 MB/秒,容量为131072字节
    6038.924805 Mb/s、大小为262144字节
    6216.956543 Mb/s、大小为524288字节
    6336.812988 MB/s、大小为1048566字节

    用于 L2到 DDR DMA
    48.786064 Mb/s、大小为16字节
    97.572128 MB/s,大小为32字节
    195.144257 Mb/s、大小为64字节
    390.288513 Mb/s、大小为128字节
    780.577026 Mb/s、大小为256字节
    1385.782104 Mb/s、大小为512字节
    2263.112061 MB/s、大小为1024字节
    3311.289795 MB/s、大小为2048字节
    大小为4096字节的4309.212891 Mb/s
    5207.616211 Mb/s、大小为8192字节
    5813.642090 Mb/s、大小为16384字节
    6172.816895 Mb/s,大小为32768字节
    5960.812500 Mb/s、大小为65536字节
    6242.437988 MB/s、大小为131072字节
    6505.417969 Mb/s、大小为262144字节
    6475.080566 Mb/s、大小为524288字节
    6423.819336 Mb/s、大小为1048566字节

    用于 MSMC 至 L2 DMA
    55.854504 MB/s、大小为16字节
    111.709007 Mb/s、大小为32字节
    223.418015 Mb/s、大小为64字节
    390.288513 Mb/s、大小为128字节
    780.577026 Mb/s、大小为256字节
    1385.782104 Mb/s、大小为512字节
    2263.112061 MB/s、大小为1024字节
    3311.289795 MB/s、大小为2048字节
    4505.962891 MB/秒,容量为4096字节
    5348.735840 MB/s、大小为8192字节
    5900.540039 Mb/s,大小为16384字节
    6172.816895 Mb/s,大小为32768字节
    6369.577637 Mb/s、大小为65536字节
    6459.499023 Mb/s,大小为131072字节
    6505.417969 Mb/s、大小为262144字节
    6528.623535 Mb/s、大小为524288字节
    6541.919434 MB/s、大小为1048566字节

    对于 L2到 MSMC DMA
    55.854504 MB/s、大小为16字节
    111.709007 Mb/s、大小为32字节
    223.418015 Mb/s、大小为64字节
    390.288513 Mb/s、大小为128字节
    780.577026 Mb/s、大小为256字节
    1385.782104 Mb/s、大小为512字节
    2263.112061 MB/s、大小为1024字节
    3311.289795 MB/s、大小为2048字节
    4505.962891 MB/秒,容量为4096字节
    5348.735840 MB/s、大小为8192字节
    5813.642090 Mb/s、大小为16384字节
    6172.816895 Mb/s,大小为32768字节
    6369.577637 Mb/s、大小为65536字节
    6459.499023 Mb/s,大小为131072字节
    6505.417969 Mb/s、大小为262144字节
    6528.623535 Mb/s、大小为524288字节
    6538.534180 Mb/s、大小为1048566字节

    CPU 的内核速度为1228799Khz。 我在 GEL 文件中将 DDR 设置为 ddr3A_64BI_DDR1600_setup()时、DDR 的 mA 速度。

    DDR 缓存也被禁用。 L2用作 RAM。 使用通道0的 EDMA 0并手动触发。 传输完成时、会轮询 IPR 位。

    谢谢你。

    最棒的

    #include 
    
    /
    
    
    
    
    
    
    易失性原型*/CSL_UINT64测试(int 大小,int 大小写);void EDMA_init ();/* MEMS*/易失性 UINT8的起始地址*ptab0 =(易失性 UINT8*) DDR_COPY;易失性 UINT8 *ptab1 =(易失性 UINT8*) MSMC_COPY;0x2764 =
    
    (UINT0*) INTRUINT_INTRUIN0*=(UINT0*) INTRUINT_INTRUINT_INTRUINUIN0*、IN0*=(UINT_INTRUIN0
    
    
    
    
    uint32优先级= 7;
    uint32 size_byte、cases;
    float cpu_ms = 1/(float) cpu_clock_kHz、time_ms=0、吞吐量=0;
    
    memory_init();//内存初始化
    EDMA_init();
    
    // Csl 计时器启用
    csl_tscEnable();
    CSL_XMC_setMDMAPriority (优先级);
    
    printf ("DSP CorePac 优先级:%d\n"、(int) CSL_XMC_getMDMAPriority ());
    
    _nassert((((int)ptab0 & 0x7)==0 );
    _nassert((((int)ptab1 & 0x7)==0 );
    _nassert (((((int)L2_copy & 0x7)==0);
    
    #pragma MUST_ITERATE (MAX_CASE、MAX_CASE、MAX_CASE);
    
    for (cases=0;cases "%f="" mb="" s="" with="" size="" %d="" bytes\n",="" throughput,size_byte,cases);="" }="" return="" 0;="" csl_uint64="" test(int="" ,int="" cases)="" returns="" the="" elapsed="" cycles="" if(cases="=" |="" cases="=" 1="" |cases="=" 2="" 3="" )="" start="CSL_tscRead();" 0)="" ddr="" to="" memcpy(l2_copy,="" ptab0,="" size);="" else="" 1)="" memcpy(ptab0,="" l2_copy,="" 2)="" msmc="" ptab1,="" 3)="" memcpy(ptab1,="" 4)="" dma="" csl_edma3paramsetup="" myparamsetup="{" csl_edma3_opt_make(csl_edma3_itcch_dis,="" csl_edma3_tcch_dis,="" csl_edma3_itcint_dis,="" csl_edma3_tcint_en,="" csl_edma3_cha_4,="" csl_edma3_tcc_normal,="" csl_edma3_fifowidth_none,="" csl_edma3_static_dis,="" csl_edma3_sync_ab,="" csl_edma3_addrmode_incr,="" csl_edma3_addrmode_incr="" ),="" (uint32)ptab0,="" src="" csl_edma3_cnt_make(16,size="" 16),="" acnt="" bcnt="" (uint32)l2_global_address="" ((uint32)l2_copy),="" dst="" csl_edma3_bidx_make(16,16),="" srcbidx="" dstbidx="" csl_edma3_linkbcntrld_make(0xffff,3),="" csl_edma3_cidx_make(0,0),="" };="" status="CSL_edma3ParamSetup(hParam,&myParamSetup);" while(*edma_cc0_ipr="" !="1<<" csl_edma3_cha_4){};="" end="CSL_tscRead();" -="" start;="" csl_edma3_cmd_intrpend_clear,="" &edmaintr);="" 5)="" 6)="" (uint32)ptab1,="" 7)="" duration;="" 
    

    e2e.ti.com/.../test_5F00_priority_5F00_metu_5F00_e2e.tar.gz

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能否指出此问题是否已解决、或者您是否仍在寻找导致 L2和 DDR 之间的 memcpy 性能问题的根?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不知道为什么,但现在已经正常了。

    最棒的