英特尔 Fortran - chkstk.asm 未找到

Intel Fortran - chkstk.asm not found

我正在使用 Visual Studio + Intel Fortran 编译 Fortran 程序。该程序串行运行良好。

然而,当我尝试并行化代码时,代码卡住并给出错误:chkstk.asm not found

有趣的是,如果我减小某些数组的大小,代码会再次很好地并行化并且不会显示任何错误。

我在 this link 上尝试了解决方案:转到解决方案(不是项目)的 属性 页面中,在通用属性/调试源文件下,列出 chkstk.asm 文件在 "no debbuging" 之下,但没有运气。

下面还有错误的打印屏幕。

您的程序出现问题,您的调试器(在本例中为 Visual Studio)已收到通知。然后,您的调试器会查找与问题位置相关联的源代码。它找不到该源代码,很可能是因为您没有安装它(它是底层 C 运行时库的一部分)。

但您并不特别需要(或想要)该源代码来理解问题的本质。

顾名思义,chkstk.asm checks/probes 堆栈中的代码确保堆栈上有足够的 space 提交用于堆栈分配。有可能检查失败是因为堆栈不足 space。您可以使用调用堆栈 window 来识别 Fortran 源代码中与堆栈分配相关的位置 - 它可能与过程调用相关联(为函数的局部变量创建存储)或一个表达式(为函数结果等的临时对象创建存储)。

并行代码倾向于更多地使用堆栈,因为这是一种使存储特定于特定执行线程的简单方法。您通常需要增加为每个堆栈保留的内存量(在相关可执行项目的属性中,请参阅链接器>系统>堆栈保留大小,默认只有1MB左右,请尝试将其设置为10MB)。您可能还想告诉编译器使用基于堆的分配而不是基于堆栈的分配(在 Fortran > 优化下的项目属性中,将堆数组设置为 0)。

英特尔论坛上有很多关于此类问题的帖子和文章。