An affinity mask is a bit mask indicating what processor(s) a thread or process should be run on by the scheduler of an operating system.[1] Setting the affinity mask for certain processes running under Windows can be useful as there are several system processes (especially on domain controllers) that are restricted to the first CPU / Core. So, excluding the first CPU might lead to better application performance.
Windows API
Thread affinity in Microsoft Windows can be specified with the SetThreadAffinityMask function.[1] Forcing of each OpenMP thread to distinctive cores in Windows can be accomplished by means of the following C code:
#include<windows.h>#include<omp.h>// Set OpenMP thread affinityvoidset_thread_affinity(){#pragma omp parallel default(shared){DWORD_PTRmask=(DWORD_PTR)1<<omp_get_thread_num();SetThreadAffinityMask(GetCurrentThread(),mask);}}