什么是代码现代化?

 

现代高性能计算机构建于许多资源的组合之上,这些资源包括多核与众核处理器、大型高速缓存、高速内存、高带宽的处理器间通信构造,以及对 I/O 能力的广泛支持。 高性能软件需要设计成能充分利用这些丰富的资源。

不论是对现有应用程序重新架构和/或调节以达到最高性能,还是针对现有和未来的计算机创建新应用程序,关键是要理解编程模型与有效利用这些资源之间的相互作用。

请将这视为有关代码现代化的信息的起点。

矢量化

现代硬件上的优良并行性能的一个重要成分是充分利用矢量化指令(即单指令多数据(SIMD)指令集)的优势。 在这里,您还将学习如何通过保持恰当的精度、类型常量及使用恰当的函数和精度标志来优化标量运算和串行运算。

内存优化

在所有系统上—从笔记本电脑到超级计算机—只有在以内核能够处理的最大速率为其提供数据时,内核才能发挥全部计算能力。 因此,对高性能计算和常规应用程序,如果大多数存储器请求击中附近高速缓存时,性能将更高。 否则,代码矢量化和并行化的效率可能不高。 学习如何识别并修复此种情况。

非一致内存访问 (NUMA) 和 MCDRAM

您需要多核服务器处理器或众核英特尔至强融核处理器的计算能力,但是系统的 DIMM 和 MCDRAM 对于多矢量处理单元的需求不匹配,因此您的程序卡住了。 学习更改应用程序的数据访问特性,使得 L1 和 L2 高速缓存提供所需的每秒 10,000+ GB。 不再因等待来自每秒 400+ GB 的 MCDRAM 或每秒 90+ GB 的 DIMMS 的数据而延迟。