我有一个问题:我想使用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
显然,用户和系统时间是错误的,因为枫根据自己的时间测量花了13秒 .
在我看来,maple使用与time命令相同的源,并在每次使用它时重置计时器,这样unix-time命令只捕获自上次调用maple到此源的时间 .
这非常不方便,我想“禁止”枫这样做 . 有谁知道这是怎么做到的吗?是否有一些标志用于调用枫树,让枫树不能自己测量时间戳?
提前谢谢你的回答 .
阿尔伯特
1 回答
丑陋的黑客即将到来 .
正如我在评论中所说,问题是Maple正在启动一个子进程来完成所有计算 . 所以,我在我的bin中创建了一个名为“mserver”的shell脚本
然后我调用Maple作为
在运行结束时,文件日志包含计算的正确“时间”输出 .
编辑:我应该指出,如果Maple协议使用stderr做任何事情,那么这最终会导致Maple中断 . 我还没有看到任何迹象,但我现在才刚刚玩过这个 .