我必须测试嵌入式计算机的最极端条件下产生的热量和电流消耗,为此我想编写一个程序,尽可能多地使用CPU资源四核CPU(每个一个线程)核心)。你能提出一些非常 CPU饥饿的东西吗?
我必须在ARMv7上为Linux执行此操作,并且语言是C或C ++,我发现的其他示例要么是Windows,要么是C / C ++。
我在我的Windows计算机上尝试这样的事情,显然它正在工作,因为它需要12%的总CPU功率(这是每核心i7四核2线程):
float x = 1.5f;
while (1)
{
x *= sin(x) / atan(x) * tanh(x) * sqrt(x);
}
我不知道如何让它成为多线程。
答案 0 :(得分:4)
您的代码是连续的。您有八个可用线程(4个核心*每个核心2个线程=总共8个线程),并且您当前的代码使用其中一个用于CPU的1 thread / 8 available = 12.5%
。如果您必须编写自己的代码(而不是使用其他人已经建议的预先存在的密集代码),我建议将#pragma omp parallel
置于while
循环之上并使用{{1标志(假设您正在使用MinGW,如果没有,确切的选项可能会有所不同),以便您使用所有可用的线程。
答案 1 :(得分:2)
这取决于“最大CPU负载”的含义。
关于CPU使用率,基本上任何事情都可行。请记住,您需要尽可能多的线程(或可执行文件的多个实例),因为您的CPU具有内核。
但是,您需要记住的是,CPU使用率并不是SoC中功耗的全部和最终结果。您需要记住的其他方面包括:
内存访问。您当前使用的应用程序根本不会触及内存。
其他片上外设,如闪存控制器,SPI / I2C / UART驱动器等。
GPU,如果您的SoC包含一个。 (这很容易使我到目前为止提到的其他所有东西的功耗相形见绌!)
脱片外设:闪存,内存,显示器,电池充电器,设备中的任何其他设备。
答案 2 :(得分:0)
它必须是您自己的程序吗?您可以随时使用一些现有代码来刻录很多周期,例如光线跟踪器或比特币,并运行其中的几个。