gpt4 book ai didi

Fortran、Open MP、间接递归和有限的堆栈内存

转载 作者:行者123 更新时间:2023-12-01 13:17:22 28 4
gpt4 key购买 nike

在与堆栈空间、OpenMP 以及如何处理这些问题相关的其他帖子上,有很多回复。但是,我找不到信息来真正理解 OpenMP 调整编译器选项的原因:

原因是什么-fopenmp在 gfortran 中暗示 -frecursive ?

文档说:

Allow indirect recursion by forcing all local arrays to be allocated on the stack



但是,我没有上下文来理解这一点。为什么并行化需要间接递归?

为什么并行化希望所有本地数组都在堆栈上?

我想了解,所以我知道覆盖这些选项的后果,例如,使用 -fmax-stack-var-size=n , 以避免堆栈溢出问题。

最佳答案

如果没有 -frecursive,编译器会将超出限制的局部变量 -fmax-stack-var-size= 放入静态内存而不是堆栈中。也就是说,它们的行为就像它们具有 SAVE 属性一样,并且它们在所有线程之间共享。这些语义对于多线程程序是没有意义的,因此 -fopenmp 意味着 -frecursive。

由于多线程程序的日益流行,并且因为 F2018 指定过程默认是递归的,这种行为将在 GFortran 的 future 版本中改变,最有可能通过在超过堆栈变量的大小限制时切换到堆分配而不是使用静态内存。但就目前而言,这不是一个选择。

关于Fortran、Open MP、间接递归和有限的堆栈内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53493043/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com