我最近发现在Fortran中使用纯函数和子例程.从Fortran手册中可以看出,似乎我的大部分子程序实际上都可以定义为纯(因为我总是指定所有参数的意图,通常我没有"保存","暂停"或外部I/O在我的大部分子程序中).我的问题是:我应该这样做吗?我想知道编译器是否优化了更好的纯子程序,或者它是否无关紧要,或者它是否会使事情变得更糟.谢谢 !
Jon*_*rsi 20
您使用编译器生成良好的代码,并且您为编译器提供的信息越多,您们两个人可以一起完成的工作就越好.
无论是使用intent(in)任何伪参数进行标记,您都不会更改,或者使用parameter常量,或明确地制作pure任何没有任何副作用的子程序,或者forall在您不关心计算循环的顺序时使用,通过更明确地了解您想要发生的事情,您将受益,因为:
在这三个好处中,优化可能不是最重要的; 在纯子程序的情况下,智能编译器可能只能通过静态分析看到您的子程序没有副作用.尽管如此,您可以提供的保证越多,在保持正确性的同时优化代码的工作就越好.
据我所知,它在顺序模式下无关紧要.但是,如果激活"自动并行化"选项,则编译器有时可以利用PURE声明来并行化包含对纯子例程的调用的循环(多线程)(如果子例程不纯,则不会冒风险).出于同样的原因,PURE声明对于想要手动设置//指令(例如OpenMP)的程序员也很有用,因为此类过程出现问题的风险相当有限.通常可以通过调用非纯子程序来并行化循环,但这需要深度验证......
| 归档时间: |
|
| 查看次数: |
3674 次 |
| 最近记录: |