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.

[参考译文] TMS320C6748:C6748库中的 DSPF_sp_dotprod 需要更多周期。

Guru**** 2611705 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/656144/tms320c6748-dspf_sp_dotprod-from-c6748-library-takes-more-cycles

器件型号:TMS320C6748

您好!

我已经完成了一个小程序来查找两个数组的点积、这两个数组具有100个使用 DSPF_sp_dotprod 的元素。 按照以下链接中的程序员指南进行操作

第4-55页每次执行函数时、它只需75个周期、而在我的程序中、当优化关闭时、它在优化级别3上花费大约2488个周期、它需要135个周期。 此外、当我将数组长度减少到一半或两倍时、o3下的结果几乎为133个周期。 没有任何循环计数以手动方式给出。下面给出了我的程序。 我在 dummy=0时设置一个断点;在 dummy++时设置另一个断点;并且正在监视系统配置时钟周期以测量周期。

#include
#include
#include
#include
#include "dsplibc674x.h"

/*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *
用于自然 C 语言和优化 C 语言代码的/*接口头文件*/
/*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== *
#define 注释100
float aarr[注释];
float barr[注释];
浮点数分辨率;
volatile int dummy=0;


#pragma DATA_ALIGN (aarr、8);
#pragma DATA_ALIGN (barr、8);

int main()

浮入;

int i;

for (i=0;<notaps;i++))

aarr[i]=1.0;
Barr[i]=100.0;

虚拟= 0;
RES=DSPF_sp_dotprod (aarr、barr、notaps);
虚拟++;


返回(1);

提前感谢

相关信息

Shalini

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

    您好!

    这不是很容易猜到的、为什么性能数字与预期的不同。 但是,让我指出可疑的地方。

    您提到过、您的周期计数因优化级别而异。 这听起来很奇怪。 库函数在库编译时进行了优化、其性能不应取决于应用程序的优化级别。

    其次、这些数字在很大程度上取决于代码、存储器的数据放置和缓存。

    出于好奇、我尝试在 C6670上运行感兴趣的功能。 作为参考、我已经从源复制了优化的 C 函数并进行了测试。 我将数组和代码放置到 L2SRAM 中。 即使在第一次跑步时采取了这些预防措施、我也看到我的计数很大。 在第二次和后续的跑步中、我看到的要小得多。 例如、对于128个数字、如果我们谈论 DSPLIB 和手工制品、我看到114对172。 使用256个数字、我看到136与201。 请注意、将数组大小加倍并不会使执行时间加倍。

    如果我推测绝对值、我会哭。 想象一下、C66内核每周期应执行多达8次 SP 乘法。 这样、我应该预期128/8=16个周期、而实际测量中为114个周期? 据我所知、有函数调用开销、可能有起始/结束阶段等。 同样、请将136与114进行比较。 您可以看到、数组中的额外128个数字仅增加22个周期。

    我想、编译器和器件专家可以更好地进行解释、但我只是想说明简单的数学运算效果不是很好。

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

    尝试将程序和数据作为 SRAM 放入 L1P/L1D。 这将为您提供最佳的内存性能。 我猜这是最大的变化来源。 但是、如果您的应用程序需要将程序和数据放在其他位置并进行缓存、则您应该对配置中获得的结果进行基准测试、接受您获得的结果是最佳的、尽管与我们的文档不同、但仍会继续。

    由于存储值 res=以及从 dummy=0到 dummy++运行的开销、您将有几个周期变化。 但是、这只会是一小部分周期、除非优化在这方面产生很大的影响、否则不会解释这种巨大差异。 我在 lagrric 的解释中还介绍了函数调用本身的开销、这可能会随着优化而降低。 再说一次、这将仅是几个周期。

    库性能值是有效的、但我们并不总是很好地展示如何复制这些结果。 不过、我们已经开始使用基于 C66x 的器件来做得更好。

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

    感谢所有回复。

    我尝试从 SHDSPL1DRAM 和 DSPL1DRAM 执行程序。 当我在这两种情况下运行程序时、我甚至不会在开始时停止单击"恢复"按钮。 为什么会发生这种情况?

    当我尝试从 SHDSPL2RAM 和 DSPL2RAM 运行程序时、对于104项的点积、我得到的周期数为195。 那么、您是说这是我可以从该函数获得的最佳性能吗?

    提前感谢

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

    您好!

    我不太确定如何将程序和数据放入 L1缓存中、因此我的方法是将它们放在 L2SRAM 上、但请反复尝试执行序列。 然后、在第一次运行时、您将同时缓存程序和数据、因此第二次和后续运行将为您提供最佳性能。

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

    我想向您介绍 DSP 优化简介、该简介可通过以下链接找到:
    www.ti.com/.../sprabf2.pdf

    它包含使用编译器选项优化代码以及在片上存储器段中对齐和放置数据的简单技术。 请查看这些技术并检查您是否看到任何改进。

    我同意这里的建议,即将代码放置在 L2中并使用优化的编译器选项是改进代码而不会花费额外时间进行汇编编码的最简单技术。

    此致、
    Rahul