【发布时间】:2012-01-27 01:44:53
【问题描述】:
我有一个问题,我之前曾尝试询问过,但没走多远,找到了新信息,希望能得到更多帮助。该代码是一个混合的MPI/OPENMP 代码,在尝试跨多个节点运行时会因分段错误而崩溃(尽管如果它只在一个节点上执行,它是有效的,它是生成主进程的节点)。问题中有静态数组,我发现如果静态数组“太大”会导致 seg 错误,但如果它们“小”则一切正常。我还将代码转换为动态内存分配作为测试,这解决了问题......无论大小(即使是在静态世界中失败的较大的),代码都可以正常运行。这个解决方案不是一个长期的解决方案,因为测试代码只是......一个测试代码,有一个更大的代码表现出相同的行为并且将其更改为动态不是一种选择。我需要确定导致静态数组段错误情况的原因。
基本上,如何处理静态分配和动态分配的内存有什么区别?我应该尝试什么(除了我尝试过的事情)来克服这个问题?我认为问题与系统设置有关,可能仅在通过 MPICH2 传递作业时才违反,但在登录节点时不是问题(因此为什么它在我当前登录的节点上运行良好)。
在我的.bashrc 文件中,我有“ulimit -s unlimited”、“export OMP_STACKSIZE=4g”和“export KMP_STACKSIZE=4G”,因为我使用的是 ifort 编译器。我相信这一定是一个相对简单的解决方法,但我做不到。
如果需要违规程序源代码,我可以将其发送出去,但我认为这里给出的描述涵盖了问题,请告诉我。
【问题讨论】:
标签: linux bash fortran mpi openmp