gpt4 book ai didi

c++ - 如何在并行架构中进行可靠的性能测试?

转载 作者:搜寻专家 更新时间:2023-10-31 01:08:18 25 4
gpt4 key购买 nike

我正在计算几何领域开发数据结构和算法。能够可靠地比较两种算法的运行时间对我来说非常重要。

问题是,当我运行一个算法并且它运行了 30 分钟时,我不能说这 30 分钟用于执行算法而不是用于播放 mp3。

我有一台运行 Ubuntu 13.04 的 Intel® Core™ i7-2600 CPU @ 3.40GHz × 8 处理器计算机。我所有的程序都是用 C++ 编写的,并且只使用用 C 或 C++ 编写的库。

  1. 这是否意味着我可以安全地并行运行比方说 6 个实验,而操作系统会将另外 2 个用于自己的业务?

  2. 我应该将实验作为一个程序的 6 个线程运行,还是制作 6 个不同的可执行文件并运行它们?

  3. 这两种方法有什么区别?

最佳答案

如果您想要一致的结果,一次运行一个基准测试将提高这种可能性 - 因为不同的任务更有可能:

  1. 从一个 CPU 转移到另一个 CPU(从而使已加载到缓存中的任何内容变得不那么有意义)。
  2. 造成内存带宽和缓存压力,从而干扰另一个进程。

如果您在播放 MP3、下载大片长片等的同时运行基准测试,那么您将不知道这是否确实干扰了您的 CPU 密集型任务(或干扰了多少)-如果音乐开始变得断断续续,或者下载超时......你可以,可能会告诉相反的方式......;)与并行运行多个任务一样,缓存和从处理器到处理器核心的移动将是最重要的影响.

您可能会发现,如果您在“一切都开启”的情况下运行一组基准测试,而在“一切都关闭”的情况下运行另一组基准测试,则两者没有任何区别。但您可能还会发现它确实有所作为。

这同样适用于运行一个或多个基准测试。尝试并行运行 6,并比较每个基准测试本身在没有其他运行时运行时所花费的时间。

你只有通过比较不同的情况才知道。

如果没有影响,您可以在进行基准测试时继续播放音乐、下载最新的大片等,因为您知道 0.01% 的差异对应用程序的整体性能并不重要。

根据经验,我发现如果您在后台运行一堆其他“轻”的东西通常不会有太大区别,但它会增加从一次运行到另一次运行的变化量。同样,如果基准测试运行半小时,这可能无关紧要 - 毕竟,从一次运行到另一次运行,您可能在该运行时有足够的变化,仅仅是从 CPU 和操作系统中的一般事物变化,纯粹通过“事情不会每次都完全相同”的因素,它不会产生足够的差异。

如果您正在进行小的优化,例如切换编译器选项,使结果有 0.5% 的差异,但运行之间的差异为 1%,那么您需要运行几次以显示实际差异,并且干扰越多在其他过程中,您将无法衡量微小变化的可能性就越大。有时,许多小的更改一起可以产生显着的差异(例如,如果您移动一个函数 F1 以允许它内联,然后对函数 F2 执行相同的操作,它们一起相当于 1% 的改进,但单独它是不可测量的,因为它隐藏在噪音中)。噪音越大,您就越有可能“错过”一些微小但最终有益的变化。

关于c++ - 如何在并行架构中进行可靠的性能测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18174628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com