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

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

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

矢量化

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

多线程处理

增加软件中活动线程的数量以完成更多任务,并充分利用现代硬件上所有可用的内核。

多节点(集群)

群集架构可以实现能按算法缩放的高层次并行性能。了解如何使用消息传递接口和分布式内存模型为应用程序设计架构。

内存优化

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

非一致内存访问 (NUMA)

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