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.

[参考译文] TMS320F280025:FINTDIV 定点除法与 TMU 浮点除法

Guru**** 2463330 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1006198/tms320f280025-fixed-point-division-by-fintdiv-vs-floating-point-division-by-tmu

器件型号:TMS320F280025
主题中讨论的其他器件:C2000WARE

尊敬的香榭丽舍

我向我们的客户提出这一问题。

用于使用定点代码并希望将定点代码迁移到 C2000 MCU 的用户。

我们知道浮点除法由 TMU 完成、定点除法由 FINTDIV 完成。

应用手册"快速整数除法–C2000 产品系列的差异化产品"

https://www.ti.com/lit/an/spracn6/spracn6.pdf?ts=1622433172943

 传统定点除法需要13-16个周期。

对于 TMU、浮点除法大约需要5个周期。

TMU 的浮点除法似乎快于 FINTDIV 的定点除法。

因此、

用户想知道下面哪一项的除法速度更快?

当用户考虑实施时、您是否有任何建议、偏好或意见?

1) 1)定点除法、仅使用 FINTDIV

int a、b、c;

c = a/b;

2) 2)转换为浮点除法并使用 TMU。

int a、b、c;

浮点 A1、B1、C1;

A1 =(浮点) A;

b1 =(浮点) b;

C1 = A1/B1;

C =(int)(c1*scaling_value);

黄维恩

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

    您好、Wayne、

    使用采用 TMU 的 FASTRTTS 库进行浮点除法需要25个周期的单精度。 这不包括转换为浮点所需的开销、这需要额外的3个周期。

    对于您的用例、我建议直接使用 FASTINTDIV 库。  

    -Shantanu

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

    尊敬的 Shantanu

    我很困惑。  
    25个周期是什么意思、因为我们认为 TMU 中的浮点除法需要5个周期? 为什么它有很大的不同?

    请您解释一下吗?

    韦恩

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

    韦恩、

    我正在查看 c2000ware 中的 FASTTS 文档中提供的用于单精度除法的基准测试信息。 您从何处获取5个周期的信息?

    -Shantanu

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

    尊敬的 Shantanu:

    我指的是表8-6中的指令 DIVF32。 数据表的 TMU 支持的指令。

    https://www.ti.com/lit/ds/symlink/tms320f280025c.pdf?ts=1622684505894&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FTMS320F280025C

    出什么问题了吗?

    黄维恩

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

    韦恩、

    抱歉。 我在上面提到的 API 来自标准 RTS 库。  

    使用 TMU 和--fp_mode=relaxed 进行浮点除法的 DIV32函数需要5个周期、其前面的 MOV32运算总共需要3个周期、从 int 转换为 float (I32TOF32)每个操作需要大约5个周期。

    对于32位 FASTINTDIV、132/i32的传统除法需要大约13-14个周期。  

    因此、对于您的用例、最好使用 FASTINTDIV 来避免转换为浮点的开销。

    -Shantanu