我正在优化一个矩阵数值热点。
目前,我正在进行阻塞和循环展开以提高性能。但是,我故意避免剥去边框。相反,我让阻塞步骤溢出,当然,算法随后会触及未初始化的值。
但是,矩阵被慷慨地预先分配以应对溢出,因此我实际上并没有非法访问内存位置。
我不剥皮有几个原因:
- 懒惰
- 由于剥离边界案例的位置非常糟糕,性能受到影响。
- 避免复杂的边框剥离代码。
但是,我想知道这些触及未初始化值的溢出访问是否真的会导致性能下降?
我可以预见地知道未初始化的访问发生在哪里,并且它们也通过 valgrind 报告。我还使用 Intel 的 VTune 对代码进行了概要分析,并且看不到任何表明性能下降的迹象。