0

我将 Robert Hundt 的 Havlak 基准翻译成 PHP(见描述)。你可以在github上找到我的版本。该算法试图在树中找到循环。我试图尽可能接近 java 版本。不幸的是,与 java 版本相比,它慢得令人难以置信,到目前为止我看不到错误。java 版本需要不到一分钟的时间运行,而 PHP 版本在我的客户端上需要 8 多个小时。所以我想一定有一个错误。但是哪一个?

我再次通过洞算法,但我找不到任何重大问题。但有一点很有趣:测试驱动程序包含 15000 个循环。我在 Java 和 PHP 版本中将其缩减为一个循环。我使用 openjdk 和 PHP 5.4 得到以下数字:

Java运行:

time make run
/usr/bin/java \
-server -Xss15500k -cp .: LoopTesterApp
欢迎使用 LoopTesterApp,Java 版 正在
构建应用程序...
总内存:31424 KB 正在
构建简单 CFG...
15000 个虚拟循环正在
构建 CFG...
总计内存:243520 KB
执行循环识别
1 次迭代
总内存:446400 KB
完成

真实 0m7.414s
用户 0m8.954s
系统 0m0.484s

现在是 PHP 版本:

time php LoopTesterApp.php
欢迎使用 LoopTesterApp,PHP 版 正在
构建应用程序...
总内存:512 KB正在
构建简单 CFG...正在
构建 CFG...
总内存:390912 KB
执行循环识别
1 次迭代
总内存:835840 KB
完成
实际 6m38 .110s
用户 6m36.342s
系统 0m1.400s

一些计算是这样的:
PHP 中的一次运行秒数(基于用户时间):6 * 60 + 36.342 = 360.342 秒
Java 中的一次运行秒数(基于用户时间):0 * 60 + 08.954 = 008.954 秒

Faktor:360.342 / 008.954 = 40.2436899709627

4

0 回答 0