Example usage of SetProcessAffinityMask in C++?

前端 未结 2 965
情话喂你
情话喂你 2020-12-09 04:42

I need to pin various c/c++ processes to specific cores on a machine for benchmarking only on Windows 7 64-bit. My machine has 16 cores (2x8). I\'m trying to do this by call

2条回答
  •  既然无缘
    2020-12-09 05:14

    As already mentioned, it's a bitmask. You may want to use the result of GetProcessAffinityMask, incase your process or system doesn't have access to all the cores already. Here's what I came up with.

    #include 
    #include 
    using namespace std; 
    
    int main () { 
    
        HANDLE process = GetCurrentProcess(); 
    
        DWORD_PTR processAffinityMask;
        DWORD_PTR systemAffinityMask;
    
        if (!GetProcessAffinityMask(process, &processAffinityMask, &systemAffinityMask))
            return -1;
    
        int core = 2; /* set this to the core you want your process to run on */
        DWORD_PTR mask=0x1;
        for (int bit=0, currentCore=1; bit < 64; bit++)
        {
            if (mask & processAffinityMask)
            {
                if (currentCore != core)
                {
                    processAffinityMask &= ~mask;
                }
                currentCore++;
            }
            mask = mask << 1;
        }
    
        BOOL success = SetProcessAffinityMask(process, processAffinityMask); 
    
        cout << success << endl; 
    
        return 0; 
    
    } 
    

提交回复
热议问题