Единственный способ сделать это - узнать, какие идентификаторы потоков сопоставлены с каким сокетом (или узлом NUMA).Получив эту информацию, вы можете использовать обычные методы привязки потоков для ее применения.
Если вы работаете в Linux, вы можете использовать библиотеку numactl.h , чтобы выяснить, какиеаппаратный поток принадлежит тому узлу NUMA.Хотя узел NUMA не всегда один-к-одному с сокетом, на сегодняшний день это относится ко всем пост-Core 2 Xeon и всем системам Opteron.
В Windows вы можете использовать GetNumaNodeProcessorMask , чтобы выяснить, какие аппаратные потоки находятся на узле.
В случае, когда они не отображаются один на один (например, Core 2 Xeon, где оба сокета находятся на одном и том же сокетеNUMA), это, вероятно, не будет иметь никакого значения с точки зрения производительности, если только вы не пытаетесь микроуправлять общим кешем на каждом процессоре.