我使用C#
在.NET Framework 4.5上运行我希望衡量一下代码性能,但还有一些额外的复杂功能,我想在机器(不同的硬件)之间进行比较。
核心目标之一是提出比较算法的基准(algo X vs algo Y使用数据集Z),如果我一直使用相同的硬件但我也希望能够选择分配这些算法许多机器的性能测试 - 大多不同。
如何有效衡量特定机器的性能?
我目前正在使用与Fibonacci套件混合的System.Diagnostics.StopWatch类,试图测量机器可以处理多少序列以使用X刻度/毫秒。但是你可能已经知道这种技术不是很精确。
Stopwatch.Frequency中的答案是什么?
有人有更好的建议吗?
添加信息-----
示例:比较非多线程的算法(核心数量无关紧要),比如运行顺序扫描和使用红/黑树之间的区别。
答案 0 :(得分:1)
例如,我曾经和某人讨论过.NET中的静态方法和线程,我对几台机器进行了测试。运行相同的可执行文件,单核机器的性能优于双核机器。显然问题是.NET运行时使用不同的内部算法来确定安全性(即它在双核机器上放置的锁比单核上需要的多,或者单核工作站和运行时之间的运行时间不同双核服务器)。关键是你甚至无法运行相同的可执行文件来获得不同的基线。
因此,如果您在机器A和B上运行算法X并记录差异(假设机器B的速度是原来的两倍),则无法在机器A上运行算法Y并假设算法的运行速度是原来的两倍。在机器B上执行。
您必须考虑的因素的复杂性太大了。你可以做的就是在不同的机器上比较相同的东西,如果你正在测试机器性能,或者在同一台机器上测试不同的东西等等。
答案 1 :(得分:0)
不幸的是,实际上不可能提出一个准确的指标来比较一台计算机在算法X上的A时间与另一台计算机在算法时间B上的时间。例如,如果算法X是与Y相比,内存密集程度更高,而计算机A的内存较慢,而且与B相比CPU速度较快,算法X看起来很糟糕,即使它在计算机B上运行速度比Y更快。
你可以做的是在每台机器上运行每个算法,看看哪种算法具有最佳的平均运行时间,内存使用率等。
您也可以尝试提出一个指标来比较机器,就像您似乎正在尝试的那样。如果你持续几秒钟,并且所有算法都依赖于大致相同比例的CPU,磁盘,内存和各种CPU缓存级别,那么这应该是相当准确的。
答案 2 :(得分:0)
不仅仅是机器。可能有多忙,有什么。
取决于您是否正在寻找最低限度的硬件推荐,或者您正在考虑针对环境进行调整。
假设在一台机器上运行两个版本的算法之间的算法只有算法是iffy,除了通常“慢”或“更快”
比较不同的机器超出单核和多核等差异,这是徒劳的。