我需要将各种 c/c++ 进程固定到机器上的特定内核,以便仅在 Windows 7 64 位上进行基准测试。我的机器有 16 个内核 (2x8)。我试图通过从给定进程的代码中调用 SetProcessAffinityMask 来做到这一点。假设这是正确的,我不确定如何准确使用此功能。我已经看过文档,但无法理解它对第二个参数的描述。我也没有在 SO 或 Google 上搜索过任何示例 c/c++ 用法。
问题1:以16核机器(2cpux8)和ac / c ++项目为例,请您提供一个说明性示例,说明如何使用SetProcessAffinityMask选择16个内核中的每一个,并解释第二个参数以供我理解?如何将核心 id 从 0-15 转换为等效的位掩码?
问题 2:如果在一个 cpu 上有 2x8 核而不是 16 核,对使用有影响吗?还是一样的用法?
非常感谢。这是我到目前为止所拥有的。
#include <Windows.h>
#include <iostream>
using namespace std;
int main () {
HANDLE process = GetCurrentProcess();
DWORD_PTR processAffinityMask = 0; /// What to do here?
BOOL success = SetProcessAffinityMask(process, processAffinityMask);
cout << success << endl;
return 0;
}