C++ 基准测试并将执行限制到特定CPU
如何约束所有基准测试在单个CPU上运行,例如C0?我正在运行基准测试,希望将我的测试暴露在与目标类似的环境中。我还想得到一个建议,告诉我如何确保在运行基准测试时运行的其他进程最少C++ 基准测试并将执行限制到特定CPU,c++,optimization,timer,benchmarking,d,C++,Optimization,Timer,Benchmarking,D,如何约束所有基准测试在单个CPU上运行,例如C0?我正在运行基准测试,希望将我的测试暴露在与目标类似的环境中。我还想得到一个建议,告诉我如何确保在运行基准测试时运行的其他进程最少 import std.datetime; import std.stdio; void algorithm() { writeln("Hello!"); } void main() { StopWatch stopWatch; stopWatch.start(); algorith
import std.datetime;
import std.stdio;
void algorithm() {
writeln("Hello!");
}
void main() {
StopWatch stopWatch;
stopWatch.start();
algorithm();
stopWatch.stop();
auto duration = stopWatch.peek();
writeln("Hello Duration ==> ", duration);
}
你试过使用numactl吗?这对于内存和进程绑定非常有用,这里是一个例子
比如说
numactl --physcpubind=0 myapp args
将进程myapp绑定到核心0
根据具体的操作,可能会有不同的语法。例如,指定CPU或内存绑定上的特定内核。应用程序的参数格式也可能影响numactl语法
至于减少其他进程的数量,有几种选择,但具体取决于操作系统。如果你真的想在一个背景噪音最小的环境中测试系统,你可以设计一个定制的操作系统映像,只需要打开节点并运行基准测试所需的最小软件包。这种方法类似于许多现代HPC集群中采用的方法。如果您有多台服务器可以使用集群管理工具(如可能有用),那么有许多在线参考设计和方法可用于构建小型集群
其他选项包括关闭任何后台和不必要的程序和应用程序。您还可以关闭不必要的服务并卸载未使用的内核模块
BIOS中的某些电源和性能设置也可能会产生影响。与功耗相关的设置可能会影响频率缩放和节流,这有时会在性能测试期间产生不可预测的结果。这些因素通常会影响产生大量浮点操作的工作负载,但可以扩展到任何CPU密集型操作
在分析代码时,理解问题的约束非常重要。了解代码是CPU限制、内存限制还是IO限制,可以使用于评测的工具以及可以使用的优化技术有很大的不同。为主要单曲设置关联掩码?线程:如果你知道的话,我只是好奇。Windows上有类似的功能吗?我很少使用Windows系统,也从来没有需要在其中一个系统上进行此类性能测试,但我能够找到NUMA支持,因此,这似乎是有可能的,您可以添加更多关于测试环境的细节和/或是否有任何类型的并行可以在算法中使用。假设是单节点环境,有许多方法可以在线程代码中设置CPU相关性。在多节点设置中,例如使用MPI,通常可以在启动时或通过resource manager.google for affinity设置进程关联mask@Matt算法没有并行性,只是一个简单的字符串匹配算法。实际上,我正在比较三种这样的算法,以便知道哪种算法对于特定类型长度的字符串、重复字符等更快。我的测试是在LinuxMint64位上完成的,我有4个处理器,并且对在同一个处理器上执行所有算法感兴趣。我在monodevelop中开发,并在shell中手动运行。我不知道这是否满足了你的要求,我对这个清洁基准测试的世界相对较新。这很有帮助,感谢你,在过去我做过这种测试时,我使用numactl将任务绑定到CPU和内核。减少背景噪音可以通过关闭不必要的服务、卸载不必要的驱动程序来实现。根据运行的代码类型,还可以更改BIOS和内核设置,以提高性能并减少不必要的后台任务。BIOS中的电源和性能设置可能具有大多数相关选项,尽管使用内置虚拟化和/或超线程也会产生影响。谢谢,我刚刚阅读了一些参考资料,确认选择要执行的处理器:numactl-physcpubind=0将是理想的选择。我可能需要研究的另一个参数是,我是否可以控制所有算法的静态变量字符串在每次运行时都存储在RAM中的一个恒定位置。我知道操作系统是负责这一点,但我想知道我可能在这里的控制水平以及。