国产处理器在国内的广泛应用已成必然趋势,处理器性能也越来越受到用户市场广泛关注。因为它直接关系到企业的业务需求、成本效益、技术发展趋势、安全性与可靠性以及国家支持与政策导向等多个方面。但是,你知道如何衡量一款处理器对程序的执行效率吗?

在计算机领域,有这样一个经典的公式用来计算程序的执行时间,也就是 Processor Performance 。
备注:Server processors are often characterized by core count and clock speed (GHz), but these characteristics provide only a rough approximation of application performance. As important as speed is, the amount of work that a processor can accomplish with each tick of the clock, a parameter known as instructions per cycle (IPC), is equally important. The CPU’s internal design, or microarchitecture, determines both the clock rate and the IPC, so an effective design is crucial for building a powerful CPU.《EPYC: Designed for Effective Performance》
我们在运行程序或者代码的时候,基本上使用如下公式来评估运行的快慢:

Wall-Clock Time字面意思是挂钟时间,实际上就是指的是现实的时间,除以program,即表示CPU的性能。
同时,也是代码指令总数量*CPI(平均每条指令执行所需要的时钟周期)*每时钟周期需要的时间。那么基本上就有三大板块可以影响到我们代码的运行性能,如下图所示:

备注:Realization和Implementation有什么区别?分别是具现化与实例化,也就是微架构是指令集的具体化,工艺是对微架构的实例化。
从上面的公式中不难看出,影响程序执行时间的三个因素,即Total Instructions、Cycles/Instructions和Seconds/Cycle,其中:
- Total Instructions表示程序总共需要执的指令总数,也是代表了程序的代码大小(当然是二进制的),也代表着程序要完成的工作量;
这部分性能涉及几个方面:
1.算法 。比如我们对数组排序,采用冒泡、选择、插入、堆的不同算法,它的时间复杂度、空间复杂度不同,程序表现出的性能也不一样。对于一个程序,不采用任何算法的情况下,需要数百条或者更多普通指令才能完成。如果使用算法或者扩展的特殊指令集,那么可以大大减少指令的数量。所以一个程序员需要知道如何编写设计出更好更快的算法和程序。
2.编译器 。如果程序已经写好,如何让它运行更快?或者说性能更优呢?这个时候就取决于编译器,如-O0、-O1、O2、-O3,这些参数能够优化程序的运行速度。比如-O3可以优化循环代码,但是在使用-O3编译器GCC优化代码的时候,不同平台之间的差异性也很大,比如Arm和x86平台就有着很大区别,如以下代码所示:


3. ISA扩展。 比如X86系列多带SIMD的改进,1996年的SIMD指令是64位的,到1999年至2007年发展为128位的SIMD指令,如SSE2/3/4,后续的256位和512位的指令,对程序的执行效率更强。

- Cycles/Instruction表示执行每条指令所需要的周期数,简称CPI(Cycles Per Instruction, Clock Cycles per Instruction);微架构影响我们CPU的CPI或者1/IPC。
① 减少每条指令在处理器中执行所需要的指令周期,目的是减少处理器的周期时间(Cycle time)。例如,一个频率为2GHz的处理器,它的周期时间一定比一个频率为1GHz的处理器要高。
② 增加流水线及流水线的深度来提高并行度。
③ 减少CPI,也就是增大IPC,二者互为倒数关系。CPI即平均每条指令所需的平均时钟周期数,减少CPI,就是一条指令的执行时间更短了。IPC(instructions per cycle, Instructions /cycle)是指我一个时钟周期内(即一个拍子,上升沿和下降沿)可以运行多少条指令。增大IPC,即一个时钟周期内运行的指令更多了。
- Seconds/Cycle表示每个时钟周期需要的时间。【CPU时钟周期:通常为节拍脉冲或T周期,即主频的倒数,它是CPU中最小的时间单位,每个动作至少需要一个时钟周期。】
综上,从大的方向来看,处理器的性能或者说程序运行的性能,和指令集&编译器、微架构(主频、L1/L2/L3 Cache大小等)、工艺都息息相关。例如:
①同为x86架构(x86指令集),即使核心数相同,Intel和AMD的性能表现也不一样。因为Intel和AMD的微架构是不同的,工艺的实现是不同的,最终的芯片在性能、功耗方面的差异非常大。
②同为ARM架构(Arm指令集),飞腾和鲲鹏都是ARM v8.2设计的ARM处理器,也都是64核处理器,内存通道数都一样。二者的微架构不同,工艺不同,最终的芯片产品表现也不同:S2500功耗200W,主频2.1GHz;KP920-7260 功耗180W,主频2.6GHz。性能、功耗方面差异非常大。
③当然I/O链路如PCIE3.0、4.0、5.0也存在差异,内存控制器DDR4、DDR5规格数量不同,也会影响程序的运行效率。
在国产处理器技术路线的选型过程中,为数据中心等应用场景选择合适的处理器至关重要。这需要从多个维度进行综合考量,确保所选处理器能够满足长期运行需求,同时也要保持对新技术发展的敏感性。
首先,需要关注处理器所支持的软硬生态环境的兼容性。这包括操作系统、应用软件、硬件设备等多个方面。一个优秀的处理器应该能够在广泛的软硬件环境中稳定运行,与现有的系统架构和应用程序无缝对接。此外,还需考虑兼容性的深度,即处理器能否充分利用现有系统的特性,实现高效运行。
其次,性能水平是选型过程中的关键因素。处理器的性能应以匹配现实需求为主,既不过剩也不过载。过高的性能可能导致资源浪费和成本增加,而过低的性能则无法满足数据中心的运行需求。因此,在选择处理器时,需要根据数据中心的实际负载情况进行性能评估,确保所选处理器能够满足当前和未来的性能需求。
同时,精度的准确性也是不可忽视的因素。处理器在处理数据时应保持较高精度,避免因牺牲精度而影响数据中心的运行效果。这需要在选择处理器时关注其数据处理算法和精度控制机制,确保在处理复杂任务时能够保持高准确性。
此外,指令集的全面性也是选型过程中的重要考量。一个全面的指令集能够支持更多的操作和功能,提高处理器的灵活性和可扩展性。因此,在选择处理器时,需要关注其指令集是否丰富、是否能够满足数据中心的各种需求。
最后,随着国产处理器技术的不断进步,新的优化技术和方法不断涌现。因此,保持对新技术的关注和学习至关重要。在选择处理器时,需要关注行业内的最新技术动态和发展趋势,以便及时调整选型策略并引入更先进的处理器技术。
