我需要在Windows 7(64位)上针对基准测试将各种C/C++进程固定到机器的特定核心。我的机器有16个内核(2x8)。我试图通过在给定进程的代码中调用SetProcessAffinityMask来实现此目的。假设这是正确的,我不确定如何使用此函数。我已经看过文档,但无法理解第二个参数所需的描述。我在SO或Google上搜索时也没有找到任何示例C/C++用法。
问题1:以一个16核机器(2cpux8)和一个C/C++项目为例,请提供一个说明性示例,说明如何使用SetProcessAffinityMask选择每个16个内核,并解释第二个参数以便我理解。如何将0-15的核心ID转换为等效的位掩码?
问题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;
}