如果我必须进行n次模拟,每次模拟都有m步,我会说这个过程需要O(n * m)时间而不传递消息。启用mpi后,n个步骤中的每个步骤都可能瘫痪,尽管m个步骤必须是串联的。说这个过程需要O((n / j)* m)时间,这是正确的吗?我不确定在这里潜水是否正确。在这种情况下,有什么我可以明确地说出关于内存的缩放吗?
答案 0 :(得分:0)
实际上有两个答案。谈到并行代码,了解网络排序很有帮助:https://en.wikipedia.org/wiki/Sorting_network。您的问题的关键在于有两种方法可以衡量网络效率:比较器的总数(O(n*m)
)或深度(O( (n/j) * m )
。两者都是准确的,您只需要清楚你在说什么。
我不熟悉monte carlo模拟,所以我不能特别谈论内存,但通常当你做一些并行的时候,内存使用率会上升而不是下降。如果它是“完全并行”的,那么内存会略微增加,如果你运气不好,内存使用量可能会与j
成正比,甚至更糟![/ p>