我目前使用 FEniCS 和 Deal.II 来解决各种 FEM 问题。我还通过直接在 PETSc 中实现数据结构、例程和求解器来编写自己的这些问题的实现。给定相同的 FEM 问题/离散化,我可以在这三种不同的实现之间进行什么样的比较?特别是在高性能和并行计算的背景下。
自然,首先要做的是检查数值的准确性——我是否得到了正确的解决方案。然后我可以检查跨多个处理核心的强缩放、弱缩放和相关的挂钟时间。但我还能做什么?例如,有没有办法确定这些框架在算法上和机器硬件方面的“效率”如何?
我的目标是向人们展示在给定特定问题大小和 FE 离散化的情况下,哪些实现将产生最快的时间,但我认为展示这些时间的“可信度”也很有趣。例如:
1) 为什么实现 X 需要 45 秒来解决问题,而实现 Y 和 Z 分别只需要 30 和 25 秒?
2)为什么这三个中的任何一个都不能只花 4.5 秒?
3) 计算框架内有多少时间花在做有用的工作上,而不是等待/访问内存/缓存?
当然,内存带宽可能是为什么这些实现无法达到理想或完美时间的答案,而像 STREAM 这样的基准测试可以告诉您在给定机器的情况下您可以期待什么。我想知道是否有人有方法、工具或建议来正确确定或量化这些。
谢谢,