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"的部分。那需要你的书或优化指南。但是,一个好的开始是查看您有多少向量化(一些探查器示例可以显示这一点),因为这是可以找到最多计算能力的地方。
更大的问题是你的问题的理论极限是多少——例如。有些问题不适合矢量化,有些有内存访问需求,永远不能缓存友好,有些有简单的通信需求,而另一些则需要昂贵的定期全局更新。
有很多关于 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"的部分。那需要你的书或优化指南。但是,一个好的开始是查看您有多少向量化(一些探查器示例可以显示这一点),因为这是可以找到最多计算能力的地方。
更大的问题是你的问题的理论极限是多少——例如。有些问题不适合矢量化,有些有内存访问需求,永远不能缓存友好,有些有简单的通信需求,而另一些则需要昂贵的定期全局更新。