HPC效率问题的识别与诊断

Identification and Diagnosis of Efficiency Problems in HPC

有很多关于 HPC 问题的文章和书籍,但我觉得我对规模和效率问题的诊断有所欠缺。例如,我正在阅读 Horst Simon 的一本名为 "Introduction to High Performance Computing for Scientists and Engineers" 的书,他在其中讨论了各种各样的问题和解决方案,例如,

但是,如果交给我的代码甚至有点复杂(即超过嵌套的 for 循环),我将很难发现瓶颈是什么或证明代码已达到给定的极限硬件。

类比医学,我目前可以列出一堆可能使人患病的疾病"less efficient",但这几乎没有用。我需要弄清楚如何诊断我的 "patients" 然后开一个 "cure".

我可以参考教如何诊断 HPC 问题(效率、可扩展性等)的文献吗?几乎是一步一步的指南。就像把听诊器放在胸口,然后听,...

这个问题是两个问题:一个是我如何找到瓶颈,另一个是我如何知道我的硬件的限制,如果我在他们那里。

首先,您必须 运行 分析器中的代码。任何根据时间 "top down" 视图查看代码的分析器都会向您展示瓶颈。

尝试此处建议的探查器(答案适用于 c++ 和 Fortran):Good profiler for Fortran and MPI - Allinea MAP 和 HPC Toolkit 都有您需要的那种演示。 (注意,我为 Allinea 工作)。

第二题是最"open"的部分。那需要你的书或优化指南。但是,一个好的开始是查看您有多少向量化(一些探查器示例可以显示这一点),因为这是可以找到最多计算能力的地方。

更大的问题是你的问题的理论极限是多少——例如。有些问题不适合矢量化,有些有内存访问需求,永远不能缓存友好,有些有简单的通信需求,而另一些则需要昂贵的定期全局更新。