Sid*_*Bob 5 c++ windows openmp
我的程序结构如下,这是一个巨大的CPU占用.整个系统的IO速度慢,我几乎无法移动鼠标指针......
...为什么?我以为THREAD_MODE_BACKGROUND_BEGIN应该阻止这个?
#pragma omp parallel
{
SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_BEGIN);
#pragma omp for
for (...)
{
doTruckLoadsOfComputation();
if (omp_get_thread_num()==0)
doTinyAmountOfIO(); //progress indicator
}
SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_END);
}
Run Code Online (Sandbox Code Playgroud)
更新:
添加SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL);修复CPU占用问题,但问题仍然存在,为什么单独的后台模式不够?
评论太长了
您有更简单的替代方案:START /BELOWNORMAL <yourexe>可以以较低优先级运行任何任意进程,无需修改源代码。
如果您想在应用程序内执行此操作,更好的选择是使用Job 对象。使用JOBOBJECT_CPU_RATE_CONTROL_INFORMATION来细粒度控制您的应用程序可以消耗多少 CPU。作业与线程关联相比最重要的好处是作业限制适用于整个进程以及受控进程生成的任何进程。
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |