【问题标题】:Calling Maple in Unix-shell without shell time overwriting在不覆盖 shell 时间的情况下在 Unix-shell 中调用 Maple
【发布时间】:2013-05-01 05:59:38
【问题描述】:

我有一个问题:我想使用 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 不能自己测量时间戳?

提前感谢您的回答。

阿尔伯特

【问题讨论】:

  • 我认为这是由于 Maple 前端所做的工作很少。所有计算都在前端启动的单独进程中完成。也就是说,我不知道获取用于整个进程树的总资源的命令。

标签: shell unix time maple


【解决方案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 中断。我还没有看到它的任何迹象,但我现在只是在玩这个。

【讨论】:

  • 对我有用,但当然有点老套......尽管不是非常。我很困惑为什么没有内置的可能性。感谢 DrC 的快速回答。
猜你喜欢
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 2021-09-19
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多