C语言 模拟最大 CPU 负载的最简单方法



我必须测试嵌入式计算机在产生的热量和电流消耗的最极端条件下,为此,我想编写一个程序,尽可能多地使用四核CPU的CPU资源(每个内核一个线程)。你能建议一些非常耗费 CPU 的东西吗?

我必须在ARMv7上为Linux执行此操作,并且语言是C或C++,我发现的其他示例要么适用于Windows,要么不适用于C/C++。

我正在我的 Windows 计算机上尝试这样的事情,显然它正在工作,因为它占用了总 CPU 功率的 12%(即 i7 四核每个内核 2 个线程):

float x = 1.5f;
while (1)
{
    x *= sin(x) / atan(x) * tanh(x) * sqrt(x);
}

我不知道如何使它成为多线程。

你的代码是串行的。您有 8 个可用线程(4 个内核 * 每个内核 2 个线程 = 总共 8 个线程),并且当前代码将其中一个线程用于 CPU 1 thread / 8 available = 12.5%。如果你必须编写自己的代码(而不是使用其他人已经建议的预先存在的密集型代码),我建议在你的while循环上方放一个#pragma omp parallel并使用-fopenmp标志进行编译(假设你使用的是MinGW,如果没有,确切的选项可能会有所不同),以便你改用所有可用的线程。

这有点取决于您所说的"最大 CPU 负载"是什么意思。

关于CPU使用率,基本上任何事情都可以工作。请记住,您需要与 CPU 具有内核一样多的线程(或可执行文件的实例)。

但是,您需要记住的是,CPU 使用率并不是 SoC 中功耗的全部和最终目的。您需要记住的其他方面包括:

  • 内存访问。您当前使用的应用程序根本不接触内存。

  • 其他片上外设,如闪存控制器、SPI/I2C/UART 驱动器等。

  • GPU(如果您的 SoC 包含一个)。(这很容易使我到目前为止提到的其他所有内容的电源使用相形见绌!

  • 片外外设:闪存、存储器、显示器、电池充电器,以及设备中的任何其他设备。

它必须是你自己的程序吗?你总是可以只使用一些现有的代码来燃烧很多周期,比如光线追踪器或比特币,然后运行其中的几个。

最新更新