2013-08-28 70 views
-1

在只有乘法硬件支持的16位微控制器上雙倍乘的執行時間是多少?沒有FPU。只有乘法硬件支持的16位微控制器的雙倍乘法的執行時間是多少?

我知道它通過一系列代碼來計算它。我只是不確定需要多久才能完成。

例如

double conversion = 0.03039013; 
double distance= 10.23456; 

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

有沒有人超時呢?

64位浮點和32位浮點乘法在時間上有什麼區別?使用32位超過64位有很多好處。

+0

恰恰是42個時鐘週期。 –

+0

@Paul如何來42,似乎是任意的。 – Ashitakalax

+2

嗯,是的 - 這是關鍵 - 不知道CPU或任何其他相關細節,你會如何期待任何人給你一個有用的答案? –

回答

0

我跑過了兩個場景,32位浮點運算和64位運算。該平臺採用16位瑞薩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上使用float和double的顯着差異。差距大約是7倍(對於這個平臺)。

生成的彙編代碼可能與計算不同系統上的浮點值有所不同。