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.

[参考译文] TMS320F28377S:C2000™︎微控制器论坛

Guru**** 2478765 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/934569/tms320f28377s-c2000-microcontrollers-forum

器件型号:TMS320F28377S

您好!

FPU 库提供了面向按元素进行向量乘法的 C 语言可调用汇编函数(点积、相关代码片段在线程末尾以屏幕截图形式给出)。 我还在寻找 矢量乘法的 C 可调用汇编、如图1所示、该汇编在末尾提供了一个单一元素

                图1. 矢量乘法

FPU 库中提供的矢量乘法函数具有以下函数名:void mpy_SP_RVxRV_2 (float32 * y、const float32 * w、const float * x、const UINT16 N)

我正在寻找类似的东西:float32 function_name (const float32 *w、const float *x、const uint16 N)  

将有一个返回、给出所有元素按向量乘法的总和。  

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

    您好!

    在此示例中、最终矢量将由参数"y"引用。 您的应用程序是否会阻止这种使用?

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

    您好!

    "Y"是向量。 我宁愿使用单个元素、它是输入矢量的点积的总和、而不是具有矢量输出。 这就是为什么我将函数名称的定义更改为  float32 function_name (const float32 *w、const float *x、const uint16 N)。  此定义将输出为返回单个元素(函数具有 float32返回)。

    我不知道如何编写汇编代码。 这就是为什么我在这里写信给你寻求帮助的原因。 此外、在未来版本中、最好在 FPU 库中为其他用户提供此函数。

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

    您好、shanty、

    您似乎删除了上次答复。 顺便说一下、感谢您的回复。

    根据您删除的答案、您正确理解了我。 我编写汇编代码的主要目的是提高应用中的计算速度。 假设您将对矩阵和矢量执行此乘法。 如果我使用提供的函数(void mpy_SP_RVxRV_2 (float32 * y、const float32 * w、const float * x、const UINT16 N))、在任何步骤中、我都将在将其分配到相关矩阵元素之前进行求和。 此求和(实际上用于循环)的大小将为矩阵的#row 乘以#col。  

    我还希望拥有准确的计算时间。 如果我有汇编语言、我将根据矢量和矩阵的大小来计算计算计算计算时间。 另一方面、对于 c 代码(我已经编写过)、计算时间会因不同的因素(优化使用等)而异。  

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

    您好!

    对删除答复表示歉意。 我误解 了您在汇编中需要解决方案的事实。

    我编写的 c 函数如下:

     float32 function_name (const float32 *w、const float *x、const UINT16 N)

    float64_t y[N];
    float32和= 0;
    memset (y、 0U、 N* sizeof (float64_t));
    MPY_DP_RVxRV_2 ((float64_t *) y、  
                       (const float64_t *) w、  
                       (const float64_t *) x、 N);
    for (int i = i;<N; i++) 0
    sum += y[i];
    回款总额;
    在汇编语言中、如果将 N 存储在 AL 中并将地址保留在 XAR4中、则只需编写如下所示的简单循环即可:
    MOV XAR5、#0
    RPTB NEW_CODE、@AL
    添加 XAR5、* XAR4++
    NEW_CODE
    XAR5应该有你的总和。 如果有任何问题、请告诉我
    shanty

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

    您好、shanty、

    您为我提供了用于向量中元素求和的汇编代码片段。 如果您将此函数与  mpy_SP_RVxRV_2 函数相结合、您将实际为我提供所需的内容。  

    我没有关于在汇编中传递参数或局部变量用法的任何信息。 这就是我无法写入它的原因。 实际上、对于熟悉装配体的人来说、这似乎很容易。  

     float32 function_name (const float32 *w、const float *x、const uint16 N)、根据此函数定义、您将对每个元素 w 和 x 进行乘法、并将它们汇总成一个局部变量、直到达到 N。 循环结束后、您将返回求和的值。  

    最后要注意的一点是、在我看来、此函数对其他用户非常有用、您可以考虑在未来的版本中将其放入 FPU 库中。

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

    您好!

    我们一定会对其进行研究。 如果您想了解传递参数的工作原理、请编写一个简单的 c 代码并查看反汇编代码。 确保优化设置与最终应用相同。 我希望您的问题已得到解决。

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

    似乎我将了解汇编语言中的变量使用情况、然后编写我自己的代码。 感谢您的建议。