我经常在一台特定计算机中的一个特定CPU上看到人们基准/配置文件(或建议其他人基准/配置文件)特定情况下的特定代码段;然后(可能错误地)假设这个结果适用于不同情况下的代码(例如,在不同负载下同一内核中的其他逻辑CPU),在广泛的各种非常不同的CPU上(例如“所有64位80x86”)各种不同的计算机(例如,具有不同的RAM时序等)。
我正在寻找的是一种能够在许多条件下为许多CPU生成分析结果的分析器(主要是通过解释代码而不是直接测量);然后使用加权因子(加权因子表示用户关心每个测量案例的程度)组合所有结果,以创建实际有用而且不会产生误导的结果。
是否有适合此描述的分析工具?
答案 0 :(得分:1)
我认为互联网上没有公布的通用性能预测工具;但是可能会有一些内部CPU供应商来优化下一个微体系结构。
valgrind
二进制检测平台具有callgrind
/ cachegrind
(慢)简单模型分析器。 Callgrind计算模型中的基本块执行,如1指令就像1 cpu时钟; cachegrind另外,仪器使用某个2级cache model对内存访问进行建模,也可以对简单branch predictor进行建模。这两种工具都没有来自供应商1的现代OOO CPU和“所有64位80x86”兼容CPU的供应商2的宽解码/执行/退役功能的知识/模型(并且OOO cpus在基本OOO功能和性能方面类似)。
有几个开源项目的OOO CPU模拟器(从慢速到非常慢),如:MARSSx86(http://marss86.org/,2012)基于PTLsim(http://www.facom.ufms.br/~ricardo/Courses/CompArchII/Tools/PTLSim/PTLsimManual.pdf,2007),或狙击手多 - 核心模拟器(借助Graphite框架)。 (还有DRAMSim / DRAMSim2存储器模拟器,它是精确系统仿真所需要的,它用于其他几个模拟器项目;它可以选择用于RISC-V Rocket-Chip模拟器)
您可能对某些(非常非常慢 - 几十KIPS)cycle-accurate simulator / microarchitecture simulator感兴趣,但它们的开源变体并不多。有一些商业模拟器(例如在ARM世界中 - ARM循环模型/ CPAK; ARC nSIM,......);或simplescalar.com。还有内部专有模拟器(我们无法访问它们)。
微体系结构/周期模拟器的唯一公开近似是供应商1的IACA:https://software.intel.com/en-us/articles/intel-architecture-code-analyzer(对于短代码序列的OOO端口规划的不精确部分模型,如没有任何存储器层次结构建模的内部循环)。供应商1还有其他工具“SDE”来估算/调试未来的CPU指令扩展,使用较旧的CPU和PIN二进制重写工具:https://software.intel.com/en-us/articles/intel-software-development-emulator。