科学代码性能的基本结构是什么?


11

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

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


4
当然,您的只是一个样本。您还应该研究Δ如何取决于问题的大小和结构。其次,我建议对代码进行概要分析,尝试将xy分成不同的贡献之和,并针对hw和sw配置分析代码不同部分的性能。ΔΔXÿ
Stefano M

4
排队小姐。那是要考虑的第一件事。内存是许多算法的瓶颈因素。
Deer Hunter

Answers:


13

这个列表还远远不够完整,但是希望它的大小能够提示可能因素的规模。我假设您正在从所选平台上的源代码编译代码。

软件

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

硬件

中央处理器

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

记忆

  • 通道数
  • 速度

硬碟

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

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


我要在CPU中增加内核数量及其SIMD功能。
2013年

@Pedro由于问题是串行求解器,因此我不再使用内核,但是我将添加SIMD。谢谢。
Godric Seer 2013年

1
@GodricSeer我在一台机器上编译然后运行它。然后,使用相同的编译可执行文件,在第二台计算机上运行它。根据您的解释,似乎最好在第二台计算机上从源代码进行重新编译。是这样吗
等腰波振荡

1
@IsopycnalOscillation在特定机器上/针对特定机器进行编译时,可以使用gcc / gfortran选项-march=native或icc / ifort选项-xHOST,这将对基础体系结构进行特定的优化。
Pedro

1
这里的关键是计算机性能不是一维量。上面列出的Godric的所有因素之间的相对平衡可能会有很大的不同,即使对于具有相同制造商(例如Intel)的处理器芯片的计算机也是如此。因此,不同的基准可以显示两个处理器的性能比非常不同。实际上,大多数现代机器都严重缺乏支持科学计算工作负载的内存带宽,这通常是瓶颈。
Brian Borchers

2

X/ÿX-ÿ

其次,您的问题明确排除了软件差异。以我的经验,仔细调整可能会提高性能,因此考虑硬件问题时,请不要忘记软件问题。毕竟,硬件只能执行您给出的指令,如果少给它,它将更快完成。

不必在此扩展太多,但是对于任何给定的问题,都有无数个可以解决该问题的程序。在这些方法中,有些方法所花费的时间少于所有其他方法,这是一个下限。如果未对程序进行仔细调整,请不要认为任何程序处于此下限甚至附近

该链接详细说明了我使用的非传统方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.