对特定CPU进行基准测试和限制执行

时间:2015-07-23 17:24:37

标签: c++ optimization timer benchmarking d

如何限制所有基准测试在单个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);
}

2 个答案:

答案 0 :(得分:4)

您是否尝试过使用numactl?它对于内存和进程绑定非常有用,这里是link to the man page

例如

numactl --physcpubind=0 myapp args

将进程myapp绑定到核心0。

根据您想要做什么,可能会有不同的语法。例如,指定CPU或内存绑定上的特定核心。应用程序的参数格式也可能会影响numactl语法。

至于减少其他进程的数量,有几种选择,但具体情况与操作系统有关。如果您真的想在背景噪音最小的环境中测试系统,您可以设计一个自定义操作系统映像,只需要打开节点并运行基准测试所需的最小程序包。这种方法类似于许多现代HPC集群中采用的方法。如果您使用像Warewulf这样的集群管理工具可以使用多个服务器可能很有用,那么可以在线使用许多参考设计和配方来构建小型集群。

其他选项包括关闭任何背景和不必要的程序和应用程序。您还可以关闭不必要的服务并卸载未使用的内核模块。

BIOS中的某些电源和性能设置也可能会产生影响。与功耗相关的设置可能会影响频率调整和限制等操作,这有时会在性能测试期间产生不可预测的结果。这些因素通常会影响产生大量浮点运算的工作负载,但可以扩展到任何CPU密集型操作。

在分析代码时,了解问题的约束非常重要。知道代码是否受CPU限制,内存限制或IO限制可以对用于分析的工具以及可以使用的优化技术产生很大的影响。

答案 1 :(得分:0)

为主(单个?)线程设置亲和力掩码:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686247(v=vs.85).aspx