为什么 GCC 不向量化,或者在寄存器中累加和?

问题描述 投票:0回答:0

GCC 生成一些非常慢的代码,用于将大小为 8 x 250 的矩阵乘以大小为 250 x 4 的矩阵。Here 是 GCC 生成的代码,以及我想要/期望它生成的版本。 GCC 不会向量化循环,即使我看不到任何依赖关系并且 -Ofast 放宽了对浮点运算的关联性要求。为什么它不矢量化?此外,GCC 不会将 c 的总和累加到寄存器中,而是在我们每次进行加法运算时写回内存。这是为什么?

手写的在我的zen2处理器上快了5倍。 Clang 会矢量化,但也会做一些奇怪的事情,使其比 GCC 慢 2 倍。

gcc optimization vectorization matrix-multiplication cpu-registers
© www.soinside.com 2019 - 2024. All rights reserved.