首页 文章

在Unix-shell中调用Maple而不进行shell时间覆盖

提问于
浏览
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

显然,用户和系统时间是错误的,因为枫根据自己的时间测量花了13秒 .

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

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

提前谢谢你的回答 .

阿尔伯特

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中断 . 我还没有看到任何迹象,但我现在才刚刚玩过这个 .

相关问题