用于比较初始边界值问题解决方案的性能指标

计算科学 线性代数 pde 表现 迭代法 显式方法
2021-12-11 00:56:03

我正在比较解决初始边界值问题的几种有限差分方法的性能。这种比较有几个方面:

  • 细胞数
  • 时间步数
  • 解决方法:
    • 显式(在单个线程上进行一次扫描,无迭代)
    • 交替方向显式(在单独的线程上进行两次扫描,无迭代)
    • 交替方向隐式(在一个线程 [TDMA] 上进行两次扫描,具有三个子时间步,无迭代)
    • 完全隐式(任意数量的线程,使用迭代 BICGSTAB 求解器)

题:

我的问题是:我应该使用什么指标来比较单元数、时间步数和求解方法的各种组合的相对性能?

David J. Lilja 的网站上有一些关于性能指标的信息他似乎认为执行时间(墙和 CPU)是最好的衡量标准。但我想知道是否有更适合我的应用程序的指标。

这是我到目前为止所考虑的:

  • Wall time 和 CPU time:这很容易衡量,但问题是它仅代表执行程序的计算机体系结构。我的大部分测试都是在 24 核机器上进行的……这不能代表典型的应用程序。每次我发布结果时不必包含对机器架构的描述会很好。有没有有意义的方法来标准化测量时间以避免这个问题?
  • 操作次数

    所有时间步长的 (N_iterations*N_sweeps*N_sub-timesteps*N_cells)/(N_threads) 的总和。

    这是可重复的并且与平台无关,但它不包括设置初始边界值问题和创建矩阵等的一些开销。它还对线程开销进行了一些简化假设。

粗略估计并行和串行性能也很好,这样人们就可以了解给定数量的处理器的速度提升(即,一种从我的 24 核上的结果推断的方法机器)。

2个回答

我同意 Bill Barth 的观点,即“解决问题的时间”是一个不错的指标,但恐怕它有几个缺点:

  • 它不是可移植的:一台机器上的快不能保证在另一台机器上也快(现代架构的不同不仅在于它们的浮点性能,还在于它们的缓存如何工作或它们的内存带宽是多少)。
  • 它是特定于实现的:也许算法 A 比算法 B 慢,因为它实现得不好,或者因为编译器没有很好地优化它?
  • 还要记住,并非每个算法都可以在每台机器上同样好地扩展——而且这种可扩展性再次高度依赖于实现。

如果您对评估方法本身而不是它们的实现感兴趣,那么我建议您基于以下特征构建一个抽象的预测性能模型:

解决(近似)相等误差的时间是比较此类算法的最佳指标,但您需要在一系列网格尺寸和 PDE 系数中进行比较。显式方法将具有时间步长约束O(hp)在哪里h是网格尺寸和p与您使用的离散化有关。这意味着他们将需要在更精细的网格上进行更多的时间步长。隐式方法不会有这个问题,但如果您使用迭代求解器,则可能存在网格依赖于所需的求解器迭代次数。这种依赖性可能会抵消您采用任意时间步长的任何好处,如果物理学需要小时间步长,您可能无法采用大时间步长。参数空间中可能有几个点,由于这些因素,这些方法会切换它们的等级顺序。

当您从一台机器移动到另一台机器时,这些方法的相对等级应该保持不变,但不能保证。最好始终在相同架构上运行模拟比较。

并行加速是衡量和推断并行性能的标准方法。