场景和目的

一台计算机会因为当前CPU的占率不同情况表现出不同的稳定性和实时性以及其他性能情况。需要编写一个程序将一个CPU或者多个CPU占用到指定值的占用率,比如50%。很多工具都是直接一颗CPU占满,意义不大。故此特地写一个代码。

源代码

#include <thread>
#include <unistd.h>
#include <signal.h>
#include <functional>

#define SLEEP_TIME 8
#define SLEEP_RATE 2

bool b_exit = false;

static void my_handler(int sig)
{
    b_exit = true;
}

void cpu_run(int p_cpuid)
{
    cpu_set_t set;
    CPU_ZERO(&set);
    CPU_SET(p_cpuid, &set);
    pthread_setaffinity_np(pthread_self(), sizeof(set), &set);

    int64_t t = 0;
    while (!b_exit)
    {
        for (int i = 0; i < 1024; i++)
        {
            for (int j = 0; j < 1024 * 1024; j++)
            {
                t = 123456789;
                t *= 123456789;
            }
            if (i % SLEEP_RATE == 0)
            {
                std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIME));
            }
        }
    }
    if (b_exit) exit(0);
}

int main()
{
    signal(SIGINT, my_handler);
    int cpu_num = sysconf(_SC_NPROCESSORS_CONF);
    for (int i = 0; i < cpu_num; i++)
    {
        std::thread *p = new std::thread(std::bind(cpu_run, i));
    }
    std::this_thread::sleep_for(std::chrono::hours(24));
    return 0;
}

使用方式

g++ main.cpp -lpthread -std=c++17
./a.out

打开另个窗口使用HTOP观察所有CPU占比。由于各种各样的CPU性能差异,可以通过调节SLEEP_TIME和SLEEP_RATE的值来达到不同的占比情况。(注意:此处默认会将所有CPU达到同一个使用率,如果不想耗费所有CPU简单修改一下代码即可)。想要结束在运行程序窗口Ctrl+C即可。

使用效果

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐