Mep*_*sto 6 performance fortran pointers compiler-optimization
我试图将数组传递给子程序,在子程序中声明为假定的形状数组.这给了我一些我通过传递指针而能够解决的问题.
但是一些声誉很高的用户在评论中告诉我:
添加指针也是告诉编译器优化器它今天不需要做任何工作的合理方法.
有人可以提供简短的解释吗?该语言是Fortran 95,但我相信这适用于其他语言.
是的,Fortran 编译器必须假设指针可以与其他指针和target变量别名。
如果你有指针数组a然后b在
a(i) = a(i) + b(i)
Run Code Online (Sandbox Code Playgroud)
编译器必须假设这两个数组可能部分重叠,并且必须禁止某些优化,因为更改 的值可能会更改某些未知索引处a的某些值。b
另请参阅 Crestrict关键字以及更全面的讨论,对于繁重的计算,Fortran 是否比 C 更容易优化?。不值得重复那里提出的有关指针别名的所有观点。
IanH 的评论可能是故意的,也许有点过于强烈,但其中有很多道理。