科学代码性能的底层结构是什么?

计算科学 表现 迭代法 纳维斯托克斯
2021-12-16 03:41:31

考虑两台具有不同硬件和软件配置的计算机。在每个平台上运行完全相同的串行 Navier-Stokes 代码时,分别需要 x 和 y 时间为计算机 1 和 2 执行一次迭代。在这种情况下,Δ=xy, 是计算机 1 和计算机 2 之间的迭代时间差。

可能是什么影响的幅度Δ? 一个明显的候选者是 CPU,我的主要问题是是否有其他因素可能会影响Δ与CPU之间的硬件差异相同吗?

2个回答

该列表远未完成,但希望它的大小能够暗示可能因素的规模。我假设您正在从您选择的平台上的源代码编译代码。

软件

  • 标准库性能
  • 林。阿尔格。库性能(如果软件链接到外部库)
  • 编译器选择
  • 编译器优化
  • 编译器标志
  • 后台进程(如果操作系统不同,可能会有很大差异)

硬件

中央处理器

  • 时钟速度
  • 架构(相同的指令在不同的架构上可能需要不同数量的周期)
  • 缓存大小
  • 缓存延迟
  • SIMD(单指令多数据)能力

记忆

  • 通道数
  • 速度

硬盘

  • 读/写速度(主要只对写入结果很重要,因此这取决于您为 NS 求解器将输出写入文件的频率,但对于执行图像处理等其他程序的其他程序可能很重要)

这一切都忽略了不同制造商为使他们的芯片在市场上占据优势而包含的小技巧和功能。最大的问题是许多稀疏线性代数库受内存限制。进行稀疏矩阵乘法涉及大量数据移动而没有很多实际的触发器。

首先,@Godric 的回答很好,但我建议你考虑一下x/y, 不是xy,所以你不必用问题的大小来限定它。

其次,您的问题特别排除了软件方面的差异。根据我的经验,仔细调整的性能回报可能是很大的因素,因此在考虑硬件问题时,不要忘记软件问题。毕竟,硬件只能执行你给它的指令,你给它的指令越少,它就会越快完成。

不要过多地扩展它,但是对于任何给定的问题,都有无数的程序可以解决它。其中,有些比其他所有花费的时间更少,这是一个下限。如果没有经过仔细调整,不要假设任何程序处于甚至接近这个下限。

这个链接详细解释了我使用的非正统方法。