在python中恢复具有不同输入的进程或重新启动它是否更好?

问题描述 投票:1回答:1

我想在python中实现一个在线递归并行算法。

所以每当我得到一个新的观察时,我想计算一个新的系数矩阵。该矩阵上的每一行必须并行计算。

为每个时间步创建一个新进程是否过于昂贵,该进程将前一个时间步的行作为输入并计算下一行的行并在计算之后将其删除并再次创建它?

或者让整个过程运行更好吗?如果第二个是两个中最好的,我怎样才能恢复相同的过程,但输入不同?

有什么办法吗?

python parallel-processing parallelism-amdahl
1个回答
0
投票

为每个时间创建新流程是否过于昂贵......?

是的,这总是很昂贵而且往往非常昂贵。持久性流程不会让您支付每个时间片处理的固定开销成本,这是一个更有前途的选择,但是还必须首先考虑许多其他因素。

所有流程实例化/终止开销 - 成本越昂贵,计算任务的数学密集/复杂度就越低。因此,如果您的处理在[TIME]-domain中便宜,那么所有的管理费用看起来都会更加昂贵(因为您的处理将不得不花费多次... ...)

所有进程实例也将为[SPACE]域中的数据的内存(重新)分配支付显着的开销成本(而具有可行的半持久数据结构,持久进程可以使用,就地矩阵运算符可以在内存分配开销避免上节省了很多...在大规模矩阵上非常重要的主题,如FEM,ANN,视频/图像内核应用程序的数值数学处理等。


不要只依靠一个人的直觉。

在决定这种设计困境之前,请查看this logic in the re-formulated Amdahl's Law的所有细节以获得所有定量数据。对每个处理阶段进行基准测试,包括流程实例化,包括内存传输成本(参数),包括处理计算阶段的处理成本“内部”一步向前计算,包括重新分配的成本所有相关交易对手的结果。

只有接下来你才能定量地确定盈亏平衡点,之后更多的流程不会改善处理(将停止降低整体持续时间并开始增加比并行流程加速计算可能设法覆盖的更多开销成本) 。


让流程一直运行会更好吗?

一旦避免在流程实例化和终止时支付重复成本,这可能会有很大帮助。

然而,在所有这样的计算服务进程之间存在信令和数据重传的成本。接下来所有的过程都必须适合真正的内存,这样才不会失去交换掉/交换的[SPACE]激励的潮汐浪潮,这种潮汐非常缓慢地流动,并会扼杀所有关于[TIME]动机性能提升的想法。


做基准+矢量+最好,JIT / LLVM-编译代码。必须的 !

这是你提高性能的最强大功能,因为python是你的选择。如果你认真考虑表现,不用再告诉这里了。 numpy + numba对此非常有用。如果为已经高效的代码削减最后几个[ns],那么调用接口的狭窄专业化和更好的矢量化对齐(缓存友好性)就是你的工具。

© www.soinside.com 2019 - 2024. All rights reserved.