. 8 Исследование проводилось в стандартном режиме тестирования подсистемы памяти любой платформы.

Измерялись: средняя реальная пропускная способность памяти (ПСП) при операциях простого линейного чтения и записи данных из памяти/в память, максимальная реальная ПСП при операциях чтения (с программной предвыборкой данных, Software Prefetch) и записи (методом прямого сохранения данных, Non-Temporal Store), а также латентность памяти при псевдослучайном и случайном обходе 16-МБ блока данных.

3 Память Corsair для систем на базе процессоров Opteron предоставлена компанией Neo Group Некоторым отличием от общепринятой методологии явилась «привязка» тестов к определенному физическому процессору — возможность, уже давно реализованная в RMMA, да все никак не опробованная на практике. Ее суть такова: размещение блока данных в памяти всегда осуществляется первым процессором (что для NUMA-aware OS означает, что блок будет выделен в физической памяти первого процессора), после чего запуск тестов может быть осуществлен как на том же, первом, так и на любом другом присутствующем в системе процессоре. Это позволяет нам оценить скорость обмена данными между процессором и памятью (и прочие характеристики) — как «своей», так и «чужой», принадлежащей соседнему процессору.

Симметричный режим «2+2», No Node Interleave Средняя реальная ПСП на чтение, МБ/с Зададимся лучше более важным вопросом: означают ли наши результаты то, что можно сэкономить и использовать более дешевый вариант построения подсистемы памяти? Делать этого однозначно не стоит, причем как в случае NUMA-оптимизированных приложений, так и без них. В первом случае причина ясна — хорошо оптимизированные многопоточные приложения, если они требовательны к ПСП, получат максимум от симметричной организации подсистемы памяти. А во втором случае, симметричная организация «2+2» вместо асимметричной «4+0» позволяет задействовать режим Node Interleave. или просто выиграть от правильной «привязки» приложений к процессорам.

Симметричный режим «2+2», Node Interleave 2890 (±3) 1415 (±2) 48. 4 1878 (±29) 1932 (±31) 2417 (±56) 5878 Минимальная латентность случайного доступа, нс В заключение, проведем краткий сравнительный анализ всех возможных вариантов — платформ, оснащенных двухканальной памятью DDR-400 (на самом деле, с одинаковым успехом можно говорить и о двухканальной DDR2-400, -533, -667 и т. , если не забывать, что 200-МГц процессорная шина по-прежнему ограничивает ПСП на уровне 6. 4 ГБ/с), и приложений — однопоточных (одного или нескольких) и многопоточных (обычных и NUMA-оптимизированных)

. 0 1418 (±2) 6344 CPU 1 Таким образом, результаты проведенных нами исследований и их анализа позволяют заключить, что NUMA — однозначно более совершенная архитектура памяти по сравнению с традиционными SMP-решениями, способная в большинстве случаев обеспечить над ними преимущество по низкоуровневым характеристикам подсистемы памяти. Пиковая пропускная способность подсистемы памяти, ГБ/с 1616 (±2) 60. 5 Обращение процессора к «чужой» памяти (CPU 1) приводит к заметному ухудшению всех показателей подсистемы памяти. Прежде всего, это двукратное падение максимальной реальной ПСП на чтение/запись (получается как бы одноканальный режим доступа, но с чем связано такое ограничение — не совсем понятно, поскольку частота HyperTransport в нашем случае составляет 1000 МГц, что обеспечивает пиковую пропускную способность межпроцессорного соединения 4. Снижение средней реальной ПСП менее ощутимо, а задержки возрастают на 50-60%. Что же предлагает AMD в своем варианте неоднородной архитектуры памяти NUMA (ее полное название — Cache-Coherent Non-Uniform Memory Architecture, ccNUMA)? Все предельно просто — поскольку процессоры AMD64 обладают интегрированным контроллером памяти, каждый процессор в многопроцессорной системе наделен своей «собственной» памятью.

При этом, процессоры связаны между собой посредством шины HyperTransport, не имеющей прямого отношения к подсистеме памяти (чего не скажешь о традиционной FSB). NUMA-aware многопоточное приложение 96. 7 Однако «правильная организация доступа к памяти» здесь — ключевое и критически важное понятие. Платформы с архитектурой NUMA должны поддерживаться как со стороны ОС (хотя бы для того, чтобы сама система и приложения могли «увидеть» память всех процессоров, как единый блок памяти), так и со стороны приложений.

Последние версии Windows XP (SP2) и Windows Server 2003 полностью поддерживают NUMA-системы (для 32-разрядных версий необходимо включение режима Physical Address Extension (ключ /PAE в boot. Ini), который, к счастью, для AMD64-платформ включен по умолчанию, поскольку необходим для реализации Data Execution Prevention)

. Что касается приложений, здесь, прежде всего, имеется в виду нежелательность возникновения ситуации, когда приложение размещает свои данные в области памяти одного процессора, после чего обращается к ним с другого процессора.

А как влияет соблюдение или несоблюдение этой рекомендации, мы сейчас и рассмотрим. Конфигурация тестового стенда и ПО (двухканальная DDR-400) Доступ процессора к «своей» памяти (CPU 0) дает вполне привычную картину, пожалуй, даже отлично выглядящую, учитывая, что используется регистровая память DDR-400 с не самыми быстрыми таймингами (3-3-3-8). Включение Bank Interleave приводит к улучшению некоторых показателей ПСП (особенно — средней реальной ПСП на запись, с одновременным увеличением разброса ее величины) и практически не влияет на задержки.

Настроек подсистемы памяти в BIOS двухпроцессорной системы AMD Opteron оказалось довольно много. А именно, настраиваются как минимум три параметра (по принципу Disabled/Enabled, или Disabled/Auto), что дает нам общее число вариантов — 8. Это: Node Interleave (чередование памяти между «узлами», то есть интегрированными контроллерами процессоров — замечательная возможность, которую мы подробно рассмотрим ниже), Bank Interleave (классическое чередование доступа к логическим банкам модулей памяти), а также Memory Swizzle (нечто похожее на Bank Interleave, но так до конца и не понятое :)).

Поскольку изменение последнего параметра не оказывало ощутимого влияния на результаты тестов, было решено оставить его по умолчанию (Enabled). Остальные параметры варьировались, и в первой серии тестов была выбрана симметричная конфигурация «2+2» (по 2 модуля на каждый процессор), Node Interleave был отключен, а параметр Bank Interleave варьировался между Disabled и Auto (последнее означает, что чередование банков осуществляется в соответствии с характеристиками самого модуля).

7 2375 (±2) С одной стороны, эта схема обеспечивает практически одинаковые задержки при доступе к памяти со стороны любого процессора. Но с другой стороны, общая системная шина является потенциальным узким местом всей подсистемы памяти по такому не менее (и даже намного более) важному показателю, как пропускная способность. Действительно, если многопоточное приложение оказывается требовательным к пропускной способности, его производительность будет во многом сдерживаться такой организацией подсистемы памяти.

Многопоточное приложение 60. 4 Симметричные NUMA-системы практически во всех случаях обладают преимуществом как над SMP, так и несимметричными NUMA-системами. Достигнуть пиковой ПСП 12.

8 ГБ/с на таких платформах могут либо специальные NUMA-оптимизированные приложения, либо.

два обычных, однопоточных приложения, «раскиданных» каждое по своему процессору. В случае NUMA-системы задержки при обращении процессора к «своей» памяти оказываются невысоки (в особенности, по сравнению с SMP-системой). В то же время, доступ к «чужой» памяти, принадлежащей другому процессору, сопровождается более высокими задержками.

Понятие «неоднородности» такой организации памяти берет свое начало именно отсюда. Вместе с тем, нетрудно догадаться, что при правильной организации доступа к памяти (когда каждый процессор оперирует данными, находящимися исключительно в «своей» памяти) такая схема будет выгодно отличаться от классического SMP-решения благодаря отсутствию ограничения по пропускной способности общей системной шины. Суммарная пиковая пропускная способность подсистемы памяти в этом случае будет равняться удвоенной пропускной способности используемых модулей памяти. 3 Средняя реальная ПСП на запись, МБ/с 96. 6 2369 (±2) Вот мы и добрались до самого интересного момента — решения для обычных приложений, ничего не знающих об архитектуре NUMA.

Суть его весьма проста, и заключается она в чередовании памяти по 4-КБ страницам между модулями, находящимися на разных «узлах» (контроллерах памяти). В случае двухпроцессорной системы можно сказать, что все четные страницы «достаются» первому процессору, а все нечетные — второму. В результате получается — независимо от того, на какой из процессоров приходится момент размещения данных в памяти, данные будут размещены поровну в пространстве памяти обоих процессоров.

И независимо от того, на каком из процессоров исполняется код, половина обращений к памяти будет относиться к «своей» памяти, а половина — к «чужой». Что же, посмотрим, как это проявляет себя на практике. 4 Таким образом, «неоднородность» подсистемы памяти, о которой мы упоминали в теоретической части — налицо (и, разумеется, не только в терминах латентности, но и ПСП). Что подтверждает необходимость использования не только NUMA-aware OS, но и специально оптимизированных многопоточных приложений, в которых каждый поток самостоятельно выделяет память под свои данные и работает со своей областью памяти.

В противном случае (однопоточные приложения и многопоточные, «не задумывающиеся» о правильном с точки зрения NUMA размещении данных в памяти) следует ожидать снижение производительности подсистемы памяти. Рассмотрим это на примере однопоточных приложений, на сегодняшний день по-прежнему представляющих большинство ПО. Известно, что в многопроцессорной системе диспетчер ОС назначает приложениям процессорное время так, чтобы разделить его поровну между всеми имеющимися процессорами (таким образом, в случае двухпроцессорной системы примерно 50% приходится на первый процессор, и 50% — на второй).

Таким образом, момент размещения памяти обязательно придется на какой-нибудь из процессоров (например, CPU0), в то время как код приложения, осуществляющий доступ к этим данным, будет исполняться как на CPU0, так и на CPU1. И половину времени подсистема памяти будет работать с полной эффективностью, а половину — со вдвое сниженной, как показывают наши тесты. Поэтому, как это ни странно, эффективность работы с памятью таких приложений можно повысить, принудительно «привязав» их к одному из процессоров (задав Process Affinity), что, в общем-то, сделать не так и сложно.

1897 (±20) Неоднородная архитектура памяти (NUMA) как особый вид организации подсистемы памяти существует уже довольно давно. Ее наиболее наглядный и доступный вариант представлен подсистемой памяти многопроцессорных платформ AMD Opteron, и существует он, можно сказать, с момента анонса самих процессоров AMD Opteron 200-х и 800-х серий, поддерживающих многопроцессорные конфигурации. Вместе с тем, изучение этой архитектуры памяти (здесь и далее мы будем иметь в виду исключительно ее «AMD-шный вариант») на низком уровне, анализ ее преимуществ и недостатков до сих пор не проводились.

Этим мы и решили заняться в настоящей статье, благо в распоряжении нашей тестовой лаборатории оказалась очередная двухпроцессорная система на базе процессоров AMD Opteron. Но для начала, напомним основные особенности этой архитектуры. SMP 4025 Наконец, что же дает симметричным NUMA-платформам включение режима Node Interleave? Преимущество можно увидеть только в одном случае — неоптимизированных многопоточных приложений (да еще и, конечно же, при условии, что каждый из потоков будет интенсивно обращаться с данными, находящимися в памяти).

Если же грамотно запускать однопоточные приложения, либо использовать NUMA-оптимизированные — включение этого режима однозначно не нужно, оно может лишь ухудшить производительность. 0 Максимальная латентность псевдослучайного доступа, нс Заметим, однако, что примерно такие же величины мы получили бы и без включения Node Interleave — для простого однопоточного приложения, не «привязанного» к определенному процессору.

Более того, принудительная «привязка» приложения к процессору, как мы говорили выше, позволяет даже увеличить ПСП и снизить латентности. Таким образом, единственная адекватная область применения Node Interleave — это лишь неоптимизированные многопоточные приложения, которые в противном случае будут упираться в ПСП одного из контроллеров памяти. Заключение Максимальная реальная ПСП на чтение, МБ/с 6143 2914 (±3) *в случае «привязки» приложения к одному из процессоров 47.

6 Упрощенная блок-схема NUMA-системы Плата Tyan Thunder K8WE с установленными в неё процессорами Opteron 250 и кулерами Titan TTC-K8ATB/825 предоставлена компанией ТРАДИЦИЯ. Симметричная NUMA Упрощенная блок-схема SMP-системы Максимальная латентность случайного доступа, нс 44. 1 2387 (±2) Итак, SMP-системы (двухпроцессорные Intel Xeon, а также. любые существующие на сегодняшний день двухъядерные процессоры) — теоретическая ПСП во всех случаях ограничена цифрой 6.

4 ГБ/с, ибо это — пиковая ПС единой и единственной процессорной шины. 7 Bank Interleave = Auto Несколько однопоточных приложений 60.

2 Полная симметрия по всем показателям, «неоднородности» архитектуры памяти — как не бывало! Задержки при доступе к памяти при этом составляют истинно среднюю величину (например, при псевдослучайном доступе: (45 + 70) / 2 = 57. 5 нс), с ПСП дела обстоят несколько хуже — вместо ожидаемой теоретической величины (6. 8 МБ/с мы наблюдаем лишь 4. 3 3684 (±33) Недорогие, несимметричные NUMA-системы выглядят не многим лучше, а то и хуже традиционных SMP-систем.

Хуже — в случае однопоточных приложений, если их не «привязывать» к тому процессору, который обращается с памятью. Пиковая ПСП во всех остальных случаях здесь также ограничена цифрой 6. 4 ГБ/с — то есть пропускной способностью единственного имеющегося в системе интерфейса памяти.

8 *) 2065 (±34) 3623 (±5) 3618 (±3) Несимметричная NUMA 6358 CPU 0 70. 3 4231 6249 2397 (±3)

  • Процессоры: 2x Opteron 250, 2.

    4 ГГц

  • Материнская плата: TYAN Thunder K8WE (S2895), BIOS версии 2003Q2 от 03/28/2005
  • Чипсет: NVIDIA nForce Professional 2200 & 2050, AMD 8131 PCI-X Tunnel
  • Память: 4x Corsair 512MB DDR-400 ECC Registered, 3-3-3-8
  • Видео: Leadtek PX350 TDH, nVidia PCX5900
  • HDD: WD Raptor WD360, SATA, 10000 rpm, 36Gb
  • Драйверы: NVIDIA Forceware 77. 72 Результаты исследований Минимальная латентность псевдослучайного доступа, нс Non-Uniform Memory Architecture (NUMA): исследование подсистемы памяти двухпроцессорных платформ AMD Opteron с помощью RightMark Memory Analyzer 4026 Большинство типовых многопроцессорных систем реализовано в виде симметричной многопроцессорной архитектуры (SMP), предоставляющей всем процессорам общую системную шину (а, следовательно, и шину памяти). 6286 Хуже будет обстоять дело в случае неоптимизированных под NUMA многопоточных приложений, так же размещающих свои данные в памяти лишь одного из процессоров.

    Такая конфигурация может даже уступать традиционным SMP-вариантам — суммарная пропускная способность будет ограничена пропускной способностью одного из контроллеров памяти, а задержки доступа будут неравномерными. Тем не менее, даже в этом непростом случае архитектура NUMA в ее AMD-шном воплощении предусматривает выход из ситуации, о котором ниже. Несимметричный режим «4+0» 2893 (±3) Максимальная реальная ПСП на запись, МБ/с 3128 4029 Симметричная NUMA, Node Interleave А пока мы решили немного. «удешевить» систему — то есть имитировать ситуацию, преобладающую среди более дешевых двухпроцессорных плат под AMD Opteron, когда модули памяти можно установить всего для одного процессора — для второго процессора такая память принудительно становится «чужой». Собственно, исходя из теоретических предположений, ожидать сильно отличающихся результатов в этом случае явно не стоит — ситуация отличается ровно тем, что у «своего» процессора памяти стало в 2 раза больше, а у «чужого» ее как не было, так и нет.

    Поэтому приводим мы их исключительно для полноты картины. Так оно и есть — теория подтверждается практикой. Небольшие отличия наблюдаются лишь при включении Bank Interleave — в этом случае несколько снижается ПСП и увеличивается ее разброс (столь сильный разброс связан с плавным возрастанием ПСП на запись при увеличении размера блока от 4 до 16 МБ).

    Вместе с тем, в рамках нашего исследования это не столь важно, поскольку отражает лишь внутренние особенности функционирования Bank Interleave при использовании либо двух, либо четырех конкретных модулей памяти. 4 *) Однопоточное приложение 47. 6 malloc в VC рантайме — это очень тонкий слой над HeapAlloc (_malloc_base->_heap_alloc->HeapAlloc), который в свою очередь является субаллокатором над VirtualAlloc (VirtualAlloc умеет выделять только страницами, а Heap Manager затем «нарезает» эти страницы на блоки меньшего размера по требованию клиента).

    В данном случае единственное существенное отличие от Linux в том, что Windows память коммитит, а Linux — оверкоммитит (по умолчанию). Current: 3588096 Peak: 3588096 Commit: 1076162560 Peak commit: 1076162560 1,4k 0 Альтернатива SMP для производительных вычислений – это MPP (Massive Parallel Processing). 3,7k 3 5,6k 12

  • Использование исключительно локальной памяти (все запросы обрабатываются на первом NUMA узле, в памяти которого лежит тестовая таблица) Эта информация – начало поддержки NUMA вашим приложением.

    За ним должна следовать непосредственно попытка максимально эффективно использовать NUMA. Общие слова на эту тему уже сказаны, для дальнейших пояснений перейду к частному примеру. У меня сложилось несколько другое представление о степени воздействия NUMA на производительность приложения.

    При работе с вычислительными задачами мы сталкивались с двухразовым изменением производительности. Даже простое однопоточное приложение запущенное на вычислительных системах с NUMA показывает очень нестабильное поведение из-за того, что может перейти на вычислительное ядро другого сокета. Изменение производительности на 10-15 процентов довольно распространенная ситуация.

    И действительно, приходится использовать установку affinity чтобы получать более-менее стабильные цифры.

  • Intel Optane Memory M15 — быстрее, чем М10 N*(sizeof(double))+1024, #pragma omp for private(i) Я сталкивалась. Но не в Win API, а в библиотеках, где есть ф-и для установки привязки к ЦПУ.

    А так как я говорю «в общем», а не про конкретную систему, то оно — так.

  • Intel Pohoiki Beach — нейроморфная система с 8 млн нейронов JVM 1
    . 6 это что? Таким образом, от железа мы плавно перешли к программному обеспечению и производительности NUMA систем.

    Итак, NUMA поддерживается следующими OS: Windows Server 2003, Windows XP 64-bit и Windows Vista – до 64 логических процессоров, Windows 7, Windows Server 2008 R2 – полная поддержка. 6 и выше, UNIX OS — Solaris и HP-Unix.

  • Intel oneAPI Project: архитектур много, API один
  • оптимизация кода Пара замечаний.
  • Intel Optane DC Persistent Memory, год спустя Тест выполнен исключительно технически грамотно, так что сомневаться в его достоверности не приходится. За деталями отошлю к исходному посту Linchi (на английском).

    } //end omp parallel 8,1k 22 И начнем с отрицания отрицания. То есть, посмотрим на Uniform Memory Access (Однородный доступ к памяти), известный также так SMP (Symmetric Multi Processing – Симметричная Многопроцессорная Обработка). Если говорить о базах данных, то NUMA поддерживается Oracle8i, Oracle9i, Oracle10g и Oracle11g, а также SQL Server 2005 и SQL Server 2008.

    А теперь самое интересное. Попробуем узнать, насколько же в реальности доступ к памяти в NUMA неоднороден, а производительность реальных приложений, соответственно, зависит от этой неоднородности. Данные реального сервера на Xeon 5500 приводятся в техническом описании Dell -“ задержка доступа к локальной памяти составляет 70 наносекунд, к удаленной – 100 наносекунд (т. 4 раза), пропускная способность локальной памяти превосходит удаленную на 40% ”.

    Free(mem); Пять способов оптимизации кода для Android 5. 0 Lollipop

  • Блог компании Intel, Автор статьи забыла упомянуть что Intel в переходе на NUMA был в роли догоняющего, что в процессорах AMD NUMA появилась гораздо раньше. //OpenMP on TRIAD loop… 3,3k 2 Пример результата Coreinfo: Calculating Cross-NUMA Node Access Cost. 0;} //Parallelized TRIAD loop… GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)); 15,3k 36 9,1k 14 MEM_RESERVE | MEM_COMMIT, NUMA дебютировала в архитектуре Nehalem сначала в десктопной версии Core i7, а уж потом в Xeon: Nehalem-based_Xeon The first processor released with the Nehalem architecture is the desktop Intel Core i7, which was released in November 2008 Поддержка NUMA реализована и в Java SE 6u2, JVM 1.

    6 Ну я бы так не сказал.

  • Улучшаем производительность ПО с инструментами Intel для разработчика. Численное моделирование астрофизических объектов Упомянуть про AMD я не забыла, а специально предоставила такую возможность комментаторам.

    Вы ей воспользовались. 2k 8 Старший инженер по программным решениям, Intel malloc(1Gb) - check Так нужно ли оптимизировать для NUMA? Зайду издалека. Хотя у меня нет времени убираться дома, зато есть время читать советы по уборке :).

    И один из полезных, виденных мной советов такой — чтобы меньше убираться, надо избежать потенциального беспорядка, для чего старайтесь хранить все вещи как можно ближе к месту их использования. Вы это про какую «систему» говорите? Я почему-то, за всю свою практику, ни разу не сталкивался со случаем «несработавшего» affinity ;) NUMизматика, NUMерология и просто о NUMA / Блог компании Intel / Хабр Про потоки — я тоже не понимаю, как влияет их число на данный тест, (скорее всего, это особенности реализации SQL, с которыми я не знакома). Но не понимаю, почему будут сильные ухудшения на больших блейдах в этом случае (используются 2 узла).

    Просто хочу уточнить, этот случай является худшим только с точки зрения самого теста (100% local vs 100% remote, не совсем понимаю при чем здесь количество потоков — наверное я что-то упускаю из виду). Все таки два Xeon-а в одном пакете — это далеко не худший случай с т.

    тестового окружения. На больших блейдах скорость доступа может отличаться в разы или даже на порядок. Вот как выглядит двухсокетная NUMA система Intel Xeon (а именно там дебютировала Intel NUMA) с контроллерами памяти, интегрированными в CPU

    .

    > Но надо понимать, что во-первых, affinity срабатывает не всегда (для системы это, скорее, намек, чем приказ)…

  • Конкурс «Я — эксперт Intel Studio» с суперпризами для разработчиков #pragma omp parallel +37 39,2k 57 159 Но главный вопрос, это насколько разница в «стоимости» доступа к NUMA памяти скажется на производительности реального приложения в целом. При подготовке этой статьи мне попался очень интересный пост специалиста по SQL Linchi Shea, оценивающий влияние NUMA на производительность SQL Server. Приемы использования масочных регистров в AVX512 коде MongoDB and NUMA, Non-Uniform Access Memory, do not work well together.

    When running MongoDB on NUMA hardware, disable NUMA for MongoDB and running with an interleave memory policy. NUMA can cause a number of operational problems with MongoDB, including slow performance for periods of time or high system processor usage. Org/manual/administration/production-notes/#production-numa +365 72,9k 196 334 Мое изначальное представление тоже было похожим — 10-15% в идеале, и до двух раз в худшем случае. Но сомневаться в результатах из поста у меня оснований нет.

    Возможные их объяснения — хорошая железная реализация NUMA (удаленная память медленнее всего на 20-30%), отсутствие синхронизации кешей и записи в память, а главное, сама структура SQL, в которой основное время тратится не на доступ к памяти, а на что-то другое. KMP_AFFINITY=compact,0,verbose auto mem = malloc(1024 * 1024 * 1024); Если BIOS разрешает NUMA, то операционная система сможет узнать о конфигурации NUMA узлов из System Resource Affinity Table (SRAT) в Advanced Configuration and Power Interface (ACPI). Приложения могут получить такую информацию, используя библиотеку libnuma в Linux, а сами понимаете, на каких системах — Windows NUMA interface.

    6,5k 33 Current: 1482752 Peak: 3588096 Commit: 315392 Peak commit: 1076162560 #include a[j] = b[j]+scalar*c[j];

  • 29 марта 2012 в 18:10 И, наконец, NUMA (Non-Uniform Memory Access). Эта архитектура объединяет положительные черты SMP и MPP.

    NUMA система разделяется на множественные узлы, имеющие доступ как к своей локальной памяти, так и к памяти других узлов (логично называемой «удаленной»). Естественно, доступ к удаленной памяти оказывается гораздо медленнее, чем к локальной. Оттуда и название – «неоднородный доступ к памяти».

    Это – не только название, но и недостаток архитектуры NUMA, для смягчения которого может потребоваться специальная оптимизация софта, о которой — дальше. « Поддержка NUMA» означает следующее – продукт знает о топологии NUMA машины, на которой исполняется, и пытается использовать ее максимально эффективно, то есть, организовать работу потоков так, чтобы они в полной мере использовали память своего узла (того, на котором исполняется данный поток) и минимально – чужих. Ключевое слово здесь – «пытается», так как сделать это в общем случае возможно не всегда.

    MPP — архитектура, разделяющая систему на многочисленные узлы, процессоры в которых имеют доступ исключительно к локальным ресурсам. MPP прекрасно масштабируется, но не столь прекрасно программируется. А именно — не обеспечивает встроенного механизма обмена данными между узлами.

    То есть, реализовывать коммуникации, распределение и планировку задач на узлах должен выполняемый на MPP софт, что подходит далеко не для всех задач и их программистов. +19 7,1k 32 14 Следующий простой пример, использующий OpenMP, main() { a* = (char *) VirtualAlloc(NULL, //same for b* and c* } //end main for (j=0; j

    То есть, в терминах музыкальных инструментов, это уже даже не баян, а, скорее, варган. 8,5k 48 В Core i7 системах была только одна NUMA node, поэтому вся память там локальная. Чтобы прочувствовать все проблемы NUMA требуется хотя бы двухпроцессорная конфигурация.

    Поддержка NUMA реализована и в Java SE 6u2, JVM 1. NET runtime на вышеупомянутых версиях Windows.

    Mem = nullptr;

  • Гибридный накопитель Intel Optane Memory H10 — приводим характеристики #include Но надо понимать, что во-первых, affinity срабатывает не всегда (для системы это, скорее, намек, чем приказ), а во-вторых, положительный эффект от установки Affinity будет только в том случае, когда вы полностью контролируете систему, то есть, на ней работает исключительно ваше приложение, а сама ОС не сильно нагружает систему. Если же, как это чаще всего бывает, приложений несколько, причем, они интенсивно используют CPU и память, пытаясь при этом привязаться к одному процессору, ничего не зная друг о друге, да и ОС конкурирует за те же ресурсы, то от использования Affinity может быть больше вреда, чем пользы Производительность.

    2k 6 про malloc — да, все так, как вы пишете, но я не вижу противоречий со своими утверждениями. Ru На рисунке не показан кеш процессоров, но все три уровня кеш памяти, конечно же, там есть.

    А значит, есть и особенность NUMA, о которой необходимо сказать: NUMA, используемая в системах Intel, поддерживает когерентность кешей и разделяемой памяти (то есть, соответствие данных между кешами разных CPU), поэтому ее иногда называют ccNUMA — cache coherent NUMA. Это означает наличие специального аппаратного решения для согласования содержимого кешей, а также и памяти, когда более чем один кеш хранит одну и ту же ее часть. Конечно, такое общение кешей ухудшает общую производительность системы, но без него программировать систему с непредсказуемым текущим состоянием данных было бы крайне интересно затруднительно.

    Для уменьшения влияния этого эффекта, следует избегать ситуаций, когда несколько процессоров сразу работают с одним блоком памяти (не обязательно с одной переменной!). Именно так и пытаются поступить продукты, поддерживающие NUMA. For(i=0;i

  • Intel готова начать производство памяти MRAM можно подружить с NUMA, обеспечив инициализацию данных каждым потоком, вызывающую соответствующую привязку физической памяти к использующему ее узлу: 15,6k 32 printf("Fre-e-e-e-e-edom\n");
  • Intel GPU SGX — храните свои данные на видеокарте.

    С гарантией

  • Использование исключительно удаленной памяти (все запросы обрабатываются на втором узле NUMA, с использованием той же таблицы в памяти первого узла. Printf("WS: %d\tPeak WS: %d\tCommit: %d\tPeak commit: %d\n", pmc. PeakPagefileUsage);
  • Дата основания 18 июля 1968 г.

    +152 49,8k 119 208 7,7k 12 Но, несмотря на это, толковых статей, объясняющих, что это, а главное, как с этим эффективно работать, нет Позвольте не согласиться, а как же уже упомянутый в комментариях Ulrich Drepper с его статьей What Every Programmer Should Know About Memory (также есть ее перевод на русский язык). На мой взгляд он довольно не плохо рассказывает про основы NUMA и библиотеку libnuma (конечно про Windows там ни чего не упоминается).

  • Новая библиотека x86 SIMD интринсиков — immintrin debug
  • 29 сентября 2015 в 09:00 Процессоры здесь соединены QPI — Intel QuickPath соединением «точка-точка» с высокой пропускной способностью и низкой задержкой передачи.

    SMP – это архитектура, в которой процессоры соединены с общей системной памятью при помощи шины или подобного соединения)симметрично, и имеют к ней равный однородный доступ. Именно так, как показано на схеме ниже (на примере двух CPU), были устроены все многопроцессорные машины Intel, когда контроллер памяти (MCH/MGCH), больше известный как «Северный Мост» (“NorthBridge”) находился в чипсете. Approximate Cross-NUMA Node Access Cost (relative to fastest): Здесь же приведу результаты – оценку количества обработки запросов во времени для обоих сценариев:

  • Процессорный мегазапуск Intel — пополнение рядов Но, несмотря на это, толковых статей, объясняющих, что это, а главное, как с этим эффективно работать, нет.

    Данный пост, исправляющий эту ситуацию, предназначен прежде всего для тех, кто ничего не знает про NUMA, но также содержит кое-что интересное и для знатоков-NUMизматов, а главное, он облегчает жизнь мне, инженеру Intel, так как отныне всех интересующихся NUMA русскоязычных разработчиков буду отсылать к нему. Три Богатыря #pragma omp parallel for private(j) Fre-e-e-e-e-edom

  • 31 июля 2015 в 13:00 +23 33,6k 168 15 PROCESS_MEMORY_COUNTERS pmc = {}; PAGE_READWRITE); 00 01 JVM 1.

    Для установки Affinity имеются соответствующие API как в Linux, так и в Windows ( стандартный Windows API, и NUMA WinAPI). Также функциональность для установки привязки присутствуют во многих параллельных библиотеках (например, в показанном выше примере OpenMP за это отвечает переменная окружения KMP_AFFINITY ). Полностью поддерживает NUMA математическая библиотека Intel – MKL.

    Хотя, может это как раз и есть тот случай, о котором писал автор: продукт, не поддерживающий NUMA, то есть, просто не знающий о ней, что совсем не мешает ему запускаться и исполняться на NUMA-системах, покажет не худшую производительность, чем официально поддерживающий NUMA Теперь замените «вещи» на «данные», а «квартиру» на «программу» и увидите один из способов достичь порядка в ваших программах. Но это как раз и будет NUMA-оптимизация, о которой вы сейчас и прочли. Теги: printf("malloc(1Gb) - %s\n", (mem != nullptr) ? "check" : "uncheck"); Как видите, разница составляет всего чуть более 5%! Результат приятно удивительный.

    И это – случай максимальной разницы, достигаемый при 32 одновременно работающих потоках с запросами (при другом количестве потоков разница еще меньше).

  • Летняя интернатура Intel 0x7E3 ждет своих студентов Измерения проводились на HP ProLiant 360 G7 с двумя Intel Xeon X5690, дающими в сумме 12 процессоров (24 логических CPU) и представляли собой сравнение двух сценариев работы Microsoft SQL Server 2008 R2 Enterprise X64: У меня на столе стоит именно такая машина — desktop Intel Core i7 с NUMA. Но я на 99% уверена, что такие машины не продавались, официальные продажи начались с Xeon.

    Отдельным пунктом здесь надо упомянуть Affinity — принудительную привязку потоков к конкретным процессорам, предотвращающую возможную переброску операционной системой потоков между процессорами и могущую вызвать потенциальный «отрыв» потоков от своей используемой локальной памяти. Vikky13 24 января 2013 в 16:33 NUMизматика, NUMерология и просто о NUMA

  • Intel NUC: модели 2019 года и планы на 2020 Как минимум в Windows affinity mask на процессе или потоке является обязательной к «исполнению». То есть поток всегда планируется ТОЛЬКО на процессорах, входящих в маску/группу.

    Измерения проводились на HP ProLiant 360 G7 с двумя Intel Xeon X5690 Как видите, разница составляет всего чуть более 5%! Результат приятно удивительный. И это – случай максимальной разницы, достигаемый при 32 одновременно работающих потоках с запросами ИМХО, вот эта статейка тоже будет интересна на эту тему. Правда сам я пока не дочитал :( www. Pdf Поэтому может случиться, что продукт, не поддерживающий NUMA, то есть, просто не знающий о ней, что совсем не мешает ему запускаться и исполняться на NUMA-системах, покажет не худшую производительность, чем официально поддерживающий NUMA.

    Пример такого продукта — знаменитая библиотека Intel Threading Building Blocks. Простейший тест: #include Недостаток SMP очевиден — при росте числа CPU, шина становится узким местом, значительно ограничивая производительность приложений, интенсивно использующих память.

    Именно поэтому SMP системы почти не масштабируются, два-три десятка процессоров для них – это уже теоретический предел. Прежде всего, посмотрим теоретические данные. Согласно презентациям Intel, «задержка доступа к удаленной памяти ~ 1.

    7x доступа к локальной памяти, а пропускная способность локальной памяти может быть до двух раз больше, чем удаленной» Именно поэтому в BIOS мультисокетных серверов с NUMA есть специальный пункт « Разрешить\запретить NUMA». Конечно же, от запрета NUMA в BIOS топология системы никак не изменится — удаленная память не приблизится. Произойдет только следующее – система не сообщит ОС и ПО о том, что она NUMA, а значит, распределение памяти и планировка потоков будут «обычными», такими как на симметричных многопроцессорных системах.

  • Intel Quartus Prime — все что нужно для работы с FPGA Intel
  • sql server Допустим, вы выделяете память при помощи malloc. Если дело происходит в Linux, то malloc только резервирует память, а ее физическое выделение происходит только при фактическом обращении к данной памяти. В этом случае память автоматически выделится на том узле, который ее и использует, что очень хорошо для NUMA.

    В Windows же malloc работает по-другому, он выделяет физическую память непосредственно при аллоцировании, то есть, на узле выделяющего память потока. Поэтому она вполне может оказаться удаленной для других потоков, ее использующих. Но есть в Windows и дружественное к NUMA выделение памяти.

    Это VirtualAlloc, который может работать точно также, как malloc в Linux. Еще более продвинутый вариант — VirtualAllocExNuma из Windows NUMA API. На вашей реальной системе эти приблизительные данные могут быть получены при помощи бесплатной утилиты Microsoft Sysinternals — CoreInfo, оценивающей относительную «стоимость» доступа к памяти разных узлов NUMA.

    Результат, конечно, сильно приблизительный, но некоторые выводы сделать позовляет

    .