【问题标题】:Why the time needed for executing code on "Hackerrank" site varies significantly?为什么在“Hackerrank”网站上执行代码所需的时间差异很大?
【发布时间】:2020-07-28 08:19:12
【问题描述】:

当您在 www.hackerrank.com 上尝试一些编码挑战并跟踪时间时(例如,在 C++ 中使用“chrono”库),您将看到每次运行代码时您将获得不同的时间以完全相同的代码执行。我估计的方差为 10% 到 30%。代码执行时间在相同代码下显着变化的原因是什么?是哪些因素造成的?

可能是服务器系统;但是否有物理原因(电子元件中的随机过程)?

【问题讨论】:

    标签: performance server computer-science benchmarking cpu-architecture


    【解决方案1】:

    几乎可以肯定只是一个繁忙的系统,您的进程与其他进程竞争 CPU 时间。 (并且即使它自己拥有一个 CPU 也会竞争内存带宽)。


    此外,服务器很可能在具有SMT(同时多线程)的 CPU 上运行,该 CPU 将每个物理内核用作两个逻辑内核,因此进程竞争的“共享执行资源”包括单个 CPU 内核中的内容,不仅仅是 L3 缓存和内存带宽。

    英特尔称他们的 SMT 技术为“hyperthreading”;如今,大多数服务器都在 Intel Xeon CPU 上运行。 AMD Zen 也使用 SMT,因此无论哪种方式,除非服务器管理员禁用它,否则当操作系统将任务安排到单个物理内核的两个逻辑内核上时,它们会彼此减慢一些(减慢量主要取决于它们的平均 IPC(每个周期的指令) - 具有大量分支错误预测的两个线程通常不会看到太多的减速(因此吞吐量几乎翻倍)。但是两个线程都可以自己几乎使 FP 乘法器 ALU 饱和,每个线程都将以接近一半的速度运行(吞吐量几乎为零增益)。

    操作系统“了解”SMT / 超线程,并且可以检测哪些逻辑内核共享一个物理内核。他们尽量避免将线程调度到同一个物理内核,而有一些物理内核的两个线程都处于空闲状态。

    另请参阅涵盖 SMT 的 Modern Microprocessors A 90-Minute Guide!,了解共享的执行资源的背景。


    但是否存在物理原因(电子元件中的随机过程)?

    不,CPU 是确定性的(rdrand 指令除外,它使用真正的模拟电噪声作为随机源)。

    CPU 确实使用动态电压和频率调整来节省电力(空闲与最大涡轮增压,或者如果热限制不允许最大涡轮增压,则介于两者之间。)https://en.wikipedia.org/wiki/Intel_Turbo_Boost / https://en.wikipedia.org/wiki/Dynamic_frequency_scaling

    另请参阅Idiomatic way of performance evaluation?,了解更多微基准测试陷阱/预热效果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      相关资源
      最近更新 更多