问题描述
我有一个 单线程 void函数,我称其性能为f。 f将指向大小为1.5Mb左右的浮点缓冲区的指针作为输入,我们称之为x。 f写入另一个缓冲区,比方说y。 y的大小也约为1.5Mb。所以要使用f,我们称f(x,y)。
现在我跑了1000次。在方案一中,我有一个x和一个y,所以我做f(x,y)一千次。 f读取x可以从本地缓存中获取数据,而且速度很快。
在第二种情况下,我有一个x和1000个不同的y,请考虑y0,y1 ... y999,每个缓冲区的大小约为1.5Mb。 (是否在内存中连续,显然无关紧要)当我执行f(x,y0),f(x,y1),f(x,y2)...时,不再提供f对x的读取本地缓存!我发现LLC未命中,并因DRAM延迟而成为瓶颈。
这是怎么回事?我正在运行Intel Kaby Lake四核笔记本电脑。 i5-8250。 L3缓存大小为6144K。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)