游戏开发论坛

 找回密码
 立即注册
搜索
查看: 17427|回复: 17

【原创】脚本引擎速度评测—谁是最快的脚本引擎?lua么

[复制链接]

1

主题

5

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2006-12-5 18:02:00 | 显示全部楼层 |阅读模式
呵呵,最近的空闲时间,我在对以前策划的脚本引擎架构的方案进行实施,编写完脚本引擎核心的原型系统。在互联网搜了搜最快的脚本引擎,在国内众口一词的都说Lua最快,其实是不然的。

让我们用事实来说话吧:

下面的测试全部采用 QueryPerformanceCounter 高精度计数【Lua这个家伙不支持int64让我头疼了一阵,还好我想到了解决的方法】。

我这里测试指令:只简单测试加法运算;总共测试2017个加法指令与常数直接相加,最后的结果应该为:300*2017=605100

另外我还将测试子程序调用的速度。

没有比较是不行的,我用机器语言直接运行的效率和脚本相比:

下面是加法指令直接运行的速度:

x86汇编:
  ;计时开始
  MOV EBX, 300  BB2C010000
  ADD EBX, 300  81C32C010000
  ..... --- 总计 2017 次
  ADD EBX, 300  81C32C010000
  ;计时结束

结果运行时间:60

Lua Script 脚本:
  (计时开始)
  local count = 300
  count = count + 300
    ..... (总计 2017 次)
  count = count + 300
  (计时结束)

【Lua5.0.2】运行时间:110
【Lua5.1 】 运行时间: 120


EUPHORIA 加法指令顺序执行效率测试脚本:
  --计时开始
    count = 300
    count +=300
    ..... --- 总计 2017 次
    count +=300
  --计时结束

结果运行时间:74

我写的 TurboScript 脚本:
  (计时开始)
  300
  300 +
    ..... (总计 2017 次)
  300 +
  (计时结束)

结果运行时间:87 【比汇编慢0.31倍; 如果当我进一步取消CPUStates(判断终止标志位)测试,运行时间居然和汇编差不多了:61!嘿嘿。】


子过程调用的速度比较:

x86 汇编 子过程调用效率测试脚本:
function add(a,b: integer): integer;
asm
  mov EAX, a
  add EAX, b
end;
--计时开始
  asm
    mOV EAX, 300
    MOV EDX, 300    CALL ADD
    ..... (总计 2017 次)
    MOV EDX, 300    CALL ADD
--计时结束
结果运行时间:126

Lua Script 脚本:
function iAdd(a, b)
  return a+b
end function
  (计时开始)
  local count = 300
  count = iAdd(count, 300)
    ..... (总计 2017 次)
  count = iAdd(count, 300)
  (计时结束)

【Lua5.0.2】运行时间:1270
【Lua5.1 】  运行时间:1820


EUPHORIA 子过程调用效率测试脚本:
function iAdd(integer a, integer b)
  return a+b
end function
--计时开始
count = 300
count = iAdd(count, 300)
..... --- 总计 2017 次
count = iAdd(count, 300)
--计时结束

结果运行时间:522 【比汇编慢了近0.759倍,比TurboScript 近调用慢近0.70倍】


TurboScript 子过程近调用效率测试
: Add +;
--计时开始
300
300 Add
..... (总计 2017 次)
300 Add
--计时结束
结果运行时间:157【只比汇编慢0.197倍,改用字节代码流后速度略有损失,现在是运行时间:169】

TurboScript 子过程模块之间的VM DLL远调用效率
: Add external 'test'; //该函数在另一文件中。
--计时开始
300
300 Add
..... (总计 2017 次)
300 Add
--计时结束

启用按需加载技术的结果运行时间:1082【不稳定徘徊在1082-8828】
使用的是按需加载技术,也就是仅当该函数被调用的时候才加载,然后加上Cache技术,后面的调用就在内存中处理。
时间远远长于其它,是因为加载文件耗去了绝大部分时间
不启用按需加载技术,而是预先加载模块:
结果运行时间:202  <如果不使用Cache功能每次都要查找所花时间:1790>


要吃饭了,以后有时间在驸上测试脚本和程序。

1

主题

5

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2006-12-5 22:19:00 | 显示全部楼层

Re: 【原创】脚本引擎速度评测—谁是最快的脚本引擎?lu

速度直方图:


测试脚本和程序下载:
点这儿

7

主题

61

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2006-12-6 08:56:00 | 显示全部楼层

Re:【原创】脚本引擎速度评测—谁是最快的脚本引擎?lua

不知道有什么意义?TurboScript 和Lua的功能对比呢?实用对比呢?

如果Lua只针对这个测试优化,除出多余代码运行速度又怎样?

没别的意思,不能只测速度

8

主题

98

帖子

102

积分

注册会员

Rank: 2

积分
102
发表于 2006-12-6 08:57:00 | 显示全部楼层

Re:【原创】脚本引擎速度评测—谁是最快的脚本引擎?lua

脚本重点不在速度,在灵活,对脚本测速度就好像对工地的挖地机测奔跑速度。。。。

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-12-6 10:16:00 | 显示全部楼层

Re:【原创】脚本引擎速度评测—谁是最快的脚本引擎?lua

我还以为又是一轮新的关于lua/ruby/python性能比较
结果竟然是与LZ的script相比
而且只是比较+-*/
晕倒~

16

主题

160

帖子

176

积分

注册会员

Rank: 2

积分
176
QQ
发表于 2006-12-6 11:51:00 | 显示全部楼层

Re:【原创】脚本引擎速度评测—谁是最快的脚本引擎?lua

不如直接写动态机器码编译器去了,理论速度最快。

1

主题

5

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2006-12-6 17:58:00 | 显示全部楼层

Re:【原创】脚本引擎速度评测—谁是最快的脚本引擎?lua

汗! 不管什么脚本引擎,只要能逮住耗子的就是好引擎!请大家不要误会,我只是用事实说明脚本引擎在某些方面的速度性能,当然很不全面,只供大家参考而已,也希望有心人能扩充全面测试那俺就有福了。另外标题我也说明了这只是脚本引擎的速度评测,不涉及对脚本语言的评述,那是上层编译器的问题,只要你愿意你也可以自己编写Basic,Pascal,JAVa等一系列的语言的编译器用你中意的脚本引擎来实现。这个就是把高级语言的语法翻译成对应的虚拟机指令的问题。脚本引擎和它采用的脚本语言完全是两个概念,不要混淆了。对与脚本引擎的性能出了速度外,还有就是它占用的内存,哪位如果有时候,能够补充是最好的。大家都会感激你!

俺写的那个TurboScript 现在还更本没啥用处,只是为了评估自己大脑里的一些想法和概念而写的,只写出虚拟机的执行机构,以及简单的类似Forth的语法编译器,指令集都是待定,更别说其它了。测试的结果让自己都感到比较自豪而已。如果让某些人困惑,那俺就在此深表歉意。

其实,我想说的是现在国外实用的最快速的脚本引擎是 EUPHORIA,大家就别把眼球集中在俺的TurboScriptl,而且直接指令执行俺的也没有它快啊!如果说语法的特点那就是能支持类型扩展,它本来没有int64这样的类型的,你看看我的脚本就知道了。不过,俺觉得可读性不好!俺是不喜欢的。


楼上说的是JIT即时编译吧,这个在俺的计划中的,不过,这样JIT缺陷是,装入慢,占用内存大,无论到哪里都必须要带一个本地机器码的翻译器。

最近在看CLR的内部实现,发现CLR的实现和俺的差不多,都是基于栈的虚拟机的实现,类型MetaData支持,唉,要是我早看到就少走许多弯路了!!不过,在设计框架上,我和它不一样的是,它是强制meta类型嵌入,而我是非强制的,由用户选择。


15

主题

368

帖子

406

积分

中级会员

Rank: 3Rank: 3

积分
406
发表于 2006-12-7 02:22:00 | 显示全部楼层

Re:【原创】脚本引擎速度评测—谁是最快的脚本引擎?lua

楼主标题的意思是TurboScript是最快的脚本引擎。鉴定完毕。

1

主题

5

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2006-12-7 18:38:00 | 显示全部楼层

Re:【原创】脚本引擎速度评测—谁是最快的脚本引擎?lua

请看清楚数据,在直接执行VM指令上,TScript不是最快的!直接执行VM指令上EUPHORIA 才是最快的。 而且我也没有下这个结论!

感兴趣的,可以顺藤(提供测试脚本就是很好的范本)做一个详尽的速度评测。让事实说话。

另外,TurboScript 考虑开源,正在寻找适当合作者加入,前提是必须精通编译原理,如Coco/R,LR,LEX是必备的知识,当然OO Pascal 也必须是深得其中真谛。

0

主题

275

帖子

676

积分

高级会员

Rank: 4

积分
676
发表于 2006-12-7 23:24:00 | 显示全部楼层

Re:【原创】脚本引擎速度评测—谁是最快的脚本引擎?lua

??颖群孟癫?
lua?面?]有整??.他是用浮?模?M整??而且?是double
?然??钜????e
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 19:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表