提高Lua在嵌入式系统中的运行速度

rubynroll 2008-05-29
Lua是一门运行速度极快的脚本语言,但是对于嵌入式系统来说,再怎么追求速度也不过分,:)

默认情况下,Lua用'double'来代表内部的'number‘,这对于有浮点协处理器的PC CPU来说没有什么影响,但许多嵌入式CPU并没有浮点处理器,因此得用多个通用寄存器来存储,并且在参与运算的时候用软件来模拟浮点,效率很低。

其实在大部分情况下,嵌入式系统的规模容量都无须考虑得那么大,因此用32bit的long来代表内部的'number‘就足够了,因此本文的方法就是通过定制编译Lua来提高Lua在无浮点协处理器的嵌入式系统上的运行速度:

luaconf.h(在line 504左右),修改:
#define LUA_NUMBER_DOUBLE
#define LUA_NUMBER double

为:
#define LUA_NUMBER_LONG
#define LUA_NUMBER long

修改:
#define LUAI_UACNUMBER double

为:
#define LUAI_UACNUMBER long

修改:
#define LUA_NUMBER_SCAN "%lf"
#define LUA_NUMBER_FMT "%.14g"
#define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n))
#define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */
#define lua_str2number(s,p) strtod((s), (p))

为:
#define LUA_NUMBER_SCAN "%l"
#define LUA_NUMBER_FMT "%l"
#define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n))
#define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */
#define lua_str2number(s,p) strtol((s), (p), 0)


OK,大功告成,编译,运行,是不是觉得速度快了很多?



simohayha 2008-10-17
我改了之后,交叉编译 print的话打不出数字。。。
rubynroll 2008-10-26
我列一下我使用的环境:
× 编译环境:buildroot
× 编译器: gcc 4.0
× CPU: ARM720T
× OS: arm-linux 2.6.26

理论上,Lua和这些环境应该没有太大关系的,不过我列出来以供参考。
Global site tag (gtag.js) - Google Analytics