Если у меня есть мультипроцессорная плата, которая имеет когерентный кэшем неоднородный доступ к памяти (NUMA), т.е. отдельные "северные мосты" с отдельной RAM для каждого процессора, какой-либо компилятор знает, как автоматически распространить данные через различные системы памяти, таким образом, что процессы, работающие над локальными потоками, главным образом получают свои данные из RAM, связанной с процессором, на котором работает поток?
У меня есть установка, где 1 ГБ присоединен к процессору 0, 1 ГБ присоединен к процессору 1, и c. до 4 процессоров. В когерентном пространстве памяти физическая память для RAM на 1-м процессоре является адресами 0 к 1GB-1. Для второго процессора это - 1 ГБ к 2GB-1 и так далее.
Будут любые компиляторы, или возможно malloc
а именно, свяжите новую память alloc'd процессом на определенном ядре к физической RAM, связанной с тем ядром?
Ядро Linux знает о NUMA и попытается передать страницы процесса из локальной памяти в текущую (исходную) CPU (исходную): U. Дреппер, "Что каждый программист должен знать о памяти".)
.Для платформ MS компилятор не знает о NUMA. Однако система знает NUMA и попытается выделить память в одном узле.
См. http://code.msdn.microsoft.com/64pluslp Для получения дополнительной информации о том, как последние версии Windows обрабатывают Numa.
Частичным решением является AJAX. Например, напишите код проверки на сервере и сообщите о том, действителен ли ввод, и попросите выдать сообщение об ошибке, если нет.
-121--3383559- json _ encode и json _ decode
являются отличным началом - таким же источником данных, доступным в php-массивах и json-объектах, как требуется.
json_encoded данные можно обслуживать с помощью < скрипт >
тэгов или ajax по вашему усмотрению.
Выделение памяти с поддержкой NUMA не выполняется во время компиляции. Делать подобные предположения было бы плохо для портативности.
В Linux это функция ядра, хотя вы можете управлять ею во время выполнения с помощью numactl
или наборов _ mempolicy
или с помощью libnuma
.