有很多关于HPC问题的文章和书籍,但我觉得我对缩放和效率问题的诊断感到遗憾。例如,我正在阅读Horst Simon撰写的一本名为“科学家和工程师的高性能计算简介”的书籍,在那里他讨论了各种各样的问题和解决方案,例如,
但是,如果我把一段代码交给远程复杂的(即不仅仅是嵌套的for循环),我将很难发现瓶颈是什么,或者证明代码已达到某一特定部分的限制。硬件
与医学类似,我现在可以列出一堆可能导致人们“效率低下”的疾病,但这并不是很有用。我需要弄清楚如何诊断我的“病人”,然后开出“治愈”。
我可以参考一下教授如何诊断HPC问题(效率,可扩展性等)的文献吗?几乎是一步一步的指南。就像把胸部的听诊器,然后听,...
答案 0 :(得分:1)
这个问题有两个问题:一个是如何找到瓶颈,另一个是我如何知道硬件的限制以及我是否在他们身边。
首先,您必须在分析器中运行代码。任何根据时间对代码进行“自上而下”视图的分析器都会向您显示瓶颈。
尝试使用此处建议的分析器(答案适用于c ++和Fortran):Good profiler for Fortran and MPI - Allinea MAP和HPC Toolkit都具有您需要的演示文稿。 (注意我为Allinea工作)。
第二个问题是最“开放”的部分。那个需要你的书或优化指南。但是,一个好的开始是看你有多少矢量化(一些分析器示例可以显示这一点),因为这是可以找到最大计算能力的地方。
更大的问题是你的问题的理论极限是什么 - 例如。有些问题不适用于矢量化,有些问题的内存访问需求永远不会缓存,有些问题的通信需求很简单,而其他需要昂贵的常规全局更新。