我将在秋季学习计算几何,我们将在C或C ++中实现一些算法并对它们进行基准测试。大多数学生使用time
命令生成一些数据集并测量他们的程序,但我想更加彻底。
我正在考虑编写一个程序来自动生成不同的数据集,用它们运行我的程序并使用R来测试假设和估计参数。
那么......你如何更准确地测量程序运行时间?
可能与衡量相关的内容是什么?
测试可能有什么假设(方差,缓存造成的影响等)?
我应该在多台计算机上测试我的代码吗?这些机器应该如何区别?
我的总体目标是了解这些算法在实践中的表现,哪些实施技术更好以及硬件实际执行情况。
答案 0 :(得分:1)
Profilers很棒。 Valgrind很受欢迎。另外,如果你能访问某些机器,我建议你在risc机器上试用你的代码。它们的性能特征与有趣的方式不同于cisc机器。
答案 1 :(得分:0)
您可以使用Windows API计时功能(不完全是这样),您可以使用亚纳秒精确的RDTSC内联汇编程序命令(不要忘记命令及其周围的指令会产生很小的开销)几百个周期,但这不是一个大问题。)
答案 2 :(得分:0)
为了通过程序指标获得更高的准确性,您必须多次运行程序,例如100或1000.
有关指标的详细信息,请在网络上搜索指标和配置文件。
请注意,由于后台运行的程序(例如病毒扫描程序,音乐播放器和其他带有计时器的程序),程序在性能(时间)测量方面可能会有所不同。
您可以在不同的计算机上测试您的程序。处理器时钟速率,L1和L2高速缓存大小,RAM大小和磁盘速度都是因素(以及同时运行的其他程序/任务的数量)。浮点也可能是一个因素。
如果需要,可以通过打印各种优化设置的列表汇编语言来挑战编译器。查看哪个设置生成最少或最有效的汇编代码。
自处理数据以来,请查看数据驱动设计:http://www.gamearchitect.net/Articles/DataDrivenDesign.html
答案 3 :(得分:0)
您可以使用Windows高性能计数器获得纳秒精度。从技术上讲,afaik,HPC可以是任何速度,但你可以查询它的每秒计数,据我所知,大多数CPU的性能计算非常高。
你应该做的只是找一个专业的探查者。这就是他们的目的。但更现实的是。
如果您只是在算法之间进行比较,只要您的机器在一个区域(Pentium D,SSD类型的东西)中没有出色表现,那么在一台机器上进行此操作并不重要。如果你想查看缓存效果,请尝试在机器启动后立即运行算法(确保获得Windows 7的副本,对于CS学生应该是免费的),然后让它做一些可能大量缓存的东西像图像处理一样,24小时或某些东西说服操作系统缓存它。然后再次运行算法。进行比较。
答案 4 :(得分:0)
您没有指定您的平台。如果你在POSIX系统(例如linux)上,请查看clock_gettime
。这使您可以访问不同类型的时钟,例如挂钟时间或CPU时间。您也可以了解时钟的精度。
由于您愿意对您的数字进行良好的统计,您应该经常重复您的实验,以便统计测试给您足够的信心。
如果您的测量结果不是太精细且方差很小,那么对于10个探头来说,这通常非常好。但是如果你去小规模,一个短的功能,你可能需要更高。
此外,您还必须确保可重复的实验条件,机器上没有其他负载,可用的内存等。