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

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

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

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

11
задан Ross Rogers 30 January 2010 в 00:40
поделиться

3 ответа

Ядро Linux знает о NUMA и попытается передать страницы процесса из локальной памяти в текущую (исходную) CPU (исходную): U. Дреппер, "Что каждый программист должен знать о памяти".)

.
7
ответ дан 3 December 2019 в 07:37
поделиться

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

См. http://code.msdn.microsoft.com/64pluslp Для получения дополнительной информации о том, как последние версии Windows обрабатывают Numa.

4
ответ дан 3 December 2019 в 07:37
поделиться

Частичным решением является AJAX. Например, напишите код проверки на сервере и сообщите о том, действителен ли ввод, и попросите выдать сообщение об ошибке, если нет.

-121--3383559-

json _ encode и json _ decode являются отличным началом - таким же источником данных, доступным в php-массивах и json-объектах, как требуется.

json_encoded данные можно обслуживать с помощью < скрипт > тэгов или ajax по вашему усмотрению.

-121--3383560-

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

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

5
ответ дан 3 December 2019 в 07:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: