将所有处理器电源专用于任务

时间:2010-05-22 04:55:36

标签: c embedded operating-system processor

假设我们手头有一个非常耗费处理器的任务,可以有效地并行化。我们如何将所有几乎所有可用的处理器能力专用于执行该任务?

任务可以是各种各样的事情,并且保存记录数字的迭代Fibonacci数字生成只是一个例子。

4 个答案:

答案 0 :(得分:3)

您可能提供的目标环境细节太少。

通常在使用RTOS时,您可以禁用中断,以便调度程序和中断服务例程都不会运行,或者您可以应用任务锁定以使调度程序不会运行,但ISR将继续运行。通过将任务的优先级提升到最高优先级,您可以获得与任务锁相同的效果。

如果您不使用和RTOS(或没有操作系统),您通常没有那么多的调度控制,但如果您的线程运行而没有让步(即调用导致线程等待的函数),以及其他线程和进程不需要很多循环,你的线程将获得几乎所有的CPU。例如,如果您没有运行其他处理器密集型任务,则Windows中的繁忙循环将大部分时间显示为任务监视器中一个核心的100%使用率。如果您的处理器有多个内核,则必须以某种方式并行化任务以使其全部使用。

I / O调用通常会导致线程阻塞,因此您“保存”结果的要求可能会导致问题。解决方案是将结果缓冲到内存中(直接或作为队列或写缓存),并将输出推迟到所有计算完成。

答案 1 :(得分:0)

操作系统处理CPU专用。大多数情况下,如果你的程序需要更多的功能,它就会得到它,但是在CPU时间请求的队列中,优先级更高(Linux中的“好”)进程会更高。

答案 2 :(得分:0)

嗯,它在很大程度上取决于您的项目的上下文,以及处理器上运行的其他任务。

考虑这些两个例子

1 /处理器只执行一些低优先级的作业,比如在USB,CAN,SPI或你拥有的任何东西上进行通信,你在计算过程中并不关心(进程密集型任务) ),例如因为commnication层等待此任务的输出。然后,您可以(静态或动态地,根据您的操作系统)分配此任务非常高优先级。您也可以通过任何同步avaibale停止其他任务(消息,任务暂停...)

2 /处理器正在执行高优先级作业,甚至是小型处理器(看门狗,调节,测量),因此您可以将任务分配给较低优先级拿剩余的微处理器电源,这就足够了!

所以,也许你会对如何为任务分配优先级有疑问......但这一切都取决于你的固件架构以及你在手动操作系统或大'主'之间做出的选择!

如果您需要精确答案,请提供更多详细信息。

答案 3 :(得分:0)

删除所有不必要的进程。

关闭由此进程或其他进程导致的每个磁盘访问和其他阻塞IO。如果你必须这样做,那就做晚了,批量处理。在并行线程中使用多个内核并设置CPU到进程或核心到进程的关联可能会有所帮助 - 最后一个可能是特定于操作系统的。

将流程设置为高优先级,以便获得更大的份额。