Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基准测试并将执行限制到特定CPU_C++_Optimization_Timer_Benchmarking_D - Fatal编程技术网

C++ 基准测试并将执行限制到特定CPU

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

如何约束所有基准测试在单个CPU上运行,例如C0?我正在运行基准测试,希望将我的测试暴露在与目标类似的环境中。我还想得到一个建议,告诉我如何确保在运行基准测试时运行的其他进程最少

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中的一个恒定位置。我知道操作系统是负责这一点,但我想知道我可能在这里的控制水平以及。