Abr*_*ile 9 c memory malloc memcpy numa
在尝试提高我在非NUMA /标准PC上的应用程序的速度时,我总是发现瓶颈是调用,malloc()因为即使在多核机器中它也是所有内核之间的共享/同步.
我有一台使用Linux和C的NUMA架构的PC,我有两个问题:
malloc()在每个内核/内存上独立执行而不会阻塞其他内核吗?memcpy()?这可以在每个核心上独立调用,或者在核心中调用它会阻止其他核心吗?我可能错了,但我记得也memcpy()遇到了同样的问题,malloc()即当一个核心使用它时,其他核心必须等待.NUMA机器是共享存储器系统,因此来自任何处理器的存储器访问可以在不阻塞的情况下到达存储器.如果存储器模型是基于消息的,则访问远程存储器将要求执行处理器请求本地处理器执行期望的操作.然而,在NUMA系统中,由于利用存储器链路,远程处理器仍然可能影响封闭处理器的性能,尽管这可能取决于特定的体系结构配置.
对于1,这完全取决于OS和malloc库.操作系统负责将每核/每处理器内存呈现为统一空间或NUMA.Malloc可能是也可能不是NUMA感知的.但从根本上说,malloc实现可能或可能不能与其他请求同时执行.Al(以及相关讨论)的答案更详细地阐述了这一点.
至于2,由于memcpy由一系列加载和存储组成,唯一的影响将是使用其他处理器的内存控制器等的潜在架构效果.