我有一个 8 个物理内核(16 个具有超线程)Intel 处理器,我试图通过增加我的 C++ 应用程序进程的优先级和我在这个应用程序中启动的四个线程的优先级来充分利用其中的四个内核(我正在使用 OpenMp 来处理线程)。根据微软优先级表
进程优先级 | 线程优先级 | 基本优先级 |
---|---|---|
HIGH_PRIORITY_CLASS | THREAD_PRIORITY_IDLE | 1 |
THREAD_PRIORITY_LOWEST | 11 | |
THREAD_PRIORITY_BELOW_NORMAL | 12 | |
THREAD_PRIORITY_NORMAL | 13 | |
THREAD_PRIORITY_ABOVE_NORMAL | 14 | |
THREAD_PRIORITY_HIGHEST | 15 | |
THREAD_PRIORITY_TIME_CRITICAL | 15 | |
REALTIME_PRIORITY_CLASS | THREAD_PRIORITY_IDLE | 16 |
THREAD_PRIORITY_LOWEST | 22 | |
THREAD_PRIORITY_BELOW_NORMAL | 23 | |
THREAD_PRIORITY_NORMAL | 24 | |
THREAD_PRIORITY_ABOVE_NORMAL | 25 | |
THREAD_PRIORITY_HIGHEST | 26 | |
THREAD_PRIORITY_TIME_CRITICAL | 31 |
当我执行以下操作时,我只看到优先级设置为 15.
int priority;
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
priority = GetThreadPriority(GetCurrentThread());
另外,从任务管理器查看优先级,设置为高不是实时的。
关于如何将它增加到 15 以上的任何提示?
对于默认的 Windows 安装,您需要具有管理员权限才能将进程的优先级提高到
REALTIME_PRIORITY_CLASS
.
SE_INC_BASE_PRIORITY_NAME
:
内容/价值 说明 SE_INC_BASE_PRIORITY_NAME
TEXT(“SeIncreaseBasePriorityPrivilege”)需要增加进程的基本优先级。
用户权限:增加调度优先级。
默认情况下,此权限仅授予管理员组成员,
但您可以使用 Increase scheduling priority 组策略来授予普通用户此权限。