Пытаясь увеличить скорость моих приложений на не-NUMA/стандартных ПК, я всегда обнаруживал, что узким местом был вызов malloc(), потому что даже на многоядерных машинах он используется/синхронизируется между всеми ядрами.
У меня есть ПК с архитектурой NUMA, использующий Linux и C, и у меня есть два вопроса:
- В машине NUMA, поскольку каждое ядро снабжено собственной памятью, будет ли
malloc()выполняться независимо на каждом ядре/памяти, не блокируя другие ядра? - Как в этих архитектурах выполняются вызовы
memcpy()? Можно ли это вызывать независимо на каждом ядре или вызов одного ядра заблокирует остальные? Возможно, я ошибаюсь, но я помню, что уmemcpy()была такая же проблема, как и уmalloc(), т.е. когда одно ядро использует его, другим приходится ждать.