我想在python中实现一个在线递归并行算法。
所以每当我得到一个新观察时,我想计算一个新的系数矩阵。该矩阵的每一行必须并行计算。
为每个时间步创建一个新进程是否过于昂贵,该进程将上一个时间步的行作为输入并计算下一行的行并在计算之后将其删除并再次创建它?
或者让整个过程运行更好吗?如果第二个是两个中最好的,我怎样才能恢复相同的过程,但输入不同?
有什么办法吗?
答案 0 :(得分:0)
是的,这总是昂贵并且通常非常昂贵。持久性流程不会让您支付每个时间片处理的固定开销成本,这是一个更有前途的选择,但是还必须首先考虑许多其他因素。
所有流程实例化/终止开销 - 成本是更昂贵的,计算任务的数学密集/复杂程度越低。因此,如果您的处理在 [TIME]
-domain中很便宜,那么所有开销成本看起来都会更加昂贵(因为您的处理必须在行中花费很多次...)< / p>
所有流程设置也会为 [SPACE]
-domain中的数据的内存(重新)分配支付显着的开销成本(而具有可行性)半持久数据结构,持久化进程可以使用,就地矩阵运算符可以节省大量内存分配开销 - 避免...大规模矩阵非常重要的主题,如FEM的数值数学处理, ANN,视频/图像内核应用程序等。)
在决定此设计难题之前,请查看this logic in the re-formulated Amdahl's Law的所有详细信息以获取所有定量数据。对每个处理阶段进行基准测试,包括流程实例化,包括内存传输成本(参数),包括处理计算阶段的处理成本&#34;内部&#34;一步向前计算,包括在所有相关交易对手之间重新分配结果的成本。
只有接下来你才能定量地确定盈亏平衡点,之后更多的流程不会改善处理(将停止降低整体持续时间并开始增加开销成本,而不是并行流程加速计算可能管理的覆盖)。
这可能有很大帮助,一旦避免支付过程实例化和终止的重复成本。
然而,在所有这些计算服务进程中,信令和数据重新传播都有成本。接下来所有进程都必须适合真正的RAM,以免输掉掉掉/交换 [SPACE]
- 动摇的潮汐浪潮,这些潮汐非常缓慢地流动并会杀死所有 [TIME]
- 动机性能增加的想法。
这是你提高性能的最强大功能,因为python是你的选择。如果你认真考虑表现,不用再告诉这里了。 numpy
+ numba
对此非常有用。如果为性能已经很好的代码削减最后几个[ns]
,那么调用接口的窄特化和更好的矢量化对齐(缓存友好性)就是你的工具。