导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[转帖] log()函数的执行时间(math.h中的自然对数[liufengzhong]

 *第9796篇: [转帖] log()函数的执行时间(math.h中的自然对数)?

  
楼 主:liufengzhong 2014年8月9日12:15
 [转帖] log()函数的执行时间(math.h中的自然对数)?
我想知道log()函数的执行时间。
因此,我写了一个小的测试程序来测量log()函数的执行时间。
我用XMOS startKIT硬件和xTIMEComposer版本:Community_13.0.2(build 11621, Jan-16-2014)进行测试。
我的测试程序所测量的log()函数执行时间约80.75usec。 
(对于浮动*浮动计算的执行时间约为1.6usec)
有可能加快log()函数的执行时间吗?
测试程序日志test.xc的源代码:

/*
 * log-test.xc
 *
 *  Created on: 02.03.2014
 *      Author: bernhard
 */
#include   <stdio.h>  
#include   <math.h>  
 
int main(void) {
    timer t;
    int starttime;
    int stoptime;
    float ln = exp( 1);
    float f1 = 1.2345;
    float f2 = 6.789;
 
    printf( "Hello XMOS!\n");
 
    t :>   starttime;
    ln = log( ln);
    t :>   stoptime;
 
    printf( "ln( e)=%f duration=%dns\n", ln, ( stoptime - starttime) * 10);
 
    t :>   starttime;
    f2 = f1 * f2;
    t :>   stoptime;
 
    printf( "float1 * float2 =%f duration=%dns\n", f2, ( stoptime - starttime) * 10);
 
    return 0;
}

测试程序的控制台输出:

Hello XMOS!
ln( e)=1.000000 duration=80750ns
float1 * float2 =8.381021 duration=1550ns

提前感谢您的帮助。

附件:


回答1:

你可以尝试改变的优化级别的O2或O3。您可以通过更改下面的应用程序的Makefile做到这一点:
XCC_FLAGS_Debug = -O3 -g


回复:

是的,我做了测试与-O3 -g具有相同的结果!

Hello XMOS!
ln( e)=1.000000 duration=80740ns
float1 * float2 =8.381021 duration=1550ns


回答2:
由于xCORE不具备浮点它必须用软件模拟硬件支持,这会减慢速度。也许你可以用固定点呢?有日志在以下的档案库“8.24”定点格式的实现:



回答3:

log(a*10^b) = log10(a*10^b) / log10(e) = (b + log10(a) ) / log10(e)

这意味着,如果你有一个数字底数10,和你有一个查表插值log10(a)所示,在区间| 110 |,你可以计算出的自然对数与

const double c = 1/log10(e) =>   

ans = (b+table_lookup(a))*c

OTP存储器,可考虑该表。
 
或者如果浮子被存储在底数2

log(a*2^b) = (b + log2(a)) / log2(e)  ... you need a table-lookup for the interval |1 2|


回复:

非常感谢你们的建议。我将测试它和上传它的结果。


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:[转帖]如何在Ubuntu 12.04下启用xTIMEcomposer滚动条?

[下一篇主题]:如何成为一名合格的IT嵌入式职业人