当没有可用的顺序代码时,如何计算在单个处理器上运行的并行代码的并行开销?

计算科学 表现 宠物 并行计算
2021-12-11 08:27:04

我正在分析 PETSc 的线性求解器的性能。据我了解,

speedup=Sequential TimeParallel Time.

我知道在一个处理器上运行并行代码可以用作顺序性能的代理。但是,由于产生的并行开销,我认为这不是衡量等效顺序代码的好方法。通常,顺序代码的性能比单个处理器上的并行性能要快。我想我可以搜索实现相同求解器的数值库,但不能保证该算法真的是等价的。

据我了解,

Parallel performance on one processor=Sequential Time+Parallel Overhead

因此,如果有一种方法可以量化并行开销,我们可以从一个处理器上的并行时间中减去它,以更好地衡量顺序时间。

所以,我的问题是:

  1. 当没有可用的顺序代码时,有没有办法计算在单个处理器上运行的并行代码的并行开销?
  2. 真的有必要吗?一般来说,一个处理器上的并行性能是否足以接近顺序性能?
2个回答

我认为只要你说出你衡量加速的依据,没有人会因为使用并行版本的代码在一个处理器上运行所花费的时间而责怪你。如果您还给出了您的一个案例的总时间(例如单处理器时间),那么人们将能够将您的实现与文献中的其他人或他们自己的实现进行比较。

对于某些问题,考虑到内存或时间的限制,甚至不可能计算出单处理器的结果。鉴于此,大多数人在查看加速结果时都明白,这些东西是相对于可用的最少处理器数量计算的,并且单处理器数据是在一个处理器上运行的并行代码。

没有硬性规定,但您应该明确说明您在做什么,并为您的读者提供足够的信息来计算他们可能感兴趣的其他数量。

我不熟悉 PETSc 内部结构(与此处的其他 PETSc 专家不同),但恕我直言,只要您将工作作为单个进程运行(即没有分区等),PETSc 就不应该有并行开销。

请记住,PETSc 也可以在没有 MPI 的情况下安装,这意味着可能存在的任何小的 MPI 开销(假设在我高度怀疑的 1 个内核上运行时是否进行了任何实际的 MPI 调用)也可以打折。

当并行开销主要是通信而不是算法时,这显然是正确的。