我正在比较解决初始边界值问题的几种有限差分方法的性能。这种比较有几个方面:
- 细胞数
- 时间步数
- 解决方法:
- 显式(在单个线程上进行一次扫描,无迭代)
- 交替方向显式(在单独的线程上进行两次扫描,无迭代)
- 交替方向隐式(在一个线程 [TDMA] 上进行两次扫描,具有三个子时间步,无迭代)
- 完全隐式(任意数量的线程,使用迭代 BICGSTAB 求解器)
题:
我的问题是:我应该使用什么指标来比较单元数、时间步数和求解方法的各种组合的相对性能?
David J. Lilja 的网站上有一些关于性能指标的信息。他似乎认为执行时间(墙和 CPU)是最好的衡量标准。但我想知道是否有更适合我的应用程序的指标。
这是我到目前为止所考虑的:
- Wall time 和 CPU time:这很容易衡量,但问题是它仅代表执行程序的计算机体系结构。我的大部分测试都是在 24 核机器上进行的……这不能代表典型的应用程序。每次我发布结果时不必包含对机器架构的描述会很好。有没有有意义的方法来标准化测量时间以避免这个问题?
操作次数:
所有时间步长的 (N_iterations*N_sweeps*N_sub-timesteps*N_cells)/(N_threads) 的总和。
这是可重复的并且与平台无关,但它不包括设置初始边界值问题和创建矩阵等的一些开销。它还对线程开销进行了一些简化假设。
粗略估计并行和串行性能也很好,这样人们就可以了解给定数量的处理器的速度提升(即,一种从我的 24 核上的结果推断的方法机器)。