我正在使用 Visual Studio + Intel Fortran 编译 Fortran 程序。该程序连续运行良好。
但是,当我尝试并行化代码时,代码卡住并给出错误:chkstk.asm not found
。
有趣的是,如果我减小某些数组的大小,代码会再次很好地并行化并且不会显示错误。
我尝试了 this link 上的解决方案:转到解决方案(不是项目)的属性页中,在“通用属性/调试源文件”下,在“无调试”下列出 chkstk.asm 文件,但没有运气。
下面还有错误的打印屏幕。
最佳答案
您的程序出现问题,您的调试器(本例中为 Visual Studio)已收到通知。然后,您的调试器将查找与问题位置相关的源代码。它找不到该源代码,很可能是因为您没有安装它(它是底层 C 运行时库的一部分)。
但是您并不特别需要(或想要)该源代码来了解问题的本质。
根据其名称,chkstk.asm 中的代码检查/探测堆栈,以确保堆栈上有足够的空间用于堆栈分配。检查很可能失败,因为堆栈空间不足。您可以使用调用堆栈窗口来识别 Fortran 源代码中与堆栈分配相关的位置 - 它可能与过程的调用(为函数的局部变量创建存储)或表达式(创建函数结果等的临时存储)。
并行代码往往会更频繁地使用堆栈,因为这是一种使存储特定于特定执行线程的简单方法。通常需要增加为每个堆栈保留的内存量(在相关可执行项目的属性中参见“链接器”>“系统”>“堆栈保留大小”下,默认只有1MB左右,尝试将其设置为10MB)。您可能还想告诉编译器使用基于堆的分配而不是基于堆栈的分配(在 Fortran > Optimization 下的项目属性中,将堆数组设置为 0)。
英特尔论坛上有大量针对此类问题的帖子和文章。
关于visual-studio - 英特尔 Fortran - chkstk.asm 未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37888601/