【问题标题】:What is the execution time for a double multiplication on a 16 bit microcontroller with only multiplication hardware support?在仅支持乘法硬件的 16 位微控制器上进行双倍乘法的执行时间是多少?
【发布时间】:2026-01-05 19:45:02
【问题描述】:

在仅支持乘法硬件的 16 位微控制器上进行双倍乘法的执行时间是多少?没有 FPU。

我知道它会运行一系列代码来计算它。我只是不确定需要多长时间才能通过它。

例子

double conversion = 0.03039013;
double distance= 10.23456;

double total = conversion * distance;//cost of this line

有人计时吗?

64 位浮点数和 32 位浮点数乘法在时间方面有什么区别?在 64 位上使用 32 有什么好处吗?

【问题讨论】:

  • 正好是 42 个时钟周期。
  • @Paul 怎么会是 42,看起来很随意。
  • 嗯,是的 - 这就是重点 - 在不知道 CPU 或任何其他相关细节的情况下,您希望任何人给您一个有用的答案吗?
  • @Ashitakalax:42 是一本流行书中的神奇数字。这不是一个实际的答案。
  • 试试看,使用端口引脚检查示波器或逻辑分析仪上的时序。

标签: performance time microcontroller


【解决方案1】:

我经历了两个场景,32 位浮点计算和 64 位计算。该平台在 16 位 Renesas M16C/28 MCU 上(该平台有一个乘法器,但没有浮点硬件。以 20 Mhz 运行,1 个周期 = 50 ns。

注意:这是用软件完成的,所以时间并不完美,但它的想法和概念已经得到了证明。

场景 1:

void floatMultiple(void)
{
    float a = 123456.1234;
    float b = 123456.1234;
    float result = 0;
    result = a * b;
}

按周期计时

最佳情况:305(15.25uSec) 最坏的情况:2033(101.65uSec)

场景 2:

void doubleMultiple(void)
{
    double a = 123456.1234;
    double b = 123456.1234;
    double result = 0;
    result = a * b;
}

使用相同的数字相同的系统,只是改变类型。 最佳情况:2356(117.8uSec) 最坏的情况:14567(728.35uSec)

我的计时系统有一点开销,我猜这个开销大约是 100 个周期。由于函数调用。

这仍然显示了在 16 位 MCU 上使用浮点数和双精度数的显着差异。差异大约是 7 倍(对于这个平台)。

生成的汇编代码在不同系统上计算浮点值可能会有差异。

【讨论】: