Pull to refresh

Comments 9

UFO just landed and posted this here

Как это не имеет? Ядра имеют одинаковую скорость доступа к памяти, но могут иметь разную скорость доступа к данным в памяти, каналы которых принадлежат другой NUMA node.
Условно:
Дано:
Два процессора( или 2
Чиплета) по 8 ядер.
Сценарий 1:
Доступ к памяти, привязанной к каналам памяти у CPU0 — скорость доступа почти одинаковая
Сценарий 2:
Ядру с CPU0 потребовались данные в памяти, каналы которой привязаны к CPU1- и вот тут-то возникает дополнительный временной лаг на необходимость через интерконнет обратиться к памяти, которой владеет CPU1. И даже если речь о чиплетах внутри какого-нибудь Amd epyc, там неизбежно каналы памяти будут первично принадлежать разным чиплетам, что потребует чиплету 0 через infinity fabric обратиться к чиплету 1 для получения данных, лаг может и меньше чем между интерконнектом между сокетами, но все-равно он не нулевой

Для минусящего в ASCII:
image
И ответьте себе на вопрос одинаковая ли скорость доступа к памяти у ядер?
На мой взгляд именно у ядер одинаковая. А далее возникает вопрос а в памяти какого процессора находятся данные.
NUMA делают не исходя из кол-ва ядер, а исходя из физической архитектуры процессора. И если она предполагает архитектуру как у условных threadripper,epyc, многопроцессорных систем — то начинают включать NUMA Блоки, чтобы планировщик не планировал по возможности потоки одного процесса на ядра из разных NUMA node, чтобы не оказалось что для приложения, обрабатывающего данные, находящиеся на планке в канале A, поток был запланирован на ядра CPU1, не имеющего прямого соединения с каналом A

Всё это замечательно, но всё равно не делает NUMA и многопроцессорность синонимами.

NUMA скорее вытекает из многоядерности и многопроцессорности, увеличивая параллелизм.

Согласен, написал не совсем корректно, подправил.

Надеюсь, будет запись. Прошлый доклад был чудовищно интересным.

Запись будет, но не будет 100% во всеобщем онлайн доступе: только тем, кто купил билеты. А во всеобщем будет доступна только небольшая часть.

1. Почему это процессор не знает о потоках когда есть команда сбросить все регистры в стек, которая как раз для потоков и сделана. Если в вынде и линухе квант постоянныйЮ то это не значит что так везде.
2. С каких пор lock() ассоциируется с Mutex и Semaphore? Это-ж сахар над Monitor.
Про пользу и рудиметарность блокировок ядра — вообще не понял вопроса.
Sign up to leave a comment.