Windows Server / Datacenter:设置> 64核心的CPU亲和力

SetThreadAffinityMask()允许为64个逻辑核心(处理器)设置关联掩码。 但是,Windows Datacenter最多可以有64个CPU,每个CPU有许多内核(请参见此处 )。

如何为64个内核设置线程?

PS。 我在C#编码,所以一个.Net的答案是理想的,但在C中的API也很好。

我使用以下代码来设置处理器组和CPU的关联:

[StructLayout(LayoutKind.Sequential, Pack = 4)] private struct _GROUP_AFFINITY { public UIntPtr Mask; [MarshalAs(UnmanagedType.U2)] public ushort Group; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3, ArraySubType = UnmanagedType.U2)] public ushort[] Reserved; } [DllImport("kernel32", SetLastError = true)] private static extern Boolean SetThreadGroupAffinity( IntPtr hThread, ref _GROUP_AFFINITY GroupAffinity, ref _GROUP_AFFINITY PreviousGroupAffinity); [DllImport("kernel32", SetLastError = true)] private static extern IntPtr GetCurrentThread(); /// <summary> /// Sets the processor group and the processor cpu affinity of the current thread. /// </summary> /// <param name="group">A processor group number.</param> /// <param name="cpus">A list of CPU numbers. The values should be /// between 0 and <see cref="Environment.ProcessorCount"/>.</param> public static void SetThreadProcessorAffinity(ushort groupId, params int[] cpus) { if (cpus == null) throw new ArgumentNullException(nameof(cpus)); if (cpus.Length == 0) throw new ArgumentException("You must specify at least one CPU.", nameof(cpus)); // Supports up to 64 processors long cpuMask = 0; foreach (var cpu in cpus) { if (cpu < 0 || cpu >= Environment.ProcessorCount) throw new ArgumentException("Invalid CPU number."); cpuMask |= 1L << cpu; } var hThread = GetCurrentThread(); var previousAffinity = new _GROUP_AFFINITY {Reserved = new ushort[3]}; var newAffinity = new _GROUP_AFFINITY { Group = groupId, Mask = new UIntPtr((ulong) cpuMask), Reserved = new ushort[3] }; SetThreadGroupAffinity(hThread, ref newAffinity, ref previousAffinity); } 

根据MSDN,SetThreadAffinityMask()设置当前处理器组的亲和力,每个处理器组可以有64个逻辑核心。 使用SetThreadGroupAffinity()更改您的组。 有关更多信息,请参阅http://msdn.microsoft.com/zh-CN/library/windows/desktop/dd405503(v=vs.85).aspx 。

要使用64个以上的CPU,必须考虑处理器组。 有关详细信息,请参阅MSDN。

处理器组