我有一个问题:我想使用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显然,用户和sys的时间是错误的,因为maple根据自己的时间测量花费了13秒。
在我看来,maple使用与time命令相同的源,并在每次使用它时重置计时器,因此unix-time命令只捕获自maple最后一次调用该源以来的时间。
这非常不方便,我想“禁止”maple这样做。有人知道怎么做吗?有没有一些调用maple的标志,让maple不自己测量时间戳?
提前感谢您的回复。
阿尔伯特
发布于 2013-05-01 05:59:38
丑陋的黑客来了。
正如我在评论中所说,问题是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崩溃。我还没有看到它的任何迹象,但我现在才刚刚玩过。
https://stackoverflow.com/questions/16306696
复制相似问题