Поддерживает ли компилятор gcc, icc или Microsoft C/C++ или знает что-нибудь о NUMA?

Если у меня есть многопроцессорная плата с cache-coherent неоднородный доступ к памяти ( NUMA ), т.е. отдельный "северные мосты" с отдельной оперативной памятью для каждого процессора, знает ли какой-нибудь компилятор, как автоматически распределять данные по разным системам памяти, чтобы процессы, работающие в локальных потоках, в основном извлечение их данных из ОЗУ, связанного с процессором, на котором работает поток?

У меня есть установка, в которой 1 ГБ подключен к процессору 0, 1 ГБ подключен к процессору 1 и т. д. до 4 процессоров. В когерентном пространстве памяти физическая память для ОЗУ на 1-м процессоре имеет адреса от 0 до 1 ГБ. 1. Для второго процессора это от 1ГБ до 2ГБ-1 и так далее.

Будут ли какие-либо компиляторы или, возможно, malloc в частности, связывать новую память, выделенную процессом на определенном ядре, с физической оперативной памятью, связанной с этим ядром?


person Ross Rogers    schedule 26.01.2010    source источник
comment
Ради интереса, кто производитель платы?   -  person rama-jka toti    schedule 27.01.2010
comment
Я задал вопрос так, но моя первоначальная проблема связана с количеством ядер на 1 кристалле и стоимостью доступа к памяти для ядер в разных частях чипа для разных областей памяти.   -  person Ross Rogers    schedule 27.01.2010


Ответы (3)


Ядро Linux знает о NUMA и попытается передать страницы вашего процесса из локальной памяти текущему ЦП (источник: У. Дреппер, "Что каждый программист должен знать о памяти".)

person Nikolai Fetissov    schedule 26.01.2010
comment
..и на самом деле это должно быть сделано в ядре, потому что обычно процессы пользовательского пространства не контролируют то, как их линейные адреса отображаются на физические адреса, так как они не контролируют свои таблицы страниц . - person caf; 27.01.2010

Распределение памяти с учетом NUMA не выполняется во время компиляции. Делать подобные предположения было бы плохо для переносимости.

В Linux это функция ядра, хотя вы можете управлять ею во время выполнения с помощью numactl, set_mempolicy или libnuma.

person Eric Seppanen    schedule 26.01.2010

Для платформ MS компилятор не знает о NUMA. Однако система поддерживает NUMA и попытается выделить память на том же узле.

Дополнительные сведения о том, как последние версии Windows обрабатывают NUMA.

person Michael    schedule 26.01.2010