Gcc, icc или C/C++ компилаторът на Microsoft поддържа ли или знае ли нещо за NUMA?

Ако имам многопроцесорна платка, която има cache-coherent неравномерен достъп до паметта (NUMA), т.е. отделен "northbridges" с отделна RAM за всеки процесор, някой компилатор знае ли как автоматично да разпространява данните в различните системи с памет, така че процесите, работещи в локални нишки, са предимно извличане на техните данни от RAM, свързана с процесора, на който работи нишката?

Имам настройка, при която 1 GB е свързан към процесор 0, 1 GB е свързан към процесор 1 и т.н. до 4 процесора. В кохерентното пространство на паметта физическата памет за RAM на първия процесор е с адреси от 0 до 1GB- 1. За втория процесор е 1GB до 2GB-1 и т.н.

Ще свържат ли компилатори, или може би malloc конкретно, нова памет, разпределена от процес на конкретно ядро, към физическата RAM, свързана с това ядро?


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 и ще се опита да даде вашите страници на процеси от паметта, локална към текущия процесор (източник: U. Drepper, „Какво всеки програмист трябва да знае за паметта“.)

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 и ще се опита да разпредели памет в същия възел.

Вижте http://code.msdn.microsoft.com/64plusLP за някои повече подробности как последните версии на Windows обработват NUMA.

person Michael    schedule 26.01.2010