0

我有一个问题:我想使用 UNIX-time 命令对一些计算进行计时,我发现 Ubuntu 12.04 LTS(以及我测试的其他一些机器,包括 Mac)上的 Maple(我使用版本 16)有一些奇怪的属性。

打电话

time maple < testCalc.txt

其中 testCalc.txt 包含以下代码:

with(DETools):
DFactor(mult(x^5*d^5 + 6*x*d +1,x^5*d^5 + x^2*d^2 +7,[d,x]),[d,x]);

产生以下输出:

memory used=65.5MB, alloc=72.9MB, time=0.69
memory used=199.6MB, alloc=149.9MB, time=1.84
memory used=312.4MB, alloc=149.9MB, time=2.97
memory used=592.3MB, alloc=312.4MB, time=5.63
memory used=854.7MB, alloc=312.4MB, time=9.80
["The Result (long)"]
memory used=1132.9MB, alloc=312.4MB, time=13.06

但是额外的三行“时间”说

real         0m47.872s
user         0m0.016s
sys          0m0.000s

显然,user 和 sys 的时间是错误的,因为 maple 根据自己的时间测量花费了 13 秒。

在我看来,maple 使用与 time 命令相同的源并在每次使用它时重置计时器,这样 unix-time 命令仅捕获自上次调用 maple 到此源以来的时间。

这很不方便,我想“禁止”枫这样做。有谁知道这是怎么做到的吗?是否有一些用于调用 maple 的标志让 maple 不能自己测量时间戳?

提前感谢您的回答。

阿尔伯特

4

1 回答 1

1

丑陋的黑客来了。

正如我在评论中所说,问题在于 Maple 正在启动一个子进程来执行所有计算。所以,我在我的 bin 中创建了一个名为“mserver”的 shell 脚本,看起来像

#!/bin/sh
/usr/bin/time "REPLACE WITH PATH TO MSERVER ON YOUR MACHINE/mserver" $* 2> log

然后我调用 Maple 作为

maple --kernel-binary=/Users/me/bin/mserver

在运行结束时,文件日志包含计算的正确“时间”输出。

编辑:我应该指出,如果 Maple 协议使用 stderr 做任何事情,那么这最终会导致 Maple 中断。我没有看到任何迹象,但我现在只是玩过这个。

于 2013-04-30T21:59:38.403 回答