Как обеспечить соответствие процессорного сокета? - PullRequest
2 голосов
/ 06 октября 2011

Я знаю, что есть способы обеспечить привязку потоков / процессов для привязки определенного потока / процесса к процессору / ядру в различных ОС.Мне просто интересно, есть ли способ обеспечить соответствие процессорного сокета.то есть для принудительного связывания потока / процесса с сокетом ЦП, который может содержать многопроцессорный чип.

Вопрос возникает из-за того, что количество процессоров на чип увеличивается с каждым днем.

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Если я правильно понимаю ваш вопрос, все, что вам нужно сделать, это установить соответствие процесса или потока равным набору ядер, которые находятся на процессоре.

В зависимости от вашей операционной системы, существуют способы получения этой информации. Например, в Linux вы можете посмотреть /proc/cpuinfo и посмотреть, какие ядра принадлежат данному процессору.

1 голос
/ 06 октября 2011

Единственный способ сделать это - узнать, какие идентификаторы потоков сопоставлены с каким сокетом (или узлом NUMA).Получив эту информацию, вы можете использовать обычные методы привязки потоков для ее применения.

Если вы работаете в Linux, вы можете использовать библиотеку numactl.h , чтобы выяснить, какиеаппаратный поток принадлежит тому узлу NUMA.Хотя узел NUMA не всегда один-к-одному с сокетом, на сегодняшний день это относится ко всем пост-Core 2 Xeon и всем системам Opteron.

В Windows вы можете использовать GetNumaNodeProcessorMask , чтобы выяснить, какие аппаратные потоки находятся на узле.

В случае, когда они не отображаются один на один (например, Core 2 Xeon, где оба сокета находятся на одном и том же сокетеNUMA), это, вероятно, не будет иметь никакого значения с точки зрения производительности, если только вы не пытаетесь микроуправлять общим кешем на каждом процессоре.

...