如何解决英特尔有限责任公司的某些怪异行为
我有一个 单线程 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 举报,一经查实,本站将立刻删除。