对于内存绑定算法,我得到了以下强缩放曲线:
一些评论:
显然,在四个过程之后,缩放落后于理论上最优的一个。我的解释四是每个插槽只有一个内存通道。因此,硬件中的并行度仅为min(p,4),而不是处理器p的数量。我们仍然观察到加速> 4因为单个进程无法充分利用套接字的带宽,因为它还花费一些时间来计算内存地址和内容。
你认为这是一个合理的解释吗?如果你纠正了一些细节,我也非常欢迎,因为我即将撰写一份报告并且不想愚弄自己。特别是,我不确定加速的解释> 4.毕竟,新内存地址的计算可能与获取旧内存地址的时间相同,那么为什么单个进程不能使用全内存带宽呢?
答案 0 :(得分:0)
嗯,我的猜测是你遇到的问题是由多种因素共同造成的。除缓存效果外,此处的主要问题与节点的体系结构严格相关。我的意思是你的节点应至少有两个存储体,如果不是四个存储体。现在,内存在所有可用内核之间共享,但内存访问具有不同的成本,具体取决于您将进程映射到内核的方式。
假设您的数据完全适合其中一个存储库。然后,映射到存储体为“本地”的核的进程,即可通过与处理器相关联的相同存储器控制器访问,具有对存储器的直接访问,并且访问成本低。但是,映射到属于不同处理器的内核的其他进程在访问内存时会产生更高的成本,因为严格来说,这种访问不是本地访问,而是远程"。这可能是问题的一部分。