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.

[参考译文] MSP430FR5994:使用 LEA 的浮点计算

Guru**** 2390755 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1068841/msp430fr5994-floating-point-calculations-using-the-lea

部件号:MSP430FR5994

作为我项目的一部分,我正在尝试在 MSP430上实施矩阵计算-在浏览 DSPLibrary 后,我发现 LEA 仅适用于_Q15格式的矩阵操作。 但是,在固定点表示的文档中,我确实看到,尽管数字表示并存储为16位整数,但我们确实可以移动浮点值并使用“_Q15() ”宏转换它们。 但是,一个关键问题是,我希望保留用作矩阵输入的浮点值,但是, 当我使用包含固定点表示的'_Q15'格式时,我发现自己失去了计算的完整性,这方面的一个例子如下:

当我乘以两个原本是浮点值的'_Q15'值时,我的结果是右移15位-现在, 如果我尝试反向移动以获取原始值-我观察到许多值被转换为相同的16位整数-例如,结果(如32000和32767)都存储为1 -我不确定如何恢复原始值 当换档结束时的值为我提供了两个相对不同的整数值的相同结果。  

使用整数时,LEA 当然是平滑的,并提供了所需的结果-但是, 我的矩阵计算是神经网络的一部分,浮点格式的所有权重和偏差都在[0.0,1.0]范围内-是否可以通过 LEA 对这些值实施矩阵运算,同时保持计算的完整性?

我回答了一些问题,讨论如何使用低地球轨道进行矩阵计算,但似乎没有一个问题能解决我在上面所述的问题。 我对 DSPLibrary 如何计算整个计算有点不清楚-如果有任何线索-我非常感谢。

作为一个附注——我的矩阵计算密度与将1*12矩阵与12*12矩阵相乘是第一步——在这项工作之后,所有矩阵的乘法和增加的乘法都具有较低的尺寸——在这种情况下, 使用 LEA 是否有益,或者在矩阵操作中坚持标准 C 代码是否更谨慎? 如果是这样,我选择后者会有任何方法以任何方式或形式利用 LEA 来帮助提高 MSP430的效率。 谢谢。

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

    您好,Siddhant,

    让我为你们研究一下。

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

    当您将32000和32767向右移动15位时,您当然会以相同的值结束,因为您丢失了较低的15位,而 MSB 将保留这些位。 这是相同的。

    您不能将 DSPLIB 的 Q15结果转换为正确的15位,并期望获得1个以上的有效位。 它只有16位。 现在,在库代码的猜测中,它使用16x16位乘以提供32位结果。 硬件乘法器有一个分数模式,该模式仅对 Q15参数有用(对于16x16乘法)。 它将结果存储为 Q31,而不是自然的 Q30,这恰好简化了 Q15结果的获取,因为它只是上一个词。

    仅仅因为您的矩阵仅限于0到1的范围,并不意味着中间结果是。 您可以轻松溢出固定点表示。 如果将维12的两个向量乘以所有元素接近1.0,结果将接近12。 需要 Q12格式。

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

    您好,Siddhant,

    几天以来,我一直没有听到您的声音,所以我假设您能够解决您的问题。
    我会将此帖子的状态更改为“已解决”,但如果不是这种情况,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。
    如果此线程锁定,请单击“询问相关问题”按钮,在新线程中描述您的问题的当前状态以及您可能需要帮助我们解决您的问题的任何其他详细信息。