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.

[参考译文] AM2732:DSPLIB FFT 时钟周期计数

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1585227/am2732-dsplib-fft-clock-cycles-count

部件号: AM2732

您好、

当我使用提供的 TI DSPLIB 中的 dsp_fft16x16、并测量完成该 FFT 所需的时钟周期、它始终大于 Texas Instruments 文档“测试结果 DSPLIB 3.4.0.0(随 MCU SDK 安装一起提供、位于:mcu_plus_sdk_am273x_09_02_60/source/DSPLIB 3.4.0.0(位于:mcu_plb_c66x_sclb_drib_disb_driver.4) 中)中测得的时钟周期。

我的 FFT 大小为 N=256、根据您的文档、应该需要 743 个周期、但测量结果显示为 1149。

 
  CycleCounterP_RESET ();
  uint32_t CPU_Cycles_start = CycleCounterP_getCount32 ();
  dsp_fft16x16 (w_16x16、N、x_16x16、y_16x16);
  uint32_t CPU_Cycles_end = CycleCounterP_getCount32 ();
  uint32_t cpucycles = cpu_cycles_end - cpu_cycles_start;
  DebugP_log(“Cycles:%d!\r\n“、cpucycles);

 

我有什么问题吗?

 

提前感谢您、

Konstantinos

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

    尊敬的 Konstantinos:
    请期待尽快答复。

    谢谢、
    Shreyansh

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

    尊敬的 Konstantinos:

    您是使用发布配置文件还是调试配置文件构建代码?

    您是否链接到 DSPLIB 中的预编译库?

    您的代码和数据段在存储器中的位置 (MSS_L2、DSS_L2 或 DSS_L3)?

    此致、

    Ming

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

    您好、

    我正在使用调试配置文件进行构建。 我尝试使用发布配置文件进行构建、但未观察到周期计数存在差异。

    我链接到 DSPLIB 中的预编译库。 否则我的代码将无法构建。 在 C6000 链接器文件搜索路径中、我添加了 DSPLIB.lib 文件。

    如果我的链接过程错误、请告诉我。

    还在 C6000 编译器包含选项中添加了路径。

    然后、在链接 DSPLIB.lib 文件后、我会将该库包含在我的代码中、如下所示:  

    #include
    所有信息都位于 DSS_L2 存储器中。 代码和数据。
    谢谢你。
    K.
     
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Konstantinos:

    我使用释放模式进行了相同的测试(环路 10x)。 以下是我的结果:

    [C66xx_DSP]所有测试均已通过!!
    周期数:1129!
    循环次数:992 次!
    循环次数:992 次!
    循环次数:992 次!
    循环次数:992 次!
    循环次数:992 次!
    循环次数:992 次!
    循环次数:992 次!
    循环次数:992 次!
    循环次数:992 次!

    首先、高速缓存是冷的。 使用热缓存时、结果会更准确。 我知道仍然没有  743 个周期。 我不知道 DSPLIB 团队在哪个平台上运行他们的基准测试、但对于 AM273x、我们可以得到这一数字:992 个周期。

    此致、

    Ming

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

    尊敬的 Ming:

    非常感谢。 我测量周期的方式是否准确、或者  CycleCounterP_getCount32 () 中是否有需要补偿的调用开销? 或者、当我执行 after_cycles - before_cycles 时、该调用开销是否得到了补偿?

    我希望我所说的是清楚的。

    再次感谢。

    此致、

    K.

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

    尊敬的 Konstantinos:

    您的测量方法正确。  CycleCounterP_getCount32 开销约为 13 个周期。 这就是移除测量开销时得到的结果:

    [C66xx_DSP]所有测试均已通过!!
    周期数:1120!
    周期数:979!
    周期数:979!
    周期数:979!
    周期数:979!
    周期数:979!
    周期数:979!
    周期数:979!
    周期数:979!
    周期数:979!

    此致、

    Ming

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

    如果我们将数据移动到 L1 缓存/SRAM 中、我们是否会看到任何更好的性能? 我已经就此做了一个相关的线程 ( AM2732:将 L1D 高速缓存配置为 SRAM )、您说当我们尝试将 FFT 矢量放入 L1D SRAM 时、情况会变得更糟、而且实际情况确实会更糟。 我问的是、是否有办法实现 DSPLIB 基准测试中承诺的性能。 此外,由于 计算总周期数时执行 after_cycles - before_cycles , 在减法过程中 CycleCounterP_getCount32 () 函数的调用开销不会自动补偿吗?

    再次感谢。

    K.

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

    尊敬的 Konstantinos:

    首先、979 是我在 AM275x EVM 上获得的最佳数字。 我不知道有一个更好的方法来促进它。

    其次、979 被视为  CycleCounterP_getCount32 开销、大约为 13 个周期。

    此致、

    Ming

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

    尊敬的 Ming:

    我想你不明白我关于  CycleCounterP_getCount32 () 调用开销的问题。

    这是我的代码再次:

    cpu_cycles_start = cycleCounterP_getCount32 ();

    dsp_fft16x16 (w_16x16、N、x_16x16、y_16x16);

    cpu_cycles_end = cycleCounterP_getCount32 ();

    cpucycles = cpu_cycles_end - cpu_cycles_start;

    变量  cpu_cycles_start 和 cpu_cycles_end 都包含 CycleCounterP_getCount32 () 的 13 个周期调用开销。
    因此、当我完成以下任务时:

    cpucycles = cpu_cycles_end - cpu_cycles_start;
    基本上就像这样:
    cpucycles =(true_cpu_cycles_end + 13)-(true_cpu_cycles_start + 13);
    所以基本上我要问的是我的想法是否正确、如果每次测量的+13 最终取消、最后我不需要手动完成
    此致、
    K.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Konstantinos:

    因为  CycleCounterP_getCount32 () 需要 13 个周期来获得真正的时间戳,所以开始时间戳是准确的。 结束时间戳在实际时间戳之后 13 个周期。 测量的 cpucycles =(true_cpu_cycles_end + 13)- true_cpu_cycles_start。 因此需要负 13 个周期的开销。

    此致、

    Ming