gpt4 book ai didi

c++ - 纳秒级C++程序空转/节流

转载 作者:行者123 更新时间:2023-12-02 10:32:08 25 4
gpt4 key购买 nike

我正在编写一个运行微 Controller 仿真器的C++程序。运行模拟器的线程在这样的循环中这样做:

while(should_run) {
simulator->RunSingleClockCycle();
}

在我的笔记本电脑上,它设法以60 MHz左右的速度运行仿真器。由于我只需要仿真器以16MHz的频率运行,因此我可以在while循环中使用busyloop来降低仿真器的运行速度,以使其以16MHz的频率运行,因为不可能再休眠一纳秒。

由于此线程正在运行仿真器并处于繁忙循环状态,因此导致我的一个内核上的CPU使用率为100%。如果有某种方法可以节流线程,以使其以16MHz的频率运行微 Controller (无忙循环),那么它将减少仿真器的资源使用。

在C++中是否有任何半跨平台(macos + linux)方式实现这种线程限制?

最佳答案

在常规硬件上,您永远都不会获得纳秒级的计时。例如,在我的系统上运行以下代码(不考虑竞争条件):

#include <thread>
#include <chrono>
#include <future>
#include <iostream>



int main()
{
unsigned int counter = 0;
auto res = std::async(std::launch::async, [&]()
{
while (true)
{
std::cout << "Count : " << counter << '\n';
counter = 0;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
});


auto timetoWait = 1'000'000'000 / 16'000'000;
while (true)
{
++counter;
std::this_thread::sleep_for(std::chrono::nanoseconds(timetoWait));
}
}

我每秒最多可以进行600-700k次“操作”。仿真器应该运行在1600万之外。

最好只是忙于循环。

关于c++ - 纳秒级C++程序空转/节流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61856148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com