在尝试提高非NUMA/标准PC上应用程序的速度时,我总是发现瓶颈是对malloc()的调用,因为即使在多核计算机中,它也在所有内核之间共享/同步。

我已经有使用Linux和C的具有NUMA架构的PC,并且我有两个问题:

  • 在NUMA计算机中,由于每个内核都具有自己的内存,因此malloc()是否将在每个内核/内存上独立执行而不会阻塞其他内核?
  • 在这些体系结构中,如何对memcpy()进行调用?可以在每个内核上独立调用此功能,还是可以在一次内核上调用它而阻塞其他内核?我可能错了,但我记得memcpy()也遇到了malloc()的问题,即当一个内核正在使用它时,其他内核就必须等待。
  • 最佳答案

    NUMA计算机是共享内存系统,因此可以从任何处理器访问内存而不会阻塞。如果内存模型基于消息,则访问远程内存将要求执行处理器请求本地处理器执行所需的操作。但是,在NUMA系统中,由于使用内存链接,远程处理器可能仍会影响封闭处理器的性能,尽管这可能取决于特定的体系结构配置。

    至于1,这完全取决于OS和malloc库。操作系统负责将每个内核/每个处理器的内存表示为统一空间或NUMA。 Malloc可能支持或可能不支持NUMA。但从根本上说,malloc实现可能与其他请求并发执行。 A1(及相关讨论)的答案更详细地说明了这一点。

    至于2,由于memcpy由一系列加载和存储组成,唯一的影响将再次是使用其他处理器的内存 Controller 等的潜在体系结构影响。

    关于c - malloc/memcpy函数在NUMA上独立运行吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5471012/

    10-09 13:11