【发布时间】:2017-04-24 08:42:15
【问题描述】:
我试图将数组传递给子程序,在子程序中声明为假定的形状数组。这给了我一些我可以通过传递指针来解决的问题。
但是一些声誉很高的用户在评论中告诉我:
添加指针也是告诉编译器优化器它今天不需要做任何工作的合理方式。
谁能提供一个简短的解释?语言是 Fortran 95,尽管我相信这适用于其他语言。
【问题讨论】:
-
我认为 OP 指的是this comment。
-
确实如此。对于 SIMD,无论该点是否按顺序索引,都很难保证数据是连续的。 Fortran 可能比大多数语言更正确,因为许多 Fortran 专门针对向量/数组。但是编译器的胆量通常都接近渐近线,在该渐近线中,fortran 和 c 之间的程序集几乎相同。通常意味着某些事情,更难的代码需要更多的工作。
-
@4castle 我故意没有包含指向原始评论的链接,因为它包含误导性信息:(通过使用指针)“您不再能够传递数组部分”,这是错误的.在将数组部分作为参数传递给子例程之前,没有什么比将指针分配给数组部分更容易的了。
标签: performance pointers fortran compiler-optimization