【问题标题】:Measuring running time of computational geometry algorithms测量计算几何算法的运行时间
【发布时间】:2010-07-14 20:17:39
【问题描述】:

我将在秋季参加关于计算几何的课程,我们将在 C 或 C++ 中实现一些算法并对其进行基准测试。大多数学生生成一些数据集并使用time 命令测量他们的程序,但我想更彻底一点。

我正在考虑编写一个程序来自动生成不同的数据集,使用它们运行我的程序并使用 R 来测试假设和估计参数。

那么...如何更准确地测量程序运行时间?

什么可能与测量相关?

哪些假设可能值得测试(方差、缓存造成的影响等)?

我应该在多台机器上测试我的代码吗?这些机器应该有何不同?

我的总体目标是了解这些算法在实践中的表现、哪些实现技术更好以及硬件的实际表现如何。

【问题讨论】:

  • 看不出这与 C 或 C++ 有什么关系。
  • @Neil Butterworth:OP 说算法将用 C 或 C++ 编写。所以一切都需要以它为基础。

标签: c++ c performance computational-geometry measurement


【解决方案1】:

分析器很棒。 Valgrind 很受欢迎。另外,如果您可以访问某些代码,我建议您在 risc 机器上尝试您的代码。它们的性能特点与 cisc 机器的不同之处很有趣。

【讨论】:

    【解决方案2】:

    您可以使用 Windows API 计时功能(不完全是),您可以使用亚纳秒精确的 RDTSC 内联汇编程序命令(不要忘记该命令及其周围的指令会产生一个小的开销几百个周期,但这不是一个大问题)。

    【讨论】:

      【解决方案3】:

      为了使用程序metrics获得更好的准确性,您必须多次运行程序,例如 100 或 1000。

      有关指标的更多详细信息,请在网络上搜索 metricsprofiling

      请注意,由于在后台运行的东西(例如病毒扫描程序、音乐播放器和其他带有计时器的程序),程序的性能(时间)测量值可能会有所不同。

      您可以在不同的机器上测试您的程序。处理器时钟频率、L1 和 L2 缓存大小、RAM 大小和磁盘速度都是因素(以及同时运行的其他程序/任务的数量)。浮点数也可能是一个因素。

      如果您愿意,您可以通过打印清单的汇编语言来挑战您的编译器以进行各种优化设置。查看哪个设置生成的汇编代码最少或最有效。

      由于您处理数据,请查看数据驱动设计http://www.gamearchitect.net/Articles/DataDrivenDesign.html

      【讨论】:

      【解决方案4】:

      您可以使用 Windows 高性能计数器来获得纳秒精度。从技术上讲,afaik,HPC 可以是任何速度,但您可以查询它的每秒计数,据我所知,大多数 CPU 的计数性能非常高。

      你应该做的就是找一个专业的分析器。这就是他们的目的。然而,更现实的是。

      如果您只是在算法之间进行比较,只要您的机器碰巧在某个领域(奔腾 D、SSD 之类的东西)表现出色,那么只在一台机器上做这件事就没有太大关系。如果您想查看缓存效果,请尝试在机器启动后立即运行算法(确保您获得 Windows 7 的副本,应该对 CS 学生免费),然后让它做一些可能会占用大量缓存的事情,如图像处理,24 小时或说服操作系统缓存它的东西。然后再次运行算法。比较。

      【讨论】:

      • 架构/机器无关紧要的说法是错误的,每个架构都不同,因为随着时间的推移技术的改进。长凳需要一天缓存“填满”的说法也是错误的,L1/L2 缓存填充几个时钟/微秒,所以没有必要“让它运行十年”。
      • 你完全误解了我的帖子。每个架构都是不同的,但算法不会。如果它的性能比率大致相同,则算法的相对性能将保持不变。此外,填充 L1/L2 缓存是为了说服操作系统去做,而不是要求 CPU 去做。
      • 操作系统负责填充它自己的文件缓存 - 在主内存中。 L1/L2 缓存是 CPU 的一部分,由它管理。
      【解决方案5】:

      您没有指定您的平台。如果您使用的是 POSIX 系统(例如 linux),请查看 clock_gettime。这使您可以访问不同类型的时钟,例如挂钟时间或 CPU 时间。您还可以了解时钟的精度。

      由于您愿意对您的数字进行良好的统计,因此您应该经常重复您的实验,以便统计测试给您足够的信心。

      如果您的测量粒度不是太细并且方差很小,这通常对于 10 个左右的探针来说非常好。但是,如果你缩小到小规模,一个简短的功能左右,你可能需要走得更高。

      您还必须确保可重复的实验条件、机器上没有其他负载、足够的可用内存等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多