如何检测是否可以激活其他处理

时间:2011-11-28 10:51:12

标签: c++ cpu-usage

动机很难解释所以我将提供一个例子:假设你每秒都收到大量的样本,你的任务是对它们进行分类。

让我们这样说:你有两个分类器:heuristicFast和heuristicSlow。因此,假设您为每个样本运行heuristicFast(),然后如果结果接近未定(假设[0.45,0.55]范围为分类器,其中0为1级,1为class2),我运行更精确的heuristicSlow。

现在的问题是这是实时系统,所以我想确保我不会重载CPU(我正在使用线程),即使对heuristicFast的高度调用返回结果[0.45,0.55] ] 范围。

实现这一目标的最佳方法是什么?

我最好的想法是拥有heuristicSlow的entrycount,如果entrycount是>则不要输入它。 number_of_cores / 2

    std::atomic<int> entrycount(0);
    //...
    if (classificationNotClear(result_heuristic_fast) && (entrycount<kMaxConcurrantCalls)) 
    {
        entrycount++;
        final_result=heuristicSlow();
        entrycount--;
    }
    else
        final_result=result_heuristic_fast;

//...

2 个答案:

答案 0 :(得分:2)

由于您正在构建实时系统,因此您可以获得关键信息:分类和启发式的最大允许运行时间。

您可以简单地计算完全快速启发式的剩余时间(总时间减去样本计数乘以快速启发式时间),并确定慢启发式应用程序的适用次数。将此数字写入计数器并减少。

答案 1 :(得分:1)

更优秀的解决方案:

按不确定性(即abs(result-0.5))对快速启发式结果进行排序,并在剩余时间内为尽可能多的情况运行慢启发式算法。