主题:经典错误解决不了:openmp中segmentation fault
baccle
[专家分:190] 发布于 2011-07-13 15:41:00
程序串行时没有错误,一加上openmp并行后就运行不了,报错是
/var/spool/torque/mom_priv/jobs/6127.node1.SC: line 11: 629 Segmentation fault
上网查了一下这个错误的原因,然后做了以下这些
1.在工作目录下找到.bashrc文件,加入语句export STACKSIZE=500M
2.在提交任务的脚本中加入语句 export STACSIZE=500M
3.在SSH页面上运行ulimit -s 500000
4.在openmp并行区,把比较大的数组都改成了动态数组
不过都没用,还是同样的错误,不知道该怎么办了,上来请教高手们
谢谢!!!
(用的是gfortran编译器,曙光集群)
回复列表 (共23个回复)
沙发
cgl_lgs [专家分:21040] 发布于 2011-07-13 16:03:00
编译选项是啥?如果有-march=XXX,那就试试改成-march=i686
板凳
baccle [专家分:190] 发布于 2011-07-14 10:41:00
编译选项是 -O3,-ftree-vectorize -fopenmp,你说的改的-march=XXX是什么意思呢,看了你们以前的帖子知道是线程堆栈的问题,可是怎么解决呢?
谢谢哈
3 楼
yeg001 [专家分:14390] 发布于 2011-07-14 11:27:00
1. 确定不是代码问题?
2. 集群上怎么用omp?(我对曙光集群不了解)
4 楼
baccle [专家分:190] 发布于 2011-07-14 11:37:00
代码肯定没问题,在个人机的window下运行8个线程一点问题都没有,在曙光上运行是用它的一个节点,就相当于是一台电脑。
5 楼
yeg001 [专家分:14390] 发布于 2011-07-14 13:12:00
在一个节点上确实是相当于一个电脑.
我遇到过一种情况, 就是某个节点的内存被其他人使用得差不多没有的时候, omp也是提示出错. 不知道曙光可不可以查看该程序当前所在节点的资源情况?
6 楼
cgl_lgs [专家分:21040] 发布于 2011-07-14 14:49:00
gcc是啥版本捏?用董兄编译的版本试试看看行不行?
7 楼
dongyuanxun [专家分:7180] 发布于 2011-07-14 15:43:00
[quote]gcc是啥版本捏?用董兄编译的版本试试看看行不行?[/quote]
我没出Linux版
8 楼
dongyuanxun [专家分:7180] 发布于 2011-07-14 15:47:00
另外,环境变量名字对么
记得名字是OMP_STACKSIZE和GOMP_STACKSIZE
9 楼
dongyuanxun [专家分:7180] 发布于 2011-07-14 15:49:00
另外Segmentation fault也有可能是其他错误
需要gdb自己调试
10 楼
baccle [专家分:190] 发布于 2011-07-15 17:05:00
这个节点是我独享的,应该不会出现这种情况
我来回复