更重要的是这个:
编译器能够自动处理内存访问步长(Stride),并针对 CPU 的缓存(Cache)层级进行深度优化,比如自动进行循环展开(Loop Unrolling)、循环分块(Loop Blocking)和循环融合(Loop Fusion),以最大化内存命中率。
c里边需要你思考怎么分块怎么循环。
【 在 z16166 的大作中提到: 】
: 主要就是这个“别名”问题:
: 在纯粹的数值密集型矩阵计算领域,Fortran 依靠天生绝缘指针别名的数组处理机制,闭着眼睛都能让编译器完成极致的向量化展开。用 C/C++ 去硬刚这种领域,如果你不是对编译器底层优化有着极其变态的理解,写出来的现代代码,性能就是会被几十年前的 Fortran 按在地上疯狂摩擦。
:
--
FROM 221.221.54.*